stress: Improve the stress test scripts 19/20019/1
authorJosé Bollo <jose.bollo@iot.bzh>
Fri, 8 Feb 2019 17:11:28 +0000 (18:11 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Fri, 8 Feb 2019 17:11:28 +0000 (18:11 +0100)
The improvement was able to track the bug
SPEC-2163 by launching:
 - ./stress-server.sh --ws --valgrind
 - ./stress-clients.sh --null --count 20

Bug-AGL: SPEC-2163

Change-Id: I04634f0e98ab7a28df7c1d34ecc0d9c1faf43d57
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
stress-clients.sh
stress-server.sh

index d2085e4..440e562 100755 (executable)
@@ -4,62 +4,92 @@ ROOT=$(dirname $0)
 echo ROOT=$ROOT
 
 AFB=$ROOT/build/src/afb-daemon
-CLI="$ROOT/build/src/afb-client-demo -e"
-HELLO=build/bindings/samples/helloWorld.so
+CLI="$ROOT/build/src/afb-client-demo -e -s"
 PORT=12345
-TEST=test
 TOKEN=knock-knock-knock
-OUT=$ROOT/stress-out-clients
 
-rm $OUT*
+count=10
+null=false
+eval set -- $(getopt -o c:n -l count:,null -- "$@") || exit
+while true
+do
+       case "$1" in
+       -c|--count)
+               if ! test "$2" -gt 0 2>/dev/null; then
+                       echo "error: $2 is not a valid count" >&2
+                       exit 1
+               fi
+               count="$2"
+               shift 2
+               ;;
+       -n|--null)
+               null=true
+               shift
+               ;;
+       --)
+               shift
+               break
+               ;;
+       esac
+done
 
-CMDS=
-add() {
-       CMDS="$CMDS
-$1"
-}
+OUT="$ROOT/stress-out-clients"
+echo rm $OUT.*
+rm $OUT.* 2> /dev/null
+
+if $null; then
+       OUT=/dev/null
+else
+       OUT="$OUT.%03d"
+fi
 
