1212import time
1313import unittest
1414import unittest .mock
15- from typing import cast
16- from unittest .mock import patch
15+ from typing import Tuple , Union , cast
16+ from unittest .mock import Mock , patch
1717
1818if sys .version_info [:3 ][1 ] < 8 :
19- from unittest .mock import Mock
20-
2119 AsyncMock = Mock
2220else :
2321 from unittest .mock import AsyncMock
2624
2725import zeroconf as r
2826from zeroconf import NotRunningException , Zeroconf , const , current_time_millis
27+ from zeroconf ._listener import AsyncListener , _WrappedTransport
28+ from zeroconf ._protocol .incoming import DNSIncoming
2929from zeroconf .asyncio import AsyncZeroconf
3030
3131from . import _clear_cache , _inject_response , _wait_for_start , has_working_ipv6
@@ -45,10 +45,19 @@ def teardown_module():
4545 log .setLevel (original_logging_level )
4646
4747
48- def threadsafe_query (zc , protocol , * args ):
48+ def threadsafe_query (
49+ zc : 'Zeroconf' ,
50+ protocol : 'AsyncListener' ,
51+ msg : DNSIncoming ,
52+ addr : str ,
53+ port : int ,
54+ transport : _WrappedTransport ,
55+ v6_flow_scope : Union [Tuple [()], Tuple [int , int ]],
56+ ) -> None :
4957 async def make_query ():
50- protocol .handle_query_or_defer (* args )
58+ protocol .handle_query_or_defer (msg , addr , port , transport , v6_flow_scope )
5159
60+ assert zc .loop is not None
5261 asyncio .run_coroutine_threadsafe (make_query (), zc .loop ).result ()
5362
5463
@@ -476,28 +485,28 @@ def test_tc_bit_defers():
476485
477486 next_packet = r .DNSIncoming (packets .pop (0 ))
478487 expected_deferred .append (next_packet )
479- threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , None )
488+ threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , Mock (), () )
480489 assert protocol ._deferred [source_ip ] == expected_deferred
481490 assert source_ip in protocol ._timers
482491
483492 next_packet = r .DNSIncoming (packets .pop (0 ))
484493 expected_deferred .append (next_packet )
485- threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , None )
494+ threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , Mock (), () )
486495 assert protocol ._deferred [source_ip ] == expected_deferred
487496 assert source_ip in protocol ._timers
488- threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , None )
497+ threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , Mock (), () )
489498 assert protocol ._deferred [source_ip ] == expected_deferred
490499 assert source_ip in protocol ._timers
491500
492501 next_packet = r .DNSIncoming (packets .pop (0 ))
493502 expected_deferred .append (next_packet )
494- threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , None )
503+ threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , Mock (), () )
495504 assert protocol ._deferred [source_ip ] == expected_deferred
496505 assert source_ip in protocol ._timers
497506
498507 next_packet = r .DNSIncoming (packets .pop (0 ))
499508 expected_deferred .append (next_packet )
500- threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , None )
509+ threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , Mock (), () )
501510 assert source_ip not in protocol ._deferred
502511 assert source_ip not in protocol ._timers
503512
@@ -555,20 +564,20 @@ def test_tc_bit_defers_last_response_missing():
555564
556565 next_packet = r .DNSIncoming (packets .pop (0 ))
557566 expected_deferred .append (next_packet )
558- threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , None )
567+ threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , Mock (), () )
559568 assert protocol ._deferred [source_ip ] == expected_deferred
560569 timer1 = protocol ._timers [source_ip ]
561570
562571 next_packet = r .DNSIncoming (packets .pop (0 ))
563572 expected_deferred .append (next_packet )
564- threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , None )
573+ threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , Mock (), () )
565574 assert protocol ._deferred [source_ip ] == expected_deferred
566575 timer2 = protocol ._timers [source_ip ]
567576 assert timer1 .cancelled ()
568577 assert timer2 != timer1
569578
570579 # Send the same packet again to similar multi interfaces
571- threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , None )
580+ threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , Mock (), () )
572581 assert protocol ._deferred [source_ip ] == expected_deferred
573582 assert source_ip in protocol ._timers
574583 timer3 = protocol ._timers [source_ip ]
@@ -577,7 +586,7 @@ def test_tc_bit_defers_last_response_missing():
577586
578587 next_packet = r .DNSIncoming (packets .pop (0 ))
579588 expected_deferred .append (next_packet )
580- threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , None )
589+ threadsafe_query (zc , protocol , next_packet , source_ip , const ._MDNS_PORT , Mock (), () )
581590 assert protocol ._deferred [source_ip ] == expected_deferred
582591 assert source_ip in protocol ._timers
583592 timer4 = protocol ._timers [source_ip ]
0 commit comments