66according to this topology.
77"""
88import time
9- from typing import List
9+ from typing import Any , Callable , List , Optional
1010
1111import pytest
1212from pubsub import pub # type: ignore[import-untyped]
@@ -19,11 +19,14 @@ class _PacketCollector:
1919
2020 def __init__ (self ):
2121 self .packets : List [dict ] = []
22+ self ._handler : Optional [Callable [..., Any ]] = None
2223
2324 def on_receive (self , packet , interface ): # pylint: disable=unused-argument
25+ """Store a received packet."""
2426 self .packets .append (packet )
2527
2628 def wait_for (self , count : int , timeout : float = RECEIVE_TIMEOUT ) -> bool :
29+ """Wait until *count* packets have been collected or *timeout* expires."""
2730 deadline = time .monotonic () + timeout
2831 while time .monotonic () < deadline :
2932 if len (self .packets ) >= count :
@@ -33,6 +36,7 @@ def wait_for(self, count: int, timeout: float = RECEIVE_TIMEOUT) -> bool:
3336
3437 @property
3538 def texts (self ) -> List [str ]:
39+ """Return text payloads from TEXT_MESSAGE_APP packets."""
3640 return [
3741 p .get ("decoded" , {}).get ("text" , "" )
3842 for p in self .packets
@@ -41,12 +45,14 @@ def texts(self) -> List[str]:
4145
4246 @property
4347 def traceroutes (self ) -> List [dict ]:
48+ """Return TRACEROUTE_APP packets."""
4449 return [
4550 p for p in self .packets
4651 if p .get ("decoded" , {}).get ("portnum" ) == "TRACEROUTE_APP"
4752 ]
4853
4954 def reset (self ):
55+ """Clear all collected packets."""
5056 self .packets .clear ()
5157
5258
0 commit comments