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
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")
|
|
|