fix: make no buffer space available when adding multicast memberships… · python-zeroconf/python-zeroconf@f377d5c

@@ -4,6 +4,7 @@

4455

import errno

66

import socket

7+

import sys

78

import unittest

89

from unittest.mock import MagicMock, Mock, patch

910

@@ -181,7 +182,7 @@ def test_set_mdns_port_socket_options_for_ip_version():

181182

netutils.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:

185186

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

186187

interface = "127.0.0.1"

187188

@@ -221,6 +222,26 @@ def test_add_multicast_member():

221222

with patch("socket.socket.setsockopt"):

222223

assert 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+224245225246

def test_bind_raises_skips_address():

226247

"""Test bind failing in new_socket returns None on EADDRNOTAVAIL."""