@@ -85,9 +85,9 @@ async def test_discover_send(mocker):
85
85
proto = _DiscoverProtocol ()
86
86
assert proto .discovery_packets == 3
87
87
assert proto .target == ("255.255.255.255" , 9999 )
88
- sendto = mocker .patch .object (proto , "transport" )
88
+ transport = mocker .patch .object (proto , "transport" )
89
89
proto .do_discover ()
90
- assert sendto .sendto .call_count == proto .discovery_packets
90
+ assert transport .sendto .call_count == proto .discovery_packets
91
91
92
92
93
93
async def test_discover_datagram_received (mocker , discovery_data ):
@@ -105,3 +105,15 @@ async def test_discover_datagram_received(mocker, discovery_data):
105
105
dev = proto .discovered_devices [addr ]
106
106
assert issubclass (dev .__class__ , SmartDevice )
107
107
assert dev .host == addr
108
+
109
+
110
+ @pytest .mark .parametrize ("msg, data" , INVALIDS )
111
+ async def test_discover_invalid_responses (msg , data , mocker ):
112
+ """Verify that we don't crash whole discovery if some devices in the network are sending unexpected data."""
113
+ proto = _DiscoverProtocol ()
114
+ mocker .patch ("json.loads" , return_value = data )
115
+ mocker .patch .object (protocol .TPLinkSmartHomeProtocol , "encrypt" )
116
+ mocker .patch .object (protocol .TPLinkSmartHomeProtocol , "decrypt" )
117
+
118
+ proto .datagram_received (data , ("127.0.0.1" , 1234 ))
119
+ assert len (proto .discovered_devices ) == 0
0 commit comments