mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-10-28 00:53:45 +08:00
Align PE marker and Subaru build variant tests
This commit is contained in:
@@ -30,16 +30,32 @@ class TestPELongProfile(unittest.TestCase):
|
||||
self.assertEqual(stock.to_dict(), before)
|
||||
self.assertIsNone(candidate(params(candidate=CAR.KIA_EV9), enabled=True, is_release=False))
|
||||
|
||||
def test_exact_alternative_experience_survives_serialization(self):
|
||||
for experience in (0, 1, 32, 33, 64):
|
||||
with self.subTest(experience=experience):
|
||||
cp = candidate(params(), enabled=True, is_release=False)
|
||||
cp.alternativeExperience = experience
|
||||
self.assertTrue(required(cp))
|
||||
self.assertEqual(qualified(cp), experience in (0, 32))
|
||||
self.assertEqual(qualified(copy_cp(cp)), experience in (0, 32))
|
||||
|
||||
def test_malformed_active_pe_cannot_bypass_required_owner(self):
|
||||
for field, value in (('passive', True), ('dashcamOnly', True), ('pcmCruise', True),
|
||||
('alternativeExperience', 32), ('startAccel', .2), ('vEgoStarting', .5)):
|
||||
cp = candidate(params(), enabled=True, is_release=False)
|
||||
setattr(cp.deprecated if field in ('startAccel', 'vEgoStarting', 'vEgoStopping', 'stoppingDecelRate') else cp, field, value)
|
||||
self.assertTrue(required(cp))
|
||||
self.assertFalse(qualified(cp), field)
|
||||
cp = candidate(params(), enabled=True, is_release=False)
|
||||
cp.safetyConfigs[0].safetyParam = 0x5C95
|
||||
self.assertFalse(qualified(cp))
|
||||
for experience in (0, 32):
|
||||
for field, value in (('passive', True), ('dashcamOnly', True), ('pcmCruise', True),
|
||||
('startAccel', .2), ('vEgoStarting', .5)):
|
||||
with self.subTest(experience=experience, field=field):
|
||||
cp = candidate(params(), enabled=True, is_release=False)
|
||||
cp.alternativeExperience = experience
|
||||
self.assertTrue(qualified(cp))
|
||||
setattr(cp.deprecated if field in ('startAccel', 'vEgoStarting', 'vEgoStopping', 'stoppingDecelRate') else cp, field, value)
|
||||
self.assertTrue(required(cp))
|
||||
self.assertFalse(qualified(cp), field)
|
||||
with self.subTest(experience=experience, field='safetyParam'):
|
||||
cp = candidate(params(), enabled=True, is_release=False)
|
||||
cp.alternativeExperience = experience
|
||||
self.assertTrue(qualified(cp))
|
||||
cp.safetyConfigs[0].safetyParam = 0x5C95
|
||||
self.assertFalse(qualified(cp))
|
||||
|
||||
def test_unobserved_topologies_and_missing_physical_identity_sources_stay_stock(self):
|
||||
for topology in ('lka', 'lfa'):
|
||||
@@ -48,13 +64,16 @@ class TestPELongProfile(unittest.TestCase):
|
||||
self.assertIsNone(candidate(params(missing=missing), enabled=True, is_release=False))
|
||||
|
||||
def test_nonfinite_calibration_cannot_enter_the_sealed_long_owner(self):
|
||||
for field in ('startAccel', 'vEgoStarting', 'vEgoStopping', 'stoppingDecelRate', 'longitudinalActuatorDelay'):
|
||||
for value in (float('nan'), float('inf'), float('-inf')):
|
||||
with self.subTest(field=field, value=value):
|
||||
cp = candidate(params(), enabled=True, is_release=False)
|
||||
setattr(cp.deprecated if field in ('startAccel', 'vEgoStarting', 'vEgoStopping', 'stoppingDecelRate') else cp, field, value)
|
||||
self.assertTrue(required(cp))
|
||||
self.assertFalse(qualified(cp))
|
||||
for experience in (0, 32):
|
||||
for field in ('startAccel', 'vEgoStarting', 'vEgoStopping', 'stoppingDecelRate', 'longitudinalActuatorDelay'):
|
||||
for value in (float('nan'), float('inf'), float('-inf')):
|
||||
with self.subTest(experience=experience, field=field, value=value):
|
||||
cp = candidate(params(), enabled=True, is_release=False)
|
||||
cp.alternativeExperience = experience
|
||||
self.assertTrue(qualified(cp))
|
||||
setattr(cp.deprecated if field in ('startAccel', 'vEgoStarting', 'vEgoStopping', 'stoppingDecelRate') else cp, field, value)
|
||||
self.assertTrue(required(cp))
|
||||
self.assertFalse(qualified(cp))
|
||||
|
||||
def test_recorded_2027_inherits_pe_capability_and_release_stays_stock(self):
|
||||
from opendbc.car.hyundai.tests.test_ioniq5pe_2027 import params as recorded_params
|
||||
|
||||
@@ -146,7 +146,7 @@ def test_enable_release_without_main_matches_original_profile_scope(name):
|
||||
else log.SelfdriveState.OpenpilotState.disabled)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('name,experience', [('pe', 0), ('elantra', 0), ('ev9', 0), ('ev9', 32)])
|
||||
@pytest.mark.parametrize('name,experience', [('pe', 0), ('pe', 32), ('elantra', 0), ('ev9', 0), ('ev9', 32)])
|
||||
@pytest.mark.parametrize('field,value', [('brand', 'other'), ('carFingerprint', 'foreign'),
|
||||
('passive', True), ('notCar', True), ('dashcamOnly', True),
|
||||
('openpilotLongitudinalControl', False), ('pcmCruise', True),
|
||||
@@ -159,7 +159,7 @@ def test_main_state_helper_rejects_changed_authority_contract(name, experience,
|
||||
assert not qualified(cp)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('name,experience', [('pe', 0), ('elantra', 0), ('ev9', 0), ('ev9', 32)])
|
||||
@pytest.mark.parametrize('name,experience', [('pe', 0), ('pe', 32), ('elantra', 0), ('ev9', 0), ('ev9', 32)])
|
||||
def test_main_state_helper_rejects_neighbor_native_word(name, experience):
|
||||
cp = profile(name)
|
||||
cp.alternativeExperience = experience
|
||||
@@ -173,4 +173,4 @@ def test_main_state_helper_rejects_neighbor_native_word(name, experience):
|
||||
def test_main_state_helper_requires_exact_profile_experience(name, experience):
|
||||
cp = profile(name)
|
||||
cp.alternativeExperience = experience
|
||||
assert qualified(cp) == (experience == 0 or (name == 'ev9' and experience == 32))
|
||||
assert qualified(cp) == (experience == 0 or (name in ('pe', 'ev9') and experience == 32))
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import os
|
||||
import pytest
|
||||
from opendbc.car import structs
|
||||
from opendbc.car.subaru.avh import avh_request, checksum
|
||||
@@ -35,8 +34,10 @@ def ready(param, ae):
|
||||
@pytest.mark.parametrize('param', [1169, 1425])
|
||||
@pytest.mark.parametrize('ae', [0, 32])
|
||||
def test_exact_pair_debug_only_and_status_never_tx(param, ae):
|
||||
# Probe the loaded build, not the Subaru authority under test. ready() resets
|
||||
# native state and selects Subaru before any RX or TX checks.
|
||||
debug = libsafety_py.libsafety.set_safety_hooks(structs.CarParams.SafetyModel.allOutput, 0) == 0
|
||||
safety, last = ready(param, ae)
|
||||
debug = os.environ['SUBARU_NATIVE_VARIANT'] == 'debug'
|
||||
for step in (1, 2):
|
||||
if step == 2:
|
||||
safety.set_timer(11_060_000)
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"protected_inventory_sha256": "a5ff59c8b5d0419360006c10b7f23d15b10d3f5ebdb88cfafdfcc712f38d7654", "schema_version": 1}
|
||||
{"protected_inventory_sha256": "f40dda21dcd3a36f88cb8ea563fac27b023c7766257dcf2d36027eacb2c668d4", "schema_version": 1}
|
||||
|
||||
Reference in New Issue
Block a user