tighten transport failure semantics

This commit is contained in:
Jay
2026-08-17 17:33:44 -04:00
parent 3c95f3d7be
commit 73e5680fc3
11 changed files with 144 additions and 29 deletions
+41
View File
@@ -185,6 +185,7 @@ class ProtocolContractTest(unittest.TestCase):
"first_sequence": 0,
"last_sequence": 2143,
"max_dropped": 0,
"timing_anomalies": 2,
"gaps": [],
},
"forced_outage_7s.trk": {
@@ -193,6 +194,7 @@ class ProtocolContractTest(unittest.TestCase):
"first_sequence": 0,
"last_sequence": 1977,
"max_dropped": 138,
"timing_anomalies": 3,
"gaps": [(511, 650, 1_390_000)],
},
"direct_usb_stall.trk": {
@@ -201,8 +203,18 @@ class ProtocolContractTest(unittest.TestCase):
"first_sequence": 8,
"last_sequence": 2065,
"max_dropped": 1194,
"timing_anomalies": 1,
"gaps": [(511, 1706, 11_950_000)],
},
"direct_usb_3c95f3d.trk": {
"sha256": "f495486f094a758bb785e145026e3934d60b52dd5083aef7f5d896195d967869",
"sample_count": 1680,
"first_sequence": 0,
"last_sequence": 1679,
"max_dropped": 0,
"timing_anomalies": 8,
"gaps": [],
},
}
for name, contract in expected.items():
@@ -251,6 +263,10 @@ class ProtocolContractTest(unittest.TestCase):
contract["max_dropped"], integrity.sample_gap_count
)
self.assertEqual(0, integrity.sample_reset_count)
self.assertEqual(
contract["timing_anomalies"],
integrity.timing_anomaly_count,
)
self.assertEqual(
contract["max_dropped"],
integrity.final_dropped_sample_count,
@@ -268,6 +284,31 @@ class ProtocolContractTest(unittest.TestCase):
]
self.assertEqual(contract["gaps"], gaps)
def test_exact_usb_raw_wire_evidence(self) -> None:
wire = (
ROOT / "tests" / "fixtures" / "direct_usb_3c95f3d.wire"
).read_bytes()
validated = (
ROOT / "tests" / "fixtures" / "direct_usb_3c95f3d.trk"
).read_bytes()
self.assertEqual(
"3bdaeadff7962c6eac48c4ebeda285c8eb359e439d5e1728104add2009122c03",
hashlib.sha256(wire).hexdigest(),
)
parser = StreamParser()
frames = []
for offset in range(0, len(wire), 113):
frames.extend(parser.feed(wire[offset : offset + 113]))
self.assertEqual(214, len(frames))
self.assertEqual(validated, b"".join(frame.raw for frame in frames))
self.assertEqual(0, parser.startup_crc_errors)
self.assertEqual(0, parser.crc_errors)
self.assertEqual(1, parser.header_errors)
self.assertEqual(563, parser.skipped_bytes)
self.assertEqual(0, parser.buffered_bytes)
if __name__ == "__main__":
unittest.main()