@@ -576,3 +576,39 @@ def test_autodetect_ip_version_includes_multicast_addresses() -> None:
576576 netutils .autodetect_ip_version (["127.0.0.1" ], multicast_addresses = ["2001:db8::" ]) is r .IPVersion .All
577577 )
578578 assert netutils .autodetect_ip_version ([], multicast_addresses = ["2001:db8::" ]) is r .IPVersion .V6Only
579+
580+
581+ def test_autodetect_ip_version_non_list_interfaces_with_multicast_addresses () -> None :
582+ """autodetect_ip_version handles non-list interfaces (InterfaceChoice) with multicast_addresses."""
583+ assert (
584+ netutils .autodetect_ip_version (r .InterfaceChoice .Default , multicast_addresses = ["2001:db8::" ])
585+ is r .IPVersion .V6Only
586+ )
587+ assert (
588+ netutils .autodetect_ip_version (r .InterfaceChoice .Default , multicast_addresses = ["192.168.1.5" ])
589+ is r .IPVersion .V4Only
590+ )
591+
592+
593+ def test_create_sockets_multicast_addresses_ip_version_all () -> None :
594+ """multicast_addresses works with ip_version=All (no V4Only/V6Only validation triggered)."""
595+ listen_mock = Mock (spec = socket .socket )
596+ respond_mock = Mock (spec = socket .socket )
597+
598+ def _new_socket (bind_addr , ** kwargs ):
599+ return listen_mock if bind_addr == ("" ,) else respond_mock
600+
601+ with (
602+ patch ("zeroconf._utils.net.new_socket" , side_effect = _new_socket ),
603+ patch ("zeroconf._utils.net.add_multicast_member" , return_value = True ) as mock_add ,
604+ patch ("zeroconf._utils.net.set_respond_socket_multicast_options" ),
605+ patch ("zeroconf._utils.net.socket.socket.setsockopt" ),
606+ ):
607+ r .create_sockets (
608+ interfaces = ["127.0.0.1" ],
609+ multicast_addresses = ["192.168.1.5" ],
610+ ip_version = r .IPVersion .All ,
611+ )
612+
613+ joined = [c .args [1 ] for c in mock_add .call_args_list if c .args [0 ] is listen_mock ]
614+ assert "192.168.1.5" in joined
0 commit comments