-add 'hello ping true'
-add 'HELLO PING false'
-add 'hello pIngNull true'
-#add 'hello PingBug true'
-add 'hello PiNgJsOn {"well":"formed","json":[1,2,3,4.5,true,false,null,"oups"]}'
-add 'hello subcall {"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}'
-add 'hello subcall {"api":"hello","verb":"subcall","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}'
-add 'hello subcallsync {"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}'
-add 'hello subcallsync {"api":"hello","verb":"subcall","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}'
-add 'hello subcall {"api":"hello","verb":"subcallsync","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}'
-add 'hello subcallsync {"api":"hello","verb":"subcallsync","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}'
-add 'hello eventadd {"tag":"ev1","name":"event-A"}'
-add 'hello eventadd {"tag":"ev2","name":"event-B"}'
-add 'hello eventpush {"tag":"ev1","data":[1,2,"hello"]}'
-add 'hello eventpush {"tag":"ev2","data":{"item":0}}'
-add 'hello eventsub {"tag":"ev2"}'
-add 'hello eventpush {"tag":"ev1","data":[1,2,"hello"]}'
-add 'hello eventpush {"tag":"ev2","data":{"item":0}}'
-add 'hello eventsub {"tag":"ev1"}'
-add 'hello subcall {"api":"hello","verb":"eventpush","args":{"tag":"ev1","data":[1,2,"hello"]}}'
-add 'hello subcall {"api":"hello","verb":"eventpush","args":{"tag":"ev2","data":{"item":0}}}'
-add 'hello subcallsync {"api":"hello","verb":"eventpush","args":{"tag":"ev1","data":[1,2,"hello"]}}'
-add 'hello subcallsync {"api":"hello","verb":"eventpush","args":{"tag":"ev2","data":{"item":0}}}'
-add 'hello eventunsub {"tag":"ev2"}'
-add 'hello eventpush {"tag":"ev1","data":[1,2,"hello"]}'
-add 'hello eventpush {"tag":"ev2","data":{"item":0}}'
-add 'hello eventdel {"tag":"ev1"}'
-add 'hello eventpush {"tag":"ev1","data":[1,2,"hello"]}'
-add 'hello eventpush {"tag":"ev2","data":{"item":0}}'
-add 'hello eventdel {"tag":"ev2"}'
+commands() {
+cat << EOC
+hello ping true
+HELLO PING false
+hello pIngNull true
+#hello PingBug true
+hello PiNgJsOn {"well":"formed","json":[1,2,3,4.5,true,false,null,"oups"]}
+hello subcall {"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}
+hello subcall {"api":"hello","verb":"subcall","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}
+hello subcallsync {"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}
+hello subcallsync {"api":"hello","verb":"subcall","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}
+hello subcall {"api":"hello","verb":"subcallsync","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}
+hello subcallsync {"api":"hello","verb":"subcallsync","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}
+hello eventadd {"tag":"ev1","name":"event-A"}
+hello eventadd {"tag":"ev2","name":"event-B"}
+hello eventpush {"tag":"ev1","data":[1,2,"hello"]}
+hello eventpush {"tag":"ev2","data":{"item":0}}
+hello eventsub {"tag":"ev2"}
+hello eventpush {"tag":"ev1","data":[1,2,"hello"]}
+hello eventpush {"tag":"ev2","data":{"item":0}}
+hello eventsub {"tag":"ev1"}
+hello subcall {"api":"hello","verb":"eventpush","args":{"tag":"ev1","data":[1,2,"hello"]}}
+hello subcall {"api":"hello","verb":"eventpush","args":{"tag":"ev2","data":{"item":0}}}
+hello subcallsync {"api":"hello","verb":"eventpush","args":{"tag":"ev1","data":[1,2,"hello"]}}
+hello subcallsync {"api":"hello","verb":"eventpush","args":{"tag":"ev2","data":{"item":0}}}
+hello eventunsub {"tag":"ev2"}
+hello eventpush {"tag":"ev1","data":[1,2,"hello"]}
+hello eventpush {"tag":"ev2","data":{"item":0}}
+hello eventdel {"tag":"ev1"}
+hello eventpush {"tag":"ev1","data":[1,2,"hello"]}
+hello eventpush {"tag":"ev2","data":{"item":0}}
+hello eventdel {"tag":"ev2"}
+EOC
+}
 
 r() {
-       while :; do echo "$CMDS"; done |
-       while read x; do echo $x; sleep 0.001; done |
-       $CLI "localhost:$PORT/api?token=$TOKEN" > $OUT.$1 2>&1 &
-#      while read x; do echo $x; sleep 0.001; done |
-#      strace -tt -f -o $OUT-strace.$1 $CLI "localhost:$PORT/api?token=$TOKEN" > $OUT.$1 2>&1 &
+       while :; do commands; done |
+       $CLI "localhost:$PORT/api?token=$TOKEN" > "$1" 2>&1 &
 }
 
-echo -n launch clients...
-for x in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do r $x; done
+echo launch clients...
+i=1
+while test $i -le $count; do
+       echo " + launch clients $i"
+       r $(printf "$OUT" $i)
+       i=$(expr $i + 1)
+done
 echo done
-
 wait
+
index 643c899..1649e64 100755 (executable)
@@ -6,35 +6,45 @@ ROOT=$(pwd)
 echo ROOT=$ROOT
 
 AFB=build/src/afb-daemon
-HELLO=build/bindings/samples/helloWorld.so
+HELLO=build/bindings/samples/hello3.so
 PORT=12345
 TEST=test
 TOKEN=knock-knock-knock
-OUT=stress-out-server
 
+OUT=stress-out-server
 rm $OUT*
 
-case "$1" in
- --ws)
-  shift
-  ARGS="-q --no-ldpaths --binding=$HELLO --session-max=100 --ws-server=unix:@afw:hello --no-httpd --exec $AFB --session-max=100 --port=$PORT --no-ldpaths --roothttp=$TEST --token=$TOKEN --ws-client=unix:@afw:hello "
-#  ARGS="$ARGS -vvv --tracereq=all"
-  ;;
- *)
-  ARGS="-q --session-max=100 --port=$PORT --workdir=$ROOT --roothttp=$TEST --token=$TOKEN --ldpaths=/tmp --binding=$HELLO"
-  ;;
+tool=
+ws=false
+eval set -- $(getopt -o wgsv -l ws,gdb,strace,valgrind -- "$@") || exit
+while true
+do
+       case "$1" in
+       -w|--ws) ws=true; shift;;
+       -g|--gdb) tool=gdb; shift;;
+       -s|--strace) tool=strace; shift;;
+       -v|--valgrind) tool=valgrind; shift;;
+       --) shift; break;;
+       esac
+done
+
+case $tool in
+ gdb) cmd="$(type -p gdb) -ex run --args";;
+ valgrind) cmd="$(type -p valgrind) --leak-check=full";;
+ strace) cmd="$(type -p strace) -tt -f -o $OUT.strace";;
+ *) cmd=;;
 esac
 
+if $ws; then
+  CMD="$AFB -q --no-ldpaths --binding=$HELLO --session-max=100 --ws-server=unix:@afw/hello --no-httpd --exec $cmd $AFB --session-max=100 --port=$PORT --no-ldpaths --roothttp=$TEST --token=$TOKEN --ws-client=unix:@afw/hello "
+else
+  CMD="$cmd $AFB -q --session-max=100 --port=$PORT --workdir=$ROOT --roothttp=$TEST --token=$TOKEN --no-ldpaths --binding=$HELLO"
+fi
+
 
-echo $AFB $ARGS $@
-echo -n launch afb...
-case "$1" in
- gdb) shift; gdb $AFB -ex "run $ARGS $@";;
- valgrind) shift; valgrind --leak-check=full $AFB $ARGS $@ 2>&1 | tee $OUT;;
- strace) shift; strace -tt -f -o $OUT.strace $AFB $ARGS $@ 2>&1 | tee $OUT;;
- *) $AFB $ARGS $@ 2>&1 | tee $OUT;;
+echo "launch: $CMD $@"
+case $tool in
+ gdb) $CMD "$@";;
+ *) $CMD "$@" 2>&1 | tee $OUT;
 esac
-#$AFB -q --session-max=100 --port=$PORT --workdir=$ROOT --roothttp=$TEST --token=$TOKEN --ldpaths=/tmp --binding=$HELLO  > $OUT.0 2>&1 &
-#afbpid=$!
-#strace -tt -f -o $OUT-strace.0 -p $afbpid &
 wait