Files
Dong Heng f8b212de5f feat(coap): Bring coap from esp-idf
Commit ID: 22da5f6d
2018-10-10 19:55:30 +08:00

211 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# test coap implementation for the ETSI CoAP Plugtest in March 2012
# with test cases described in Plugtests Guide First Draft V0.0.16
COAP_CLIENT=./coap-client
tcpdump=/usr/sbin/tcpdump
DEFAULTPORT=5683
CLIENTPORT=61701
# directory for logging
LOGDIR=logs
# set client's verbose level
callopts=" -v 5"
longtimeout=180
clienttimeout=$longtimeout
timeoutcmd=/usr/bin/timeout
#URIREGEX=.*\/.*
# resembles approximately an ip address
IPADDRREGEX="^[1-2]?[0-9]{1,2}\.[1-2]?[0-9]{1,2}\.[1-2]?[0-9]{1,2}\.[1-2]?[0-9]{1,2}"
# FIXME IPV6 address
IP6REGEX=".*:.*:.*"
# Testcase groups
CORE=( TD_COAP_CORE_01 TD_COAP_CORE_02 TD_COAP_CORE_03
TD_COAP_CORE_04 TD_COAP_CORE_05 TD_COAP_CORE_06 TD_COAP_CORE_07
TD_COAP_CORE_08 TD_COAP_CORE_09 TD_COAP_CORE_10 TD_COAP_CORE_11
TD_COAP_CORE_12 TD_COAP_CORE_13 TD_COAP_CORE_14 TD_COAP_CORE_15 )
LINK=( TD_COAP_LINK_01 TD_COAP_LINK_02 )
BLOCK=( TD_COAP_BLOCK_01 TD_COAP_BLOCK_02 TD_COAP_BLOCK_03 TD_COAP_BLOCK_04 )
OBS=( TD_COAP_OBS_01 TD_COAP_OBS_02 TD_COAP_OBS_03 TD_COAP_OBS_04 TD_COAP_OBS_05 )
testgroups=( CORE LINK BLOCK OBS )
# if no test cases are specified, we want to run all tests
testnumber=-1
group=''
source etsi_testcases.sh
function usage {
echo "Usage: `basename $0` [-n testnumber] [-g groupname] [-t timeout] [-P server_port] [-p client port] [-d logdir] [-v] -i interface server_address" 1>&2
echo "-n test case to be accomplished" 1>&2
echo "-g group to be tested" 1>&2
echo "-t time in seconds until timout for single test" 1>&2
echo "-i interface to use for tcpdump" 1>&2
echo "-P port of server" 1>&2
echo "-p port client listens on" 1>&2
echo "-d directory for logfiles" 1>&2
echo "-v verbose level" 1>&2
}
function run_test {
tn=$1
clientopts=''
if [ -z $1 ]; then
echo "missing argument for run_test"
exit 1
fi
echo -e "running test: $tn"
if [ $(type -t $tn) ] ; then
$tn $tn
echo
else
echo "not implemented"
echo
fi
}
while getopts "n:g:t:i:P:p:d:v" OPTION;
do
# A missing argument for an option leads getopts to take the next
# option as the parameter. We want to prevent that.
case $OPTARG in
-*) echo "Missing argument for option \"-$OPTION\"."
echo $USAGE
exit 1
;;
esac
case $OPTION in
n) # number of test case
testnumber=$((OPTARG-1))
;;
g) # name of test group
# is there a group with that name?
for i in "${testgroups[@]}"
do
# group doesn't have to be case sensitive
tmpgroup=$(echo $OPTARG | tr '[:lower:]' '[:upper:]')
if [ $i == $tmpgroup ] ; then
group=$tmpgroup
break
fi
done
if [ -z $group ] ; then
echo "No such group:" $OPTARG". Available groups are: ${testgroups[@]}"
exit 1
fi
;;
t)
# add timeout to client parameters
clienttimeout=$((OPTARG))
callopts="$callopts -B $clienttimeout"
;;
i)
# interface tcpdump listens on
INTERFACE=$OPTARG
;;
P)
# port the server listens on
SERVERPORT=$((OPTARG))
;;
p)
# port the client listens on
CLIENTPORT=$((OPTARG))
;;
d)
# directory tcpdump writes the logfiles into
LOGDIR=$OPTARG
;;
v)
verbose=1
;;
?)
# any other option is invalid
echo -e $USAGE 1>&2
exit 1
;;
esac
done
# catch last argument: server address
ARGS=$(($#+1))
SERVERADDRESS=${@: -1}
if [[ ! $((ARGS-OPTIND)) -eq 1 ]]; then
echo -e "\nno server address specified"
usage
exit 1
fi
# if no port number was specified by user, the server address for the
# coap-client is $SERVERADDRESS
if [ -z $SERVERPORT ]; then
SERVERPORT=$DEFAULTPORT
if [[ $SERVERADDRESS =~ $IP6REGEX ]]; then
SERVERTUP=\[$SERVERADDRESS\]
else
SERVERTUP=$SERVERADDRESS
fi
else
if [[ $SERVERADDRESS =~ $IP6REGEX ]]; then
SERVERTUP=\[$SERVERADDRESS\]:$SERVERPORT
else
SERVERTUP=$SERVERADDRESS:$SERVERPORT
fi
fi
# create directory for logging, if it's not already there
if [[ ! -e $LOGDIR ]]; then
mkdir -p $LOGDIR
if [ $? ]; then
echo created directory \""$LOGDIR"\" for logging
fi
fi
# the interface for tcpdump is mandatory
if [ -z $INTERFACE ]; then
echo -e "\nno interface given"
exit 1
fi
# determine which tests to run
if [ -n "$group" ] ; then
echo group: $group
if [[ ! $testnumber -eq -1 ]] ; then
groupsize=$(eval "echo \${#$(echo $group)[@]}")
# is there a testcase with number $testnumber in group $group
if [ $testnumber -ge $groupsize -o $testnumber -lt 0 ] ; then
echo "No such testcase number: $OPTARG. Test cases numbers are 1 to" $groupsize
exit 1
else
# run test with group $group and number $testnumber
run_test $(eval "echo \${$(echo $group)[$testnumber]}")
fi
else
# if no testnumber was specified, we want to run all tests in that group
for i in $(eval "echo \${$(echo $group)[@]}") ; do
run_test $i
done
fi
else
# run all tests of all groups
for j in ${testgroups[@]} ; do
echo "group: $j"
for k in $(eval "echo \${$(echo $j)[@]}") ; do
run_test $k
done
done
fi