Change in pysim[master]: tests: add test program to verify pysim-prog.py (and pysim-read.py)

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

dexter gerrit-no-reply at lists.osmocom.org
Thu Jul 19 07:55:42 UTC 2018


dexter has submitted this change and it was merged. ( https://gerrit.osmocom.org/9947 )

Change subject: tests: add test program to verify pysim-prog.py (and pysim-read.py)
......................................................................

tests: add test program to verify pysim-prog.py (and pysim-read.py)

Pysim now supports quite a number of different cards. Estimating
if changes in pysim introce regressions becomes increasingly difficult

The script that is added with this patch is intended to run as
atomated testsuit on real cards attached to a test system. However,
it can also be used by developers locally to check for regressions.

Change-Id: I8c6f95998272333bc757b34e3ab6be004e8cd674
Related: OS#3376
---
A tests/fakemagicsim.data.example
A tests/pysim-test.sh
A tests/sysmoUSIM-SJS1.data.example
3 files changed, 234 insertions(+), 0 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  dexter: Verified



diff --git a/tests/fakemagicsim.data.example b/tests/fakemagicsim.data.example
new file mode 100644
index 0000000..deab2f7
--- /dev/null
+++ b/tests/fakemagicsim.data.example
@@ -0,0 +1,6 @@
+MCC=001
+MNC=01
+ICCID=1122334455667788990
+KI=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+OPC=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+IMSI=001010000000102
\ No newline at end of file
diff --git a/tests/pysim-test.sh b/tests/pysim-test.sh
new file mode 100755
index 0000000..5af7a93
--- /dev/null
+++ b/tests/pysim-test.sh
@@ -0,0 +1,221 @@
+#!/bin/bash
+
+# Utility to verify the functionality of pysim-prog.py
+#
+# (C) 2018 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/>.
+
+PYSIM_PROG=../pySim-prog.py
+PYSIM_READ=../pySim-read.py
+TEMPFILE=temp.tmp
+
+set -e
+
+echo "pysim-test - a test program to test pysim-prog.py"
+echo "================================================="
+
+# Generate a list of the cards we expect to see by checking which .ok files
+# are present
+function gen_card_list {
+    N_CARDS=0
+
+    echo "Expecting to see the following cards:"
+
+    for I in *.data ; do
+	CARD_NAMES[$N_CARDS]=${I%.*}
+	CARD_SEEN[$N_CARDS]=0
+	N_CARDS=$((N_CARDS+1))
+    done
+
+    for I in $(seq 0 $((N_CARDS-1))); do
+	echo ${CARD_NAMES[$I]}
+    done
+}
+
+# Increment counter in card list for a specified card name (type)
+function inc_card_list {
+    CARD_NAME=$1
+    for I in $(seq 0 $((N_CARDS-1))); do
+	if [ $CARD_NAME = ${CARD_NAMES[$I]} ]; then
+	    CARD_SEEN[$I]=$((${CARD_NAMES[$I]}+1))
+	fi
+    done
+}
+
+# Check the card list, each card must be seen exactly one times
+function check_card_list {
+    for I in $(seq 0 $((N_CARDS-1))); do
+	if [ ${CARD_SEEN[$I]} -ne 1 ]; then
+	    echo "Error: Card ${CARD_NAMES[$I]} seen ${CARD_SEEN[$I]} times!"
+	    exit 1
+	fi
+    done
+
+    echo "All cards seen -- everything ok!"
+}
+
+# Verify the contents of a card by reading them and then diffing against the
+# previously created .ok file
+function check_card {
+    TERMINAL=$1
+    CARD_NAME=$2
+    echo "Verifying card ..."
+    stat ./$CARD_NAME.ok > /dev/null
+    python $PYSIM_READ -p $TERMINAL > $TEMPFILE
+    set +e
+    CARD_DIFF=$(diff $TEMPFILE ./$CARD_NAME.ok)
+    set -e
+
+    if [ "$CARD_DIFF" != "" ]; then
+	echo "Card contents do not match the test data:"
+	echo "Expected: $CARD_NAME.ok"
+	echo "------------8<------------"
+	cat "$CARD_NAME.ok"
+	echo "------------8<------------"
+	echo "Got:"
+	echo "------------8<------------"
+	cat $TEMPFILE
+	echo "------------8<------------"
+	exit 1
+    fi
+
+    inc_card_list $CARD_NAME
+
+    echo "Card contents match the test data -- success!"
+    rm $TEMPFILE
+}
+
+# Read out the card using pysim-read and store the result as .ok file. This
+# data will be used later in order to verify the results of our write tests.
+function gen_ok_file {
+    TERMINAL=$1
+    CARD_NAME=$2
+    python $PYSIM_READ -p $TERMINAL > "$CARD_NAME.ok"
+    echo "Generated file: $CARD_NAME.ok"
+    echo "------------8<------------"
+    cat "$CARD_NAME.ok"
+    echo "------------8<------------"
+}
+
+# Find out the type (card name) of the card that is installed in the specified
+# reader
+function probe_card {
+    TERMINAL=$1
+    RESULT=$(timeout 5 $PYSIM_PROG -p $TERMINAL -T | cut -d ":" -f 2 | tail -n 1 | xargs)
+    echo $RESULT
+}
+
+# Read out all cards and store the results as .ok files
+function gen_ok_files {
+    echo "== OK FILE GENERATION =="
+    for I in $(seq 0 $((N_TERMINALS-1))); do
+	echo "Probing card in terminal #$I"
+	CARD_NAME=$(probe_card $I)
+	if [ -z "$CARD_NAME" ]; then
+	    echo "Error: Unresponsive card!"
+	    exit 1
+	fi
+	echo "Card is of type: $CARD_NAME"
+	gen_ok_file $I $CARD_NAME
+    done
+}
+
+# Execute tests. Each card is programmed and the contents are checked
+# afterwards.
+function run_test {
+    for I in $(seq 0 $((N_TERMINALS-1))); do
+	echo "== EXECUTING TEST =="
+	echo "Probing card in terminal #$I"
+	CARD_NAME=$(probe_card $I)
+	if [ -z "$CARD_NAME" ]; then
+	    echo "Error: Unresponsive card!"
+	    exit 1
+	fi
+	echo "Card is of type: $CARD_NAME"
+
+	# Make sure some default data is set
+	MCC=001
+	MNC=01
+	ICCID=1122334455667788990
+	KI=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+	OPC=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+	IMSI=001010000000001
+	ADM=00000000
+
+	. "$CARD_NAME.data"
+	python $PYSIM_PROG -p $I -t $CARD_NAME -o $OPC -k $KI -x $MCC -y $MNC -i $IMSI -s $ICCID -a $ADM
+	check_card $I $CARD_NAME
+	echo ""
+    done
+}
+
+function usage {
+    echo "Options:"
+    echo "-n: number of card terminals"
+    echo "-o: generate .ok files"
+}
+
+# Make sure that the pathes to the python scripts always work, regardless from
+# where the script is called.
+CURDIR=$PWD
+SCRIPTDIR=$(dirname $0)
+cd $SCRIPTDIR
+PYSIM_PROG=$(realpath $PYSIM_PROG)
+PYSIM_READ=$(realpath $PYSIM_READ)
+cd $CURDIR
+
+OPT_N_TERMINALS=0
+OPT_GEN_OK_FILES=0
+while getopts ":hon:" OPT; do
+  case $OPT in
+      h)
+	  usage
+	  exit 0
+	  ;;
+      o)
+	  OPT_GEN_OK_FILES=1
+	  ;;
+      n)
+	  OPT_N_TERMINALS=$OPTARG
+	  ;;
+      \?)
+	  echo "Invalid option: -$OPTARG" >&2
+	  exit 1
+      ;;
+  esac
+done
+
+N_TERMINALS=$OPT_N_TERMINALS
+
+# Generate a list of available cards, if no explicit reader number is given
+# then the number of cards will be used as reader number.
+gen_card_list
+if [ $N_TERMINALS -eq 0 ]; then
+    N_TERMINALS=$N_CARDS
+fi
+echo "Number of card terminals installed: $N_TERMINALS"
+echo ""
+
+if [ $OPT_GEN_OK_FILES -eq 1 ]; then
+    gen_ok_files
+    exit 0
+else
+    run_test
+    check_card_list
+    exit 0
+fi
diff --git a/tests/sysmoUSIM-SJS1.data.example b/tests/sysmoUSIM-SJS1.data.example
new file mode 100644
index 0000000..d711dcb
--- /dev/null
+++ b/tests/sysmoUSIM-SJS1.data.example
@@ -0,0 +1,7 @@
+MCC=001
+MNC=01
+ICCID=1122334455667788990
+KI=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+OPC=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+IMSI=001010000000102
+ADM=12345678

-- 
To view, visit https://gerrit.osmocom.org/9947
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I8c6f95998272333bc757b34e3ab6be004e8cd674
Gerrit-Change-Number: 9947
Gerrit-PatchSet: 4
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: dexter <pmaier at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180719/00a4dc13/attachment.htm>


More information about the gerrit-log mailing list