You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.4 KiB
102 lines
2.4 KiB
4 months ago
|
#!/bin/bash
|
||
|
#
|
||
|
# Requires pip install autobahntestsuite
|
||
|
#
|
||
|
# you should run this from ./build, after building with
|
||
|
# cmake .. -DLWS_WITH_MINIMAL_EXAMPLES=1
|
||
|
#
|
||
|
# It will use the minimal echo client and server to run
|
||
|
# autobahn ws tests as both client and server.
|
||
|
|
||
|
echo
|
||
|
echo "----------------------------------------------"
|
||
|
echo "------- tests: autobahn as client"
|
||
|
echo
|
||
|
|
||
|
set -u
|
||
|
|
||
|
PARALLEL=1
|
||
|
N=1
|
||
|
OS=`uname`
|
||
|
|
||
|
CLIE=bin/lws-minimal-ws-client-echo
|
||
|
SERV=bin/lws-minimal-ws-server-echo
|
||
|
|
||
|
RESULT=0
|
||
|
|
||
|
which wstest 2>/dev/null
|
||
|
if [ $? -ne 0 ]; then
|
||
|
echo "wstest is not installed"
|
||
|
exit 8
|
||
|
fi
|
||
|
|
||
|
killall wstest 2>/dev/null
|
||
|
|
||
|
#
|
||
|
# 2.10 / 2.11: There is no requirement to handle multiple PING / PONG
|
||
|
# in flight in RFC6455. lws doesn't waste memory on it
|
||
|
# since it is useless.
|
||
|
#
|
||
|
# 12.3.1 / 12.3.2
|
||
|
# 12.4.* / 12.5.*: Autobahn has been broken for these tests since Aug 2017
|
||
|
# https://github.com/crossbario/autobahn-testsuite/issues/71
|
||
|
|
||
|
|
||
|
cat << EOF >fuzzingserver.json
|
||
|
{
|
||
|
"url": "ws://127.0.0.1:9001",
|
||
|
"outdir": "./reports/clients",
|
||
|
"cases": ["*"],
|
||
|
"exclude-cases": [ "2.10", "2.11", "12.3.1", "12.3.2", "12.4.*", "12.5.*"],
|
||
|
"exclude-agent-cases": {}
|
||
|
}
|
||
|
EOF
|
||
|
|
||
|
PYTHONHASHSEED=0 wstest -m fuzzingserver &
|
||
|
Q=$!
|
||
|
sleep 2s
|
||
|
ps -p $Q > /dev/null
|
||
|
if [ $? -ne 0 ] ; then
|
||
|
echo "Problem with autobahn wstest install"
|
||
|
exit 9
|
||
|
fi
|
||
|
|
||
|
# 1) lws-as-client tests first
|
||
|
|
||
|
ok=1
|
||
|
while [ $ok -eq 1 ] ; do
|
||
|
$CLIE -s 127.0.0.1 -p 9001 -u "/runCase?case=$N&agent=libwebsockets" -d3
|
||
|
if [ $? -ne 0 ]; then
|
||
|
ok=0
|
||
|
fi
|
||
|
N=$(( $N + 1 ))
|
||
|
done
|
||
|
|
||
|
# generate the report in ./reports
|
||
|
#
|
||
|
$CLIE -s 127.0.0.1 -p 9001 -u "/updateReports?agent=libwebsockets" -o -d3
|
||
|
sleep 2s
|
||
|
killall wstest
|
||
|
sleep 1s
|
||
|
|
||
|
# this squashes the results into single lines like
|
||
|
#
|
||
|
# "9.8.4": { "behavior": "OK", "behaviorClose": "OK", "duration": 1312, "remoteCloseCode": 1000, "reportfile": "libwebsockets_case_9_8_4.json"
|
||
|
|
||
|
cat reports/clients/index.json | tr '\n' '!' | sed "s|\},\!|\n|g" | tr '!' ' ' | tr -s ' ' > /tmp/ji
|
||
|
|
||
|
echo -n "AUTOBAHN SERVER / LWS CLIENT: Total tests: " `cat /tmp/ji | wc -l` " : "
|
||
|
R="`cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | wc -l`"
|
||
|
if [ "$R" == "0" ] ; then
|
||
|
echo "All pass"
|
||
|
else
|
||
|
RESULT=1
|
||
|
echo -n "$R FAIL : "
|
||
|
cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | cut -d\" -f2 | tr '\n' ','
|
||
|
echo
|
||
|
fi
|
||
|
|
||
|
echo $RESULT
|
||
|
exit $RESULT
|
||
|
|