Files
Philipp Maier e80f3160a9 pySim/euicc: fix encoding/decoding of Iccid
The class Iccid uses a BcdAdapter to encoded/decode the ICCID. This
works fine for ICCIDs that have an even (20) number of digits. In case
the digit count is odd (19), the ICCID the last digit requires padding.

Let's switch to PaddedBcdAdapter for encoding/decoding, to ensure that
odd-length ICCIDs are padded automatically.

Change-Id: I527a44ba454656a0d682ceb590eec6d9d0ac883a
Related: OS#6868
2026-02-10 13:26:45 +00:00

96 lines
3.6 KiB
Python

# Testsuite for pySim-shell.py
#
# (C) 2024 by sysmocom - s.f.m.c. GmbH
# All Rights Reserved
#
# Author: Philipp Maier
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import unittest
import os
import json
from utils import *
# This testcase requires a sysmoEUICC1-C2T with the test prfile TS48V1-B-UNIQUE (ICCID 8949449999999990031)
# installed, and in disabled state. Also the profile must be installed in such a way that notifications are
# generated when the profile is disabled or enabled (ProfileMetadata)
class test_case(UnittestUtils):
def test_get_eid(self):
cardname = 'sysmoEUICC1-C2T'
self.runPySimShell(cardname, "test_get_eid.script")
self.assertEqualFiles("get_eid.tmp",
ignore_regex_list=['\"[A-Fa-f0-9]*\"'])
def test_get_euicc_info(self):
cardname = 'sysmoEUICC1-C2T'
self.runPySimShell(cardname, "test_get_euicc_info.script")
self.assertEqualFiles("euicc_info1.tmp",
ignore_regex_list=[': \".*"'])
self.assertEqualFiles("euicc_info2.tmp", "euicc_info2.ok",
ignore_regex_list=[': \".*"'])
def test_get_profiles_info(self):
cardname = 'sysmoEUICC1-C2T'
self.runPySimShell(cardname, "test_get_profiles_info.script")
self.assertEqualFiles("get_profiles_info.tmp")
def test_enable_disable_profile(self):
cardname = 'sysmoEUICC1-C2T'
self.runPySimShell(cardname, "test_enable_disable_profile.script")
self.assertEqualFiles("enable_disable_profile.tmp")
def test_set_nickname(self):
cardname = 'sysmoEUICC1-C2T'
self.runPySimShell(cardname, "test_set_nickname.script")
self.assertEqualFiles("set_nickname.tmp")
def test_list_and_rm_notif(self):
cardname = 'sysmoEUICC1-C2T'
# Generate two (additional) notification
self.runPySimShell(cardname, "test_gen_notif.script")
# List notifications into a file
self.runPySimShell(cardname, "test_list_notif.script")
# Parse notifications file (JSON)
notifications_tmp = open("notifications.tmp")
notifications = json.load(notifications_tmp)
notifications_tmp.close()
# Delete notifications one by one, we expect to see at least one notification
notification_metadata_list = notifications['notification_metadata_list']
removed = 0
for nm in notification_metadata_list:
seq_number = nm['notification_metadata']['seq_number']
print("removing notification with seq_number %s:" % seq_number)
self.equipTemplate("test_rm_notif.script", SEQ_NUMBER = seq_number)
self.runPySimShell(cardname, "test_rm_notif.script")
removed = removed + 1
self.assertTrue(removed >= 2, "we expected to remove at least two notifications, but we have removed none!")
# List notifications again, require none to be present
self.runPySimShell(cardname, "test_list_notif.script")
self.assertEqualFiles("notifications.tmp")
if __name__ == "__main__":
unittest.main()