fix: make no buffer space available when adding multicast memberships… · python-zeroconf/python-zeroconf@f377d5c
@@ -4,6 +4,7 @@
4455import errno
66import socket
7+import sys
78import unittest
89from unittest.mock import MagicMock, Mock, patch
910@@ -181,7 +182,7 @@ def test_set_mdns_port_socket_options_for_ip_version():
181182netutils.set_mdns_port_socket_options_for_ip_version(sock, ("",), r.IPVersion.V4Only)
182183183184184-def test_add_multicast_member():
185+def test_add_multicast_member(caplog: pytest.LogCaptureFixture) -> None:
185186sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
186187interface = "127.0.0.1"
187188@@ -221,6 +222,26 @@ def test_add_multicast_member():
221222with patch("socket.socket.setsockopt"):
222223assert netutils.add_multicast_member(sock, interface) is True
223224225+# Ran out of IGMP memberships is forgiving and logs about igmp_max_memberships on linux
226+caplog.clear()
227+with (
228+patch.object(sys, "platform", "linux"),
229+patch("socket.socket.setsockopt", side_effect=OSError(errno.ENOBUFS, "No buffer space available")),
230+ ):
231+assert netutils.add_multicast_member(sock, interface) is False
232+assert "No buffer space available" in caplog.text
233+assert "net.ipv4.igmp_max_memberships" in caplog.text
234+235+# Ran out of IGMP memberships is forgiving and logs
236+caplog.clear()
237+with (
238+patch.object(sys, "platform", "darwin"),
239+patch("socket.socket.setsockopt", side_effect=OSError(errno.ENOBUFS, "No buffer space available")),
240+ ):
241+assert netutils.add_multicast_member(sock, interface) is False
242+assert "No buffer space available" in caplog.text
243+assert "net.ipv4.igmp_max_memberships" not in caplog.text
244+224245225246def test_bind_raises_skips_address():
226247"""Test bind failing in new_socket returns None on EADDRNOTAVAIL."""