Fix dropped change flags + FIDI parsing
- capture.py: DirectSniffer/GsmtapListener yield (type, data, flags), CaptureManager passes flags to insert_message (change flags were previously dropped, leaving every change row with flags=0) - protocol.py: add _parse_fidi (1-byte value) — FIDI was mis-mapped to _parse_change (4-byte flags), so FIDI messages were silently dropped - database.py: pass flags into decode_sniff_msg - decode.py: decode_change(flags) reads flags directly; decode_sniff_msg gains flags parameter; change messages no longer require non-empty data - tests: fix FIDI test, add change/fidi decode tests (43 total)
This commit is contained in:
1 parent
4097bb864e
commit
2a58fec0a3
7 files changed
+52
-20
No files matched your search
@@ -92,5 +92,32 @@ class TestCommandTypeTables(unittest.TestCase):
|
||||
self.assertEqual(ENVELOPE_TYPES[0xD6], 'EVENT DOWNLOAD')
|
||||
|
||||
|
||||
class TestChangeAndFidiDecoding(unittest.TestCase):
|
||||
def test_change_reset_assert(self):
|
||||
r = decode_sniff_msg(b'', 'change', flags=1 << 2)
|
||||
self.assertEqual(r['type'], 'change')
|
||||
self.assertEqual(r['flags'], ['Reset asserted'])
|
||||
|
||||
def test_change_card_insert(self):
|
||||
r = decode_sniff_msg(b'', 'change', flags=1 << 0)
|
||||
self.assertEqual(r['flags'], ['Card inserted'])
|
||||
|
||||
def test_change_multiple_flags(self):
|
||||
r = decode_sniff_msg(b'', 'change', flags=(1 << 2) | (1 << 3))
|
||||
self.assertEqual(r['flags'], ['Reset asserted', 'Reset de-asserted'])
|
||||
|
||||
def test_change_no_flags(self):
|
||||
r = decode_sniff_msg(b'', 'change', flags=0)
|
||||
self.assertEqual(r['flags'], ['no changes'])
|
||||
|
||||
def test_fidi(self):
|
||||
r = decode_sniff_msg(b'\x97', 'fidi')
|
||||
self.assertEqual(r['type'], 'fidi')
|
||||
self.assertEqual(r['fi'], 9)
|
||||
self.assertEqual(r['di'], 7)
|
||||
self.assertEqual(r['fi_val'], 512)
|
||||
self.assertEqual(r['di_val'], 64)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -83,13 +83,14 @@ class TestParseMessage(unittest.TestCase):
|
||||
self.assertEqual(msg.flags, CHANGE_FLAG_TIMEOUT_WT)
|
||||
|
||||
def test_fidi_message(self):
|
||||
payload = struct.pack('<I', 0x97) # Fi=9, Di=7
|
||||
payload = b'\x97' # Fi=9, Di=7
|
||||
buf = _build_hdr(SIMTRACE_MSGC_SNIFF, SIMTRACE_MSGT_SNIFF_FIDI,
|
||||
payload=payload)
|
||||
msg, consumed = parse_message(buf)
|
||||
self.assertEqual(msg.type, 'fidi')
|
||||
self.assertEqual(len(msg.data), 0)
|
||||
self.assertEqual(msg.flags, 0x97)
|
||||
self.assertEqual(len(msg.data), 1)
|
||||
self.assertEqual(msg.data, b'\x97')
|
||||
self.assertEqual(msg.flags, 0)
|
||||
|
||||
def test_atr_message(self):
|
||||
atr = b'\x3b\x9e\x12\x34\x56\x78\x90'
|
||||
|
||||
Reference in new issue
Block a user