xref: /aosp_15_r20/external/libwebsockets/scripts/autobahn-test-client.sh (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
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