From 7f340851fcfbf5f06acace66ce76eab8072661d0 Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Tue, 10 Jul 2018 16:21:54 +0200 Subject: 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 --- tests/fakemagicsim.data.example | 6 ++ tests/pysim-test.sh | 221 ++++++++++++++++++++++++++++++++++++++ tests/sysmoUSIM-SJS1.data.example | 7 ++ 3 files changed, 234 insertions(+) create mode 100644 tests/fakemagicsim.data.example create mode 100755 tests/pysim-test.sh create mode 100644 tests/sysmoUSIM-SJS1.data.example (limited to 'tests') 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 . + +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 -- cgit v1.2.3