From ff84c238390606d92eefc0f5342079178c5f8de6 Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Tue, 12 May 2020 17:24:18 +0200 Subject: [PATCH] pySim-prog, pySim-read, do not echo reader id pySim-prog and pySim-read currently echo back the pcsc reader id (or baudrate/socket, depending on the interface used). This makes the output unecessarly undeterministic, which becomes a problem when verifying the putput in tests. Lets not echo those variable, user supplied parameters back. Also lets move the code that does the initalization to utils, so that it can be used from pySim-prog and from pySim-read (code dup). Change-Id: I243cc332f075d007b1c111292effcc610e874eb3 Related: OS#4503 --- pySim-prog.py | 18 ++---------------- pySim-read.py | 20 +++----------------- pySim/utils.py | 19 +++++++++++++++++++ pysim-testdata/Fairwaves-SIM.ok | 2 +- pysim-testdata/Wavemobile-SIM.ok | 2 +- pysim-testdata/fakemagicsim.ok | 2 +- pysim-testdata/sysmoISIM-SJA2.ok | 2 +- pysim-testdata/sysmoUSIM-SJS1.ok | 2 +- pysim-testdata/sysmosim-gr1.ok | 2 +- tests/pysim-test.sh | 10 ++-------- 10 files changed, 32 insertions(+), 47 deletions(-) diff --git a/pySim-prog.py b/pySim-prog.py index c7099596..67719b49 100755 --- a/pySim-prog.py +++ b/pySim-prog.py @@ -40,7 +40,7 @@ except ImportError: from pySim.commands import SimCardCommands from pySim.cards import _cards_classes, card_detect -from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid +from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid, init_reader from pySim.ts_51_011 import EF from pySim.card_handler import * from pySim.utils import * @@ -688,21 +688,7 @@ if __name__ == '__main__': opts = parse_options() # Init card reader driver - if opts.pcsc_dev is not None: - print("Using PC/SC reader (dev=%d) interface" - % opts.pcsc_dev) - from pySim.transport.pcsc import PcscSimLink - sl = PcscSimLink(opts.pcsc_dev) - elif opts.osmocon_sock is not None: - print("Using Calypso-based (OsmocomBB, sock=%s) reader interface" - % opts.osmocon_sock) - from pySim.transport.calypso import CalypsoSimLink - sl = CalypsoSimLink(sock_path=opts.osmocon_sock) - else: # Serial reader is default - print("Using serial reader (port=%s, baudrate=%d) interface" - % (opts.device, opts.baudrate)) - from pySim.transport.serial import SerialSimLink - sl = SerialSimLink(device=opts.device, baudrate=opts.baudrate) + sl = init_reader(opts) # Create command layer scc = SimCardCommands(transport=sl) diff --git a/pySim-read.py b/pySim-read.py index 33e93a7f..df21531f 100755 --- a/pySim-read.py +++ b/pySim-read.py @@ -34,8 +34,8 @@ from pySim.ts_31_103 import EF_IST_map from pySim.commands import SimCardCommands from pySim.cards import card_detect, Card -from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, dec_msisdn, format_xplmn_w_act, dec_spn, dec_st - +from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, dec_msisdn +from pySim.utils import format_xplmn_w_act, dec_spn, dec_st, init_reader def parse_options(): @@ -72,21 +72,7 @@ if __name__ == '__main__': opts = parse_options() # Init card reader driver - if opts.pcsc_dev is not None: - print("Using PC/SC reader (dev=%d) interface" - % opts.pcsc_dev) - from pySim.transport.pcsc import PcscSimLink - sl = PcscSimLink(opts.pcsc_dev) - elif opts.osmocon_sock is not None: - print("Using Calypso-based (OsmocomBB, sock=%s) reader interface" - % opts.osmocon_sock) - from pySim.transport.calypso import CalypsoSimLink - sl = CalypsoSimLink(sock_path=opts.osmocon_sock) - else: # Serial reader is default - print("Using serial reader (port=%s, baudrate=%d) interface" - % (opts.device, opts.baudrate)) - from pySim.transport.serial import SerialSimLink - sl = SerialSimLink(device=opts.device, baudrate=opts.baudrate) + sl = init_reader(opts) # Create command layer scc = SimCardCommands(transport=sl) diff --git a/pySim/utils.py b/pySim/utils.py index dbc73378..a1689ca5 100644 --- a/pySim/utils.py +++ b/pySim/utils.py @@ -436,3 +436,22 @@ def dec_epdgid(hexstr): s += "\t%s # %s\n" % (i2h(content), i2s(content)) return s + +def init_reader(opts): + """ + Init card reader driver + """ + if opts.pcsc_dev is not None: + print("Using PC/SC reader interface") + from pySim.transport.pcsc import PcscSimLink + sl = PcscSimLink(opts.pcsc_dev) + elif opts.osmocon_sock is not None: + print("Using Calypso-based (OsmocomBB) reader interface") + from pySim.transport.calypso import CalypsoSimLink + sl = CalypsoSimLink(sock_path=opts.osmocon_sock) + else: # Serial reader is default + print("Using serial reader interface") + from pySim.transport.serial import SerialSimLink + sl = SerialSimLink(device=opts.device, baudrate=opts.baudrate) + + return sl diff --git a/pysim-testdata/Fairwaves-SIM.ok b/pysim-testdata/Fairwaves-SIM.ok index 0dbd89ff..e5fa1afc 100644 --- a/pysim-testdata/Fairwaves-SIM.ok +++ b/pysim-testdata/Fairwaves-SIM.ok @@ -1,4 +1,4 @@ -Using PC/SC reader (dev=0) interface +Using PC/SC reader interface Reading ... Autodetected card type: Fairwaves-SIM ICCID: 8988219000000117833 diff --git a/pysim-testdata/Wavemobile-SIM.ok b/pysim-testdata/Wavemobile-SIM.ok index 2de08922..a5c3a8e2 100644 --- a/pysim-testdata/Wavemobile-SIM.ok +++ b/pysim-testdata/Wavemobile-SIM.ok @@ -1,4 +1,4 @@ -Using PC/SC reader (dev=3) interface +Using PC/SC reader interface Reading ... Autodetected card type: Wavemobile-SIM ICCID: 89445310150011013678 diff --git a/pysim-testdata/fakemagicsim.ok b/pysim-testdata/fakemagicsim.ok index 80cf3d93..0168b13b 100644 --- a/pysim-testdata/fakemagicsim.ok +++ b/pysim-testdata/fakemagicsim.ok @@ -1,4 +1,4 @@ -Using PC/SC reader (dev=5) interface +Using PC/SC reader interface Reading ... Autodetected card type: fakemagicsim Can't read AIDs from SIM -- SW match failed! Expected 9000 and got 9404. diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok index 57500eba..8559bdbe 100644 --- a/pysim-testdata/sysmoISIM-SJA2.ok +++ b/pysim-testdata/sysmoISIM-SJA2.ok @@ -1,4 +1,4 @@ -Using PC/SC reader (dev=4) interface +Using PC/SC reader interface Reading ... Autodetected card type: sysmoISIM-SJA2 ICCID: 8988211900000000004 diff --git a/pysim-testdata/sysmoUSIM-SJS1.ok b/pysim-testdata/sysmoUSIM-SJS1.ok index 408f2113..75c38626 100644 --- a/pysim-testdata/sysmoUSIM-SJS1.ok +++ b/pysim-testdata/sysmoUSIM-SJS1.ok @@ -1,4 +1,4 @@ -Using PC/SC reader (dev=1) interface +Using PC/SC reader interface Reading ... Autodetected card type: sysmoUSIM-SJS1 ICCID: 1122334455667788990 diff --git a/pysim-testdata/sysmosim-gr1.ok b/pysim-testdata/sysmosim-gr1.ok index 833ba839..3fba8e1f 100644 --- a/pysim-testdata/sysmosim-gr1.ok +++ b/pysim-testdata/sysmosim-gr1.ok @@ -1,4 +1,4 @@ -Using PC/SC reader (dev=0) interface +Using PC/SC reader interface Reading ... Autodetected card type: sysmosim-gr1 Can't read AIDs from SIM -- SW match failed! Expected 9000 and got 9404. diff --git a/tests/pysim-test.sh b/tests/pysim-test.sh index a22c3726..7ee98345 100755 --- a/tests/pysim-test.sh +++ b/tests/pysim-test.sh @@ -78,13 +78,7 @@ function check_card { stat ./$CARD_NAME.ok > /dev/null python $PYSIM_READ -p $TERMINAL > $TEMPFILE set +e - # Note: We ignore the first line of output in the diff because here - # pysim would print the device number of the reader and we do not - # want the test to fail just because the card is put into a different - # reader device. - tail -n +2 $CARD_NAME.ok > $CARD_NAME.ok.tmp - tail -n +2 $TEMPFILE > $CARD_NAME.chk.tmp - CARD_DIFF=$(diff $CARD_NAME.chk.tmp $CARD_NAME.ok.tmp) + CARD_DIFF=$(diff $TEMPFILE ./$CARD_NAME.ok) set -e if [ "$CARD_DIFF" != "" ]; then @@ -104,7 +98,7 @@ function check_card { inc_card_list $CARD_NAME echo "Card contents match the test data -- success!" - rm *.tmp + rm $TEMPFILE } # Read out the card using pysim-read and store the result as .ok file. This