Queue original CAN evidence in decoder fixtures

This commit is contained in:
firestar5683
2026-10-23 08:00:07 -05:00
parent dc86e03e60
commit 09dbb29d5a
4 changed files with 28 additions and 1 deletions
@@ -198,6 +198,7 @@ def actual_caller_fixture(domain):
event=Emission(stamp,stamp,stamp+1_000_000,witness,'f'*64,'e'*64,'a'*64,
True,True,False,False,clipped,False,False,0,0,'')
original.emissions.events[event.apply_ns]=event
original.emissions.decode_queue.append(event.apply_ns)
original.emissions.by_control[event.control_ns]=event
previous_event=event
previous_report=f32(output.torque)
@@ -63,6 +63,7 @@ def fixture(domain='torque', nonzero=False, two_windows=False):
event = Emission(stamp, stamp, stamp + 1_000_000, witness, 'f' * 64, 'e' * 64, 'a' * 64,
True, True, False, False, clipped, False, False, 0, 0, '')
original.emissions.events[event.apply_ns] = event
original.emissions.decode_queue.append(event.apply_ns)
original.emissions.by_control[event.control_ns] = event
original.records.extend(rows)
cast(ReplayWindowFixture, original).replay_windows = (((rows[0].control_ns, rows[29].control_ns), (rows[30].control_ns, rows[-1].control_ns))
@@ -67,6 +67,7 @@ def replay_fixture(domain):
# As in registered codec units, native flags grant NO current authority.
# We exercise original decode/EncoderBranch with actual captured bytes.
original.emissions.events[event.apply_ns] = event
original.emissions.decode_queue.append(event.apply_ns)
original.emissions.by_control[event.control_ns] = event
original.records.extend(rows)
cast(ReplayWindowFixture, original).replay_windows = ((rows[0].control_ns, rows[-1].control_ns),)
@@ -78,6 +79,9 @@ def replay_fixture(domain):
def run_observed(engine, eager=False, coordinates=(0.,)):
trace = []
engine.emissions.decoder = None # Both paths independently decode real bytes.
engine.emissions.decode_queue.clear()
engine.emissions.decode_queue.extend(engine.emissions.events)
engine.emissions.decode_errors.clear()
def update(*args, **kwargs):
result = _run(*args, **kwargs)
trace.append((args[2], result[0], result[1].to_dict(), capture_snapshot(args[0], args[1])))
@@ -185,3 +189,24 @@ def test_unknown_legacy_receiver_keeps_plain_dictionary_and_eager_order():
with mock.patch('openpilot.starpilot.flm.event_controller_replay._run', side_effect=update), \
mock.patch('openpilot.starpilot.flm.event_controller_replay.restore_snapshot'):
engine._rollout_uncached(coordinates, restore_target=True)
@pytest.mark.parametrize('domain', ('torque', 'starpilot', 'pid'))
def test_eager_and_lazy_reset_reparse_every_original_can_emission(domain):
from openpilot.starpilot.flm.torque_emission_replay import EmissionDecoder
engine = replay_fixture(domain)
expected = list(engine.emissions.events)
parsed = []
original_check = EmissionDecoder.check
def check(decoder, event):
parsed.append(event.apply_ns)
return original_check(decoder, event)
with mock.patch.object(EmissionDecoder, 'check', check):
eager, _ = run_observed(engine, eager=True)
first = len(parsed)
lazy, _ = run_observed(engine)
assert eager[0] == lazy[0] == 'success'
assert parsed[:first] == expected
assert parsed[first:] == expected
+1 -1
View File
@@ -1 +1 @@
{"protected_inventory_sha256": "a3614280ee5b3687612567cc72295d70f8011df7222eb904f55ac2bef9429519", "schema_version": 1}
{"protected_inventory_sha256": "9e1e113a06d722bc4f83af0b23d8d2aa9f5f22affb05865d2ddf22ffd39f21a7", "schema_version": 1}