1*1c60b9acSAndroid Build Coastguard Worker#!/bin/bash 2*1c60b9acSAndroid Build Coastguard Worker# 3*1c60b9acSAndroid Build Coastguard Worker# Requires pip install autobahntestsuite 4*1c60b9acSAndroid Build Coastguard Worker# 5*1c60b9acSAndroid Build Coastguard Worker# you should run this from ./build, after building with 6*1c60b9acSAndroid Build Coastguard Worker# cmake .. -DLWS_WITH_MINIMAL_EXAMPLES=1 7*1c60b9acSAndroid Build Coastguard Worker# 8*1c60b9acSAndroid Build Coastguard Worker# It will use the minimal echo client and server to run 9*1c60b9acSAndroid Build Coastguard Worker# autobahn ws tests as both client and server. 10*1c60b9acSAndroid Build Coastguard Worker 11*1c60b9acSAndroid Build Coastguard Workerecho 12*1c60b9acSAndroid Build Coastguard Workerecho "----------------------------------------------" 13*1c60b9acSAndroid Build Coastguard Workerecho "------- tests: autobahn as client" 14*1c60b9acSAndroid Build Coastguard Workerecho 15*1c60b9acSAndroid Build Coastguard Worker 16*1c60b9acSAndroid Build Coastguard Workerset -u 17*1c60b9acSAndroid Build Coastguard Worker 18*1c60b9acSAndroid Build Coastguard WorkerPARALLEL=1 19*1c60b9acSAndroid Build Coastguard WorkerN=1 20*1c60b9acSAndroid Build Coastguard WorkerOS=`uname` 21*1c60b9acSAndroid Build Coastguard Worker 22*1c60b9acSAndroid Build Coastguard WorkerCLIE=bin/lws-minimal-ws-client-echo 23*1c60b9acSAndroid Build Coastguard WorkerSERV=bin/lws-minimal-ws-server-echo 24*1c60b9acSAndroid Build Coastguard Worker 25*1c60b9acSAndroid Build Coastguard WorkerRESULT=0 26*1c60b9acSAndroid Build Coastguard Worker 27*1c60b9acSAndroid Build Coastguard Workerwhich wstest 2>/dev/null 28*1c60b9acSAndroid Build Coastguard Workerif [ $? -ne 0 ]; then 29*1c60b9acSAndroid Build Coastguard Worker echo "wstest is not installed" 30*1c60b9acSAndroid Build Coastguard Worker exit 8 31*1c60b9acSAndroid Build Coastguard Workerfi 32*1c60b9acSAndroid Build Coastguard Worker 33*1c60b9acSAndroid Build Coastguard Workerkillall wstest 2>/dev/null 34*1c60b9acSAndroid Build Coastguard Worker 35*1c60b9acSAndroid Build Coastguard Worker# 36*1c60b9acSAndroid Build Coastguard Worker# 2.10 / 2.11: There is no requirement to handle multiple PING / PONG 37*1c60b9acSAndroid Build Coastguard Worker# in flight in RFC6455. lws doesn't waste memory on it 38*1c60b9acSAndroid Build Coastguard Worker# since it is useless. 39*1c60b9acSAndroid Build Coastguard Worker# 40*1c60b9acSAndroid Build Coastguard Worker# 12.3.1 / 12.3.2 41*1c60b9acSAndroid Build Coastguard Worker# 12.4.* / 12.5.*: Autobahn has been broken for these tests since Aug 2017 42*1c60b9acSAndroid Build Coastguard Worker# https://github.com/crossbario/autobahn-testsuite/issues/71 43*1c60b9acSAndroid Build Coastguard Worker 44*1c60b9acSAndroid Build Coastguard Worker 45*1c60b9acSAndroid Build Coastguard Workercat << EOF >fuzzingserver.json 46*1c60b9acSAndroid Build Coastguard Worker{ 47*1c60b9acSAndroid Build Coastguard Worker "url": "ws://127.0.0.1:9001", 48*1c60b9acSAndroid Build Coastguard Worker "outdir": "./reports/clients", 49*1c60b9acSAndroid Build Coastguard Worker "cases": ["*"], 50*1c60b9acSAndroid Build Coastguard Worker "exclude-cases": [ "2.10", "2.11", "12.3.1", "12.3.2", "12.4.*", "12.5.*"], 51*1c60b9acSAndroid Build Coastguard Worker "exclude-agent-cases": {} 52*1c60b9acSAndroid Build Coastguard Worker} 53*1c60b9acSAndroid Build Coastguard WorkerEOF 54*1c60b9acSAndroid Build Coastguard Worker 55*1c60b9acSAndroid Build Coastguard WorkerPYTHONHASHSEED=0 wstest -m fuzzingserver & 56*1c60b9acSAndroid Build Coastguard WorkerQ=$! 57*1c60b9acSAndroid Build Coastguard Workersleep 2s 58*1c60b9acSAndroid Build Coastguard Workerps -p $Q > /dev/null 59*1c60b9acSAndroid Build Coastguard Workerif [ $? -ne 0 ] ; then 60*1c60b9acSAndroid Build Coastguard Worker echo "Problem with autobahn wstest install" 61*1c60b9acSAndroid Build Coastguard Worker exit 9 62*1c60b9acSAndroid Build Coastguard Workerfi 63*1c60b9acSAndroid Build Coastguard Worker 64*1c60b9acSAndroid Build Coastguard Worker# 1) lws-as-client tests first 65*1c60b9acSAndroid Build Coastguard Worker 66*1c60b9acSAndroid Build Coastguard Workerok=1 67*1c60b9acSAndroid Build Coastguard Workerwhile [ $ok -eq 1 ] ; do 68*1c60b9acSAndroid Build Coastguard Worker $CLIE -s 127.0.0.1 -p 9001 -u "/runCase?case=$N&agent=libwebsockets" -d3 69*1c60b9acSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 70*1c60b9acSAndroid Build Coastguard Worker ok=0 71*1c60b9acSAndroid Build Coastguard Worker fi 72*1c60b9acSAndroid Build Coastguard Worker N=$(( $N + 1 )) 73*1c60b9acSAndroid Build Coastguard Workerdone 74*1c60b9acSAndroid Build Coastguard Worker 75*1c60b9acSAndroid Build Coastguard Worker# generate the report in ./reports 76*1c60b9acSAndroid Build Coastguard Worker# 77*1c60b9acSAndroid Build Coastguard Worker$CLIE -s 127.0.0.1 -p 9001 -u "/updateReports?agent=libwebsockets" -o -d3 78*1c60b9acSAndroid Build Coastguard Workersleep 2s 79*1c60b9acSAndroid Build Coastguard Workerkillall wstest 80*1c60b9acSAndroid Build Coastguard Workersleep 1s 81*1c60b9acSAndroid Build Coastguard Worker 82*1c60b9acSAndroid Build Coastguard Worker# this squashes the results into single lines like 83*1c60b9acSAndroid Build Coastguard Worker# 84*1c60b9acSAndroid Build Coastguard Worker# "9.8.4": { "behavior": "OK", "behaviorClose": "OK", "duration": 1312, "remoteCloseCode": 1000, "reportfile": "libwebsockets_case_9_8_4.json" 85*1c60b9acSAndroid Build Coastguard Worker 86*1c60b9acSAndroid Build Coastguard Workercat reports/clients/index.json | tr '\n' '!' | sed "s|\},\!|\n|g" | tr '!' ' ' | tr -s ' ' > /tmp/ji 87*1c60b9acSAndroid Build Coastguard Worker 88*1c60b9acSAndroid Build Coastguard Workerecho -n "AUTOBAHN SERVER / LWS CLIENT: Total tests: " `cat /tmp/ji | wc -l` " : " 89*1c60b9acSAndroid Build Coastguard WorkerR="`cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | wc -l`" 90*1c60b9acSAndroid Build Coastguard Workerif [ "$R" == "0" ] ; then 91*1c60b9acSAndroid Build Coastguard Worker echo "All pass" 92*1c60b9acSAndroid Build Coastguard Workerelse 93*1c60b9acSAndroid Build Coastguard Worker RESULT=1 94*1c60b9acSAndroid Build Coastguard Worker echo -n "$R FAIL : " 95*1c60b9acSAndroid Build Coastguard Worker cat /tmp/ji | grep -v '"behavior": "OK"' | grep -v '"behavior": "NON-STRICT"' | grep -v '"behavior": "INFORMATIONAL"' | cut -d\" -f2 | tr '\n' ',' 96*1c60b9acSAndroid Build Coastguard Worker echo 97*1c60b9acSAndroid Build Coastguard Workerfi 98*1c60b9acSAndroid Build Coastguard Worker 99*1c60b9acSAndroid Build Coastguard Workerecho $RESULT 100*1c60b9acSAndroid Build Coastguard Workerexit $RESULT 101*1c60b9acSAndroid Build Coastguard Worker 102