test: add gb32960 e2e smoke verifier
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
81
tools/test_gb32960_e2e_smoke.py
Normal file
81
tools/test_gb32960_e2e_smoke.py
Normal file
@@ -0,0 +1,81 @@
|
||||
import datetime as dt
|
||||
import pathlib
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
from tools import gb32960_e2e_smoke as smoke
|
||||
|
||||
|
||||
class Gb32960E2ESmokeTest(unittest.TestCase):
|
||||
def test_parse_frame_info_reads_vin_and_collect_time(self):
|
||||
frame = bytes.fromhex(
|
||||
"232302fe4c544553543230323630363239303030310100081a061d10060f"
|
||||
"02002a"
|
||||
)
|
||||
|
||||
info = smoke.parse_frame_info(frame)
|
||||
|
||||
self.assertEqual(info.vin, "LTEST202606290001")
|
||||
self.assertEqual(info.command, 0x02)
|
||||
self.assertEqual(info.event_time, dt.datetime(2026, 6, 29, 16, 6, 15, tzinfo=smoke.SHANGHAI))
|
||||
|
||||
def test_query_range_surrounds_event_time_with_offset(self):
|
||||
date_from, date_to = smoke.query_range(
|
||||
dt.datetime(2026, 6, 29, 8, 6, 15, tzinfo=smoke.SHANGHAI),
|
||||
minutes=5,
|
||||
)
|
||||
|
||||
self.assertEqual(date_from, "2026-06-29T08:01:15+08:00")
|
||||
self.assertEqual(date_to, "2026-06-29T08:11:15+08:00")
|
||||
|
||||
def test_valid_ack_requires_frame_marker(self):
|
||||
self.assertTrue(smoke.valid_ack(b"##\x02\x01"))
|
||||
self.assertTrue(smoke.valid_ack(b"$$\x02\x01"))
|
||||
self.assertFalse(smoke.valid_ack(b""))
|
||||
self.assertFalse(smoke.valid_ack(b"\x7e\x80"))
|
||||
|
||||
def test_archive_path_maps_archive_uri_to_root(self):
|
||||
path = smoke.archive_path(
|
||||
pathlib.Path("/tmp/archive"),
|
||||
"archive://2026/06/29/GB32960/LTEST202606290001/frame.bin",
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
path,
|
||||
pathlib.Path("/tmp/archive/2026/06/29/GB32960/LTEST202606290001/frame.bin"),
|
||||
)
|
||||
|
||||
def test_parse_field_keys_trims_blank_items(self):
|
||||
keys = smoke.parse_field_keys("speed_kmh, total_mileage_km, ,longitude")
|
||||
|
||||
self.assertEqual(keys, ["speed_kmh", "total_mileage_km", "longitude"])
|
||||
|
||||
def test_first_raw_uri_reads_record_archive_uri(self):
|
||||
uri = smoke.first_raw_uri([
|
||||
{"rawArchiveUri": ""},
|
||||
{"rawArchiveUri": "archive://2026/06/29/GB32960/LTEST/frame.bin"},
|
||||
])
|
||||
|
||||
self.assertEqual(uri, "archive://2026/06/29/GB32960/LTEST/frame.bin")
|
||||
|
||||
def test_check_archive_ignores_duplicate_uris(self):
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
root = pathlib.Path(temp_dir)
|
||||
archive_file = root / "2026/06/29/GB32960/LTEST/frame.bin"
|
||||
archive_file.parent.mkdir(parents=True)
|
||||
archive_file.write_bytes(b"raw")
|
||||
|
||||
checked = smoke.check_archive(
|
||||
root,
|
||||
[
|
||||
{"rawArchiveUri": "archive://2026/06/29/GB32960/LTEST/frame.bin"},
|
||||
{"rawArchiveUri": "archive://2026/06/29/GB32960/LTEST/frame.bin"},
|
||||
],
|
||||
limit=3,
|
||||
)
|
||||
|
||||
self.assertEqual(checked, 1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user