mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-05-28 21:48:05 +08:00
211 lines
4.8 KiB
Bash
Executable File
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
|