#!/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