import pytest from openpilot.system.hardware import TICI from openpilot.system.hardware.tici.esim import LPA2, LPAProfileNotFoundError class TestEsim: """ 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' @classmethod def setup_class(cls): if not TICI: pytest.skip() def setup_method(self): self._cleanup() def teardown_method(self): self._cleanup() def test_list_profiles(self): lpa = LPA2() profiles = lpa.list_profiles() assert profiles is not None def test_download_profile(self): lpa = LPA2() lpa.download_profile(self.TEST_ACTIVATION_CODE, self.TEST_NICKNAME) assert self._profile_exists(self.TEST_ICCID, self.TEST_NICKNAME) self.enable_profile(lpa) self.disable_profile(lpa) def enable_profile(self, lpa: LPA2): lpa.enable_profile(self.TEST_ICCID) current = lpa.get_active_profile() assert current is not None assert current['iccid'] == self.TEST_ICCID def disable_profile(self, lpa: LPA2): lpa.disable_profile(self.TEST_ICCID) current = lpa.get_active_profile() assert current is None def _cleanup(self): lpa = LPA2() try: lpa.delete_profile(self.TEST_ICCID) except LPAProfileNotFoundError: pass assert not self._profile_exists(self.TEST_ICCID, self.TEST_NICKNAME) lpa.process_notifications() assert len(lpa.list_notifications()) == 0 def _profile_exists(self, iccid: str, nickname: str) -> bool: lpa = LPA2() profiles = lpa.list_profiles() return any(p['iccid'] == iccid and p['nickname'] == nickname for p in profiles)