@@ -3518,6 +3518,20 @@ def test_humidifer_with_empty_data() -> None:
35183518 "Presence Sensor" ,
35193519 SwitchbotModel .PRESENCE_SENSOR ,
35203520 ),
3521+ AdvTestCase (
3522+ b"\xb0 \xe9 \xfe R\xdd \x84 \x06 d\x08 \x97 ,\x00 \x05 " ,
3523+ b"\x14 \x00 d" ,
3524+ {
3525+ "battery" : 100 ,
3526+ "fahrenheit" : False ,
3527+ "humidity" : 44 ,
3528+ "temp" : {"c" : 23.8 , "f" : 74.84 },
3529+ "temperature" : 23.8 ,
3530+ },
3531+ b"\x14 " ,
3532+ "Meter Pro" ,
3533+ SwitchbotModel .METER_PRO ,
3534+ )
35213535 ],
35223536)
35233537def test_adv_active (test_case : AdvTestCase ) -> None :
@@ -4091,3 +4105,35 @@ def test_parse_advertisement_with_mac_cache_curtain() -> None:
40914105
40924106 # Clean up
40934107 _MODEL_TO_MAC_CACHE .clear ()
4108+
4109+ @pytest .mark .parametrize (
4110+ ("manufacturer_data" , "service_data" , "model" ),
4111+ [
4112+ (b"\xff \xff \xff \xff " , b"\xff \xff \xff \xff " , None ),
4113+ (b"\xff \xff \xff \xff " , b"\xff \xff \xff \xff " , "F" ),
4114+ (b"\xff \xff \xff \xff \xff \xff \xff " , b"\xff \xff \xff \xff \xff \xff \xff \xff " , None ),
4115+ (None , None , None ),
4116+ ]
4117+ )
4118+ def test_with_invalid_advertisement (manufacturer_data , service_data , model ) -> None :
4119+ """Test with invalid advertisement data."""
4120+ ble_device = generate_ble_device ("aa:bb:cc:dd:ee:ff" , "any" )
4121+ adv_data = generate_advertisement_data (
4122+ manufacturer_data = {2409 : manufacturer_data },
4123+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : service_data },
4124+ rssi = - 97 ,
4125+ )
4126+ result = parse_advertisement_data (ble_device , adv_data , model )
4127+ assert result is None
4128+
4129+ def test_with_special_manufacturer_data_length () -> None :
4130+ """Test with special manufacturer data length."""
4131+ ble_device = generate_ble_device ("aa:bb:cc:dd:ee:ff" , "any" )
4132+ adv_data = generate_advertisement_data (
4133+ manufacturer_data = {741 : b"\xac g\xb2 \xcd \xfa \xbe " },
4134+ service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"\xff \x80 \x00 \xf9 \x80 Bc\x00 " },
4135+ rssi = - 97 ,
4136+ )
4137+ result = parse_advertisement_data (ble_device , adv_data )
4138+ print (result )
4139+ assert result .data ["modelName" ] == SwitchbotModel .HUMIDIFIER
0 commit comments