aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2018-07-10 16:21:54 +0200
committerPhilipp Maier <pmaier@sysmocom.de>2018-07-16 16:02:42 +0200
commit04c05f1dbd38f346ec32b86067fec21809895c54 (patch)
tree83133ba317f8a4d2130aacd3c344f10875fbc68c
parenta2650496ce4a82b97807a6dfd0b7ae78054fc139 (diff)
tests: add test program to verify pysim-prog.py (and pysim-read.py)pmaier/simtest
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
-rw-r--r--tests/fakemagicsim.data.example6
-rwxr-xr-xtests/pysim-test.sh221
-rw-r--r--tests/sysmoUSIM-SJS1.data.example7
3 files changed, 234 insertions, 0 deletions
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