openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

142 lines
4.4 KiB

import pytest
from openpilot.system.hardware import TICI
from openpilot.system.hardware.tici.esim import LPA2, LPAProfileNotFoundError
# https://euicc-manual.osmocom.org/docs/rsp/known-test-profile
TEST_ACTIVATION_CODE = 'LPA:1$rsp.truphone.com$QRF-BETTERROAMING-PMRDGIR2EARDEIT5'
TEST_ICCID = '8944476500001944011'
TEST_NICKNAME = 'test_profile'
def cleanup(active_profile_iccid: str):
lpa = LPA2()
try:
lpa.delete_profile(TEST_ICCID)
except LPAProfileNotFoundError:
pass
lpa.process_notifications()
assert len(lpa.list_notifications()) == 0
class TestEsim:
@classmethod
def setup_class(cls):
if not TICI:
pytest.skip()
# Save the active profile before running tests
cls.lpa = LPA2()
cls.original_profile = cls.lpa.get_active_profile()
if cls.original_profile:
cls.original_iccid = cls.original_profile['iccid']
else:
cls.original_iccid = None
# Download test profile once for all tests
cleanup(TEST_ICCID)
cls.lpa.download_profile(TEST_ACTIVATION_CODE, TEST_NICKNAME)
# Verify profile was downloaded
profiles = cls.lpa.list_profiles()
cls.test_profile = next((p for p in profiles if p['iccid'] == TEST_ICCID), None)
assert cls.test_profile is not None
assert cls.test_profile['nickname'] == TEST_NICKNAME
@classmethod
def teardown_class(cls):
# Restore the original profile if it existed
if cls.original_iccid:
try:
cls.lpa.enable_profile(cls.original_iccid)
except Exception as e:
print(f"Failed to restore original profile: {e}")
cleanup(TEST_ICCID)
def setup_method(self):
# Clean up any test profile before each test
cleanup(TEST_ICCID)
def test_list_profiles(self):
profiles = self.lpa.list_profiles()
assert isinstance(profiles, list)
for profile in profiles:
assert isinstance(profile, dict)
assert 'iccid' in profile
assert 'isdp_aid' in profile
assert 'nickname' in profile
assert 'enabled' in profile
assert 'provider' in profile
def test_get_active_profile(self):
active_profile = self.lpa.get_active_profile()
if active_profile:
assert isinstance(active_profile, dict)
assert active_profile['enabled']
assert 'iccid' in active_profile
assert 'isdp_aid' in active_profile
assert 'nickname' in active_profile
assert 'provider' in active_profile
def test_list_notifications(self):
notifications = self.lpa.list_notifications()
assert isinstance(notifications, list)
for notification in notifications:
assert isinstance(notification, dict)
assert 'sequence_number' in notification
assert 'profile_management_operation' in notification
assert 'notification_address' in notification
assert 'iccid' in notification
def test_enable_profile(self):
# Enable the profile
self.lpa.enable_profile(TEST_ICCID)
# Verify profile is enabled
active_profile = self.lpa.get_active_profile()
assert active_profile is not None
assert active_profile['iccid'] == TEST_ICCID
assert active_profile['enabled']
def test_disable_profile(self):
# First enable the profile
self.lpa.enable_profile(TEST_ICCID)
# Disable the profile
self.lpa.disable_profile(TEST_ICCID)
# Verify profile is disabled
active_profile = self.lpa.get_active_profile()
assert active_profile is None or active_profile['iccid'] != TEST_ICCID
def test_delete_profile(self):
# Delete the profile
self.lpa.delete_profile(TEST_ICCID)
# Verify profile is deleted
profiles = self.lpa.list_profiles()
assert not any(p['iccid'] == TEST_ICCID for p in profiles)
def test_nickname_profile(self):
# Change nickname
new_nickname = "new_test_nickname"
self.lpa.nickname_profile(TEST_ICCID, new_nickname)
# Verify nickname was changed
profiles = self.lpa.list_profiles()
test_profile = next((p for p in profiles if p['iccid'] == TEST_ICCID), None)
assert test_profile is not None
assert test_profile['nickname'] == new_nickname
def test_profile_not_found_error(self):
with pytest.raises(LPAProfileNotFoundError):
self.lpa.enable_profile("nonexistent_iccid")
with pytest.raises(LPAProfileNotFoundError):
self.lpa.disable_profile("nonexistent_iccid")
with pytest.raises(LPAProfileNotFoundError):
self.lpa.delete_profile("nonexistent_iccid")
with pytest.raises(LPAProfileNotFoundError):
self.lpa.nickname_profile("nonexistent_iccid", "test")