mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-08 05:23:41 +08:00
87 lines
3.9 KiB
Python
87 lines
3.9 KiB
Python
"""Initial integrity epoch zero is valid; ownership/deadlines remain unchanged."""
|
|
import pytest
|
|
|
|
from openpilot.starpilot.aol.intent_companion import IntentCompanion
|
|
from openpilot.starpilot.tests import test_ford_reverse_intent as reverse
|
|
from openpilot.starpilot.tests import test_ford_alpha_reverse_intent as alpha_reverse
|
|
from openpilot.starpilot.tests import test_ford_physical_pause_intent as physical
|
|
from openpilot.starpilot.tests import test_ford_typed_gas_intent as gas
|
|
from openpilot.starpilot.tests import test_ford_command_pause as command
|
|
from openpilot.starpilot.tests import ford_alpha_test_support as alpha_support
|
|
from openpilot.starpilot.car.ford.reverse_intent import retain_reverse_intent
|
|
from openpilot.starpilot.car.ford.physical_pause import retain_physical_pause_intent
|
|
from openpilot.starpilot.car.ford.command_pause import retain_command_pause_intent
|
|
from openpilot.starpilot.car.ford.gas_override import retained_gas_lateral_native
|
|
|
|
CASES = ['stock-reverse','alpha-reverse','command','typed-gas',*physical.REASONS]
|
|
|
|
|
|
def initial_epoch_receipts(monkeypatch):
|
|
epoch = IntentCompanion(None).integrity_epoch
|
|
assert epoch == 0
|
|
original = reverse.sample
|
|
def zero(*args, **kwargs):
|
|
peers, native = original(*args, **kwargs)
|
|
reverse.change(peers, 'aolAxisState', lambda axis: setattr(axis, 'intentIntegrityEpoch', epoch))
|
|
return peers, native
|
|
for module in (reverse, physical, alpha_support, command):
|
|
monkeypatch.setattr(module, 'sample', zero)
|
|
return zero
|
|
|
|
|
|
def setup_case(case, monkeypatch):
|
|
zero = initial_epoch_receipts(monkeypatch)
|
|
now = reverse.NOW + 20_000_000
|
|
if case == 'stock-reverse':
|
|
cp, cs, feedback = reverse.baseline()
|
|
cs.gearShifter = 'reverse'
|
|
peers, _ = zero(cp, reverse.NOW + 10_000_000, now, 2, allowed=False)
|
|
function = retain_reverse_intent
|
|
elif case == 'alpha-reverse':
|
|
cp, cs, feedback, peers, _ = alpha_reverse.setup()
|
|
function = retain_reverse_intent
|
|
elif case == 'command':
|
|
cp, cs, feedback, peers, _ = command.pause()
|
|
now = reverse.NOW + 40_000_000
|
|
function = retain_command_pause_intent
|
|
elif case == 'typed-gas':
|
|
cp, cs, feedback, peers, _ = gas.setup()
|
|
function = retained_gas_lateral_native
|
|
else:
|
|
cp, cs, feedback, peers, _ = physical.setup(case)
|
|
function = retain_physical_pause_intent
|
|
assert feedback.availability_epoch == feedback.signature[15] == peers['aolAxisState'].intentIntegrityEpoch == 0
|
|
return cp, cs, feedback, peers, now, function
|
|
|
|
|
|
@pytest.mark.parametrize('case', CASES)
|
|
def test_valid_initial_consumer_epoch_preserves_only_qualified_existing_intent(case, monkeypatch):
|
|
cp, cs, feedback, peers, now, function = setup_case(case, monkeypatch)
|
|
before = dict(vars(feedback))
|
|
result = function(feedback, peers, cp, cs, peers['aolAxisState'], now, latched=True, producer=reverse.PRODUCER)
|
|
assert result is not None and result is not False
|
|
assert vars(feedback) == before
|
|
|
|
|
|
@pytest.mark.parametrize('case', CASES)
|
|
@pytest.mark.parametrize('fault',['no-baseline','different-current','different-previous','producer','expired'])
|
|
def test_initial_zero_cannot_replace_missing_or_changed_owner_or_extend_deadline(case, fault, monkeypatch):
|
|
cp, cs, feedback, peers, now, function = setup_case(case, monkeypatch)
|
|
producer = reverse.PRODUCER
|
|
if fault == 'no-baseline':
|
|
feedback.availability_epoch = None
|
|
elif fault == 'different-current':
|
|
reverse.change(peers, 'aolAxisState', lambda axis: setattr(axis, 'intentIntegrityEpoch', 1))
|
|
elif fault == 'different-previous':
|
|
previous = list(feedback.signature)
|
|
previous[15] = 1
|
|
feedback.signature = tuple(previous)
|
|
elif fault == 'producer':
|
|
producer = 'different-card'
|
|
else:
|
|
now += 200_000_001
|
|
before = dict(vars(feedback))
|
|
result = function(feedback, peers, cp, cs, peers['aolAxisState'], now, latched=True, producer=producer)
|
|
assert result is None or result is False
|
|
assert vars(feedback) == before
|