mirror of
https://github.com/obgm/libcoap.git
synced 2026-11-03 08:25:47 +03:00
See https://core-wg.github.io/oscore/test-spec5.html Add in new test server oscore-interop-server to provide the necessary functionality. Add in script and configuration files to run the tests locally.
260 lines
7.1 KiB
Bash
Executable File
260 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#
|
|
# This script is used to run the oscore interop tests as specified in
|
|
# https://core-wg.github.io/oscore/test-spec5.html
|
|
#
|
|
# By default, this script should be run in the examples directory.
|
|
#
|
|
# Run as
|
|
# ./oscore_testcases.sh [-h remote-target-IP] [-B port-B-OSCORE] \
|
|
# [-D port-D-OSCORE] [-N port-NO-OSCORE] \
|
|
# [-s executable-for-interop-server] \
|
|
# [-c executable-for-client] \
|
|
# [-P] [-F]
|
|
#
|
|
# -h remote-target-IP
|
|
# Remote server hosting interop tests if not running the interop server on this host.
|
|
#
|
|
# -B port-B-OSCORE
|
|
# Port that the server listening on providing B OSCORE security profile
|
|
#
|
|
# -D port-D-OSCORE
|
|
# Port that the server listening on providing D OSCORE security profile
|
|
#
|
|
# -N port-N-OSCORE
|
|
# Port that the server listening on providing no security profile
|
|
#
|
|
# -s executable-for-interop-server
|
|
# Exectuable to use for the interop server if not the default of ./oscore-interop-server.
|
|
#
|
|
# -c executable-for-client
|
|
# Exectuable to use for the coap client if not the default of ./coap-client.
|
|
#
|
|
# -P
|
|
# Output partial client logs
|
|
#
|
|
# -F
|
|
# Output full client logs
|
|
#
|
|
|
|
INDIR=`dirname $0`
|
|
|
|
# Defaults
|
|
|
|
# host running oscore interop server
|
|
TARGET_IP=127.0.0.1
|
|
# Server with B OSCORE Security
|
|
S_PORT_B=5683
|
|
# Server with D OSCORE Security
|
|
S_PORT_D=5685
|
|
# Server with no Security
|
|
S_PORT_N=5687
|
|
# Client app
|
|
CLIENT=$INDIR/coap-client
|
|
# SERVER app
|
|
SERVER=$INDIR/oscore-interop-server
|
|
# Partial Logs
|
|
PARTIAL_LOGS=no
|
|
# Full Logs
|
|
FULL_LOGS=no
|
|
|
|
while getopts "c:h:s:B:D:FN:P" OPTION; do
|
|
case $OPTION in
|
|
c)
|
|
CLIENT="$OPTARG"
|
|
;;
|
|
h)
|
|
TARGET_IP="$OPTARG"
|
|
;;
|
|
s)
|
|
SERVER="$OPTARG"
|
|
;;
|
|
B)
|
|
S_PORT_B="$OPTARG"
|
|
;;
|
|
D)
|
|
S_PORT_D="$OPTARG"
|
|
;;
|
|
F)
|
|
FULL_LOGS=yes
|
|
;;
|
|
N)
|
|
S_PORT_N="$OPTARG"
|
|
;;
|
|
P)
|
|
PARTIAL_LOGS=yes
|
|
;;
|
|
*)
|
|
echo Error in options detected
|
|
echo Run as
|
|
echo "$0 [-h remote-target-IP] [-B port-B-OSCORE]"
|
|
echo " [-D port-D-OSCORE] [-N port-NO-OSCORE]"
|
|
echo " [-s executable-for-interop-server]"
|
|
echo " [-c executable-for-client]"
|
|
echo " [-P] [-F]"
|
|
exit 1
|
|
esac
|
|
done
|
|
|
|
timecheck () {
|
|
timeout $*
|
|
if [ $? = 124 ] ; then
|
|
echo "****** Timed Out ******"
|
|
fi
|
|
}
|
|
|
|
NO_PASS=0
|
|
NO_FAIL=0
|
|
# passfail count egrep-expression
|
|
passfail () {
|
|
PASS=`cat /tmp/client_out | egrep "$2" | wc -l`
|
|
if [ "$PASS" = "$1" ] ; then
|
|
echo Pass
|
|
let "NO_PASS=$NO_PASS+1"
|
|
else
|
|
echo Fail
|
|
let "NO_FAIL=$NO_FAIL+1"
|
|
fi
|
|
if [ "$FULL_LOGS" = yes ] ; then
|
|
cat /tmp/client_out
|
|
elif [ "$PARTIAL_LOGS" = yes ] ; then
|
|
cat /tmp/client_out | egrep -v " DEBG | OSC "
|
|
fi
|
|
}
|
|
|
|
$SERVER -E $INDIR/interop/b_server.conf -v8 -p $S_PORT_B > /tmp/server_b 2>&1 &
|
|
$SERVER -E $INDIR/interop/d_server.conf -v8 -p $S_PORT_D > /tmp/server_d 2>&1 &
|
|
$SERVER -v8 -p $S_PORT_N > /tmp/server_n 2>&1 &
|
|
|
|
# Reset sequence number counters
|
|
rm -f /tmp/client_a
|
|
rm -f /tmp/client_c
|
|
|
|
# Test 0 General checkout
|
|
echo -n "Test 0 - "
|
|
timecheck 10 $CLIENT -w -v8 coap://$TARGET_IP:$S_PORT_B/oscore/hello/coap 2>&1 | egrep -v " DEBG | OSC " > /tmp/client_out
|
|
passfail 1 "^Hello World"
|
|
|
|
# Test 1
|
|
echo -n "Test 1 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf,/tmp/client_a coap://$TARGET_IP:$S_PORT_B/oscore/hello/1 > /tmp/client_out 2>&1
|
|
passfail 1 "^Hello World"
|
|
|
|
# Test 2
|
|
echo -n "Test 2 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/c_client.conf,/tmp/client_c coap://$TARGET_IP:$S_PORT_D/oscore/hello/1 > /tmp/client_out 2>&1
|
|
passfail 1 "^Hello World"
|
|
|
|
# Test 3
|
|
echo -n "Test 3 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf,/tmp/client_a coap://$TARGET_IP:$S_PORT_B/oscore/hello/2?first=1 > /tmp/client_out 2>&1
|
|
passfail 1 "^Hello World"
|
|
|
|
# Test 4
|
|
echo -n "Test 4 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf,/tmp/client_a -A 0 coap://$TARGET_IP:$S_PORT_B/oscore/hello/3 > /tmp/client_out 2>&1
|
|
passfail 1 "^Hello World"
|
|
|
|
# Test 5
|
|
echo -n "Test 5 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf,/tmp/client_a -s 2 coap://$TARGET_IP:$S_PORT_B/oscore/hello/1 > /tmp/client_out 2>&1
|
|
passfail 1 "^Hello World"
|
|
|
|
# Test 6
|
|
echo -n "Test 6 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf,/tmp/client_a -s 4 coap://$TARGET_IP:$S_PORT_B/oscore/observe1 > /tmp/client_out > /tmp/client_out 2>&1
|
|
passfail 3 "^one|^two|^5.00 Terminate Observe"
|
|
|
|
# Test 7
|
|
echo -n "Test 7 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf,/tmp/client_a -s 2 coap://$TARGET_IP:$S_PORT_B/oscore/observe2 > /tmp/client_out 2>&1
|
|
passfail 3 "^one|^two"
|
|
|
|
# Test 8
|
|
echo -n "Test 8 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf,/tmp/client_a -m post -e "%4a" -t 0 coap://$TARGET_IP:$S_PORT_B/oscore/hello/6 > /tmp/client_out 2>&1
|
|
passfail 1 "^J$"
|
|
|
|
# Test 9
|
|
echo -n "Test 9 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf,/tmp/client_a -m put -e "%7a" -t 0 -O 1,0x7b coap://$TARGET_IP:$S_PORT_B/oscore/hello/7 > /tmp/client_out 2>&1
|
|
passfail 1 "^z"
|
|
|
|
# Test 10
|
|
echo -n "Test 10 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf,/tmp/client_a -m put -e "%8a" -t 0 -O 5 coap://$TARGET_IP:$S_PORT_B/oscore/hello/7 > /tmp/client_out 2>&1
|
|
passfail 1 "^4.12 Precondition Failed"
|
|
|
|
# Test 11
|
|
if [ "$SUPPRESS" = no ] ; then
|
|
echo
|
|
fi
|
|
echo -n "Test 11 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf,/tmp/client_a -m delete coap://$TARGET_IP:$S_PORT_B/oscore/test > /tmp/client_out 2>&1
|
|
passfail 1 "^v:1 t:CON c:2.02 i:"
|
|
|
|
# Test 12
|
|
if [ "$SUPPRESS" = no ] ; then
|
|
echo
|
|
fi
|
|
echo -n "Test 12 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/e_client.conf,/tmp/client_a coap://$TARGET_IP:$S_PORT_B/oscore/hello/1 > /tmp/client_out 2>&1
|
|
passfail 1 "^4.01 Security context not found"
|
|
|
|
# Test 13
|
|
if [ "$SUPPRESS" = no ] ; then
|
|
echo
|
|
fi
|
|
echo -n "Test 13 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/f_client.conf,/tmp/client_a coap://$TARGET_IP:$S_PORT_B/oscore/hello/1 > /tmp/client_out 2>&1
|
|
passfail 1 "^4.00 Decryption failed"
|
|
|
|
# Test 14
|
|
if [ "$SUPPRESS" = no ] ; then
|
|
echo
|
|
fi
|
|
echo -n "Test 14 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/g_client.conf,/tmp/client_a coap://$TARGET_IP:$S_PORT_B/oscore/hello/1 > /tmp/client_out 2>&1
|
|
passfail 1 "WARN OSCORE: Decryption Failure, result code: -5"
|
|
|
|
# Test 15
|
|
if [ "$SUPPRESS" = no ] ; then
|
|
echo
|
|
fi
|
|
echo -n "Test 15 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/a_client.conf coap://$TARGET_IP:$S_PORT_B/oscore/hello/1 > /tmp/client_out 2>&1
|
|
passfail 1 "^4.01 Replay detected"
|
|
|
|
# Test 16
|
|
if [ "$SUPPRESS" = no ] ; then
|
|
echo
|
|
fi
|
|
echo -n "Test 16 - "
|
|
timeout 10 $CLIENT -w -v8 -E $INDIR/interop/e_client.conf,/tmp/client_a coap://$TARGET_IP:$S_PORT_N/oscore/hello/coap > /tmp/client_out 2>&1
|
|
passfail 1 "^4.02 Bad Option"
|
|
|
|
# Test 17
|
|
if [ "$SUPPRESS" = no ] ; then
|
|
echo
|
|
fi
|
|
echo -n "Test 17 - "
|
|
timeout 10 $CLIENT -w -v8 coap://$TARGET_IP:$S_PORT_N/oscore/hello/1 > /tmp/client_out 2>&1
|
|
passfail 1 "^4.01 Unauthorized"
|
|
|
|
KILL_SERVER=`basename $SERVER`
|
|
if [ ! -z "$KILL_SERVER" ] ; then
|
|
killall $KILL_SERVER
|
|
fi
|
|
|
|
echo
|
|
echo ===============
|
|
echo Pass: $NO_PASS
|
|
echo Fail: $NO_FAIL
|
|
#Starts with test 0
|
|
echo Total: 18
|
|
|
|
if [ "$NO_FAIL" != 0 ] ; then
|
|
exit 1
|
|
fi
|