86890704fd
todo: add documentation & wireshark dissector
94 lines
2.4 KiB
Text
Executable file
94 lines
2.4 KiB
Text
Executable file
% AltBeacon unit tests
|
|
#
|
|
# Type the following command to launch start the tests:
|
|
# $ test/run_tests -P "load_contrib('altbeacon')" -t scapy/contrib/altbeacon.uts
|
|
#
|
|
# AltBeaconParser tests adapted from:
|
|
# https://github.com/AltBeacon/android-beacon-library/blob/master/lib/src/test/java/org/altbeacon/beacon/AltBeaconParserTest.java
|
|
|
|
+ AltBeacon tests
|
|
|
|
= Setup
|
|
|
|
def next_eir(p):
|
|
return EIR_Hdr(p[Padding])
|
|
|
|
= Presence check
|
|
|
|
AltBeacon
|
|
|
|
= AltBeaconParserTest.testRecognizeBeacon
|
|
|
|
d = hex_bytes('02011a1bff1801beac2f234454cf6d4a0fadf2f4911ba9ffa600010002c509')
|
|
p = EIR_Hdr(d)
|
|
|
|
# First is a flags header
|
|
assert EIR_Flags in p
|
|
|
|
# Then the AltBeacon
|
|
p = next_eir(p)
|
|
assert p[EIR_Manufacturer_Specific_Data].company_id == RADIUS_NETWORKS_MFG
|
|
assert p[AltBeacon].mfg_reserved == 9
|
|
|
|
|
|
= AltBeaconParserTest.testDetectsDaveMHardwareBeacon
|
|
|
|
d = hex_bytes('02011a1bff1801beac2f234454cf6d4a0fadf2f4911ba9ffa600050003be020e09526164426561636f6e20555342020a03000000000000000000000000')
|
|
p = EIR_Hdr(d)
|
|
|
|
# First is Flags
|
|
assert EIR_Flags in p
|
|
|
|
# Then the AltBeacon
|
|
p = next_eir(p)
|
|
assert p[EIR_Manufacturer_Specific_Data].company_id == RADIUS_NETWORKS_MFG
|
|
assert AltBeacon in p
|
|
|
|
# Then CompleteLocalName
|
|
p = next_eir(p)
|
|
assert p[EIR_CompleteLocalName].local_name == b'RadBeacon USB'
|
|
|
|
# Then TX_Power_Level
|
|
p = next_eir(p)
|
|
assert p[EIR_TX_Power_Level].level == 3
|
|
|
|
= AltBeaconParserTest.testParseWrongFormatReturnsNothing
|
|
|
|
d = hex_bytes('02011a1aff1801ffff2f234454cf6d4a0fadf2f4911ba9ffa600010002c509')
|
|
p = EIR_Hdr(d)
|
|
|
|
# First is Flags
|
|
assert EIR_Flags in p
|
|
|
|
# Then the EIR_Manufacturer_Specific_Data
|
|
p = next_eir(p)
|
|
assert p[EIR_Manufacturer_Specific_Data].company_id == RADIUS_NETWORKS_MFG
|
|
assert AltBeacon not in p
|
|
|
|
= AltBeaconParserTest.testParsesBeaconMissingDataField
|
|
|
|
d = hex_bytes('02011a1aff1801beac2f234454cf6d4a0fadf2f4911ba9ffa600010002c50000')
|
|
p = EIR_Hdr(d)
|
|
|
|
# First is Flags
|
|
assert EIR_Flags in p
|
|
|
|
# Then the EIR_Manufacturer_Specific_Data
|
|
p = next_eir(p)
|
|
assert p[EIR_Manufacturer_Specific_Data].company_id == RADIUS_NETWORKS_MFG
|
|
assert p[AltBeacon].id1 == uuid.UUID('2f234454-cf6d-4a0f-adf2-f4911ba9ffa6')
|
|
assert p[AltBeacon].id2 == 1
|
|
assert p[AltBeacon].id3 == 2
|
|
assert p[AltBeacon].tx_power == -59
|
|
|
|
= Build EIR
|
|
|
|
p = AltBeacon(
|
|
id1=uuid.UUID('2f234454-cf6d-4a0f-adf2-f4911ba9ffa6'),
|
|
id2=1,
|
|
id3=2,
|
|
tx_power=-59,
|
|
)
|
|
|
|
d = raw(p.build_eir()[-1])
|
|
assert d == hex_bytes('1bff1801beac2f234454cf6d4a0fadf2f4911ba9ffa600010002c500')
|