From f47f9d84730e2bfe7b1dc465d14b09db34dc3076 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Fri, 8 Feb 2019 18:11:28 +0100 Subject: [PATCH] stress: Improve the stress test scripts MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- stress-clients.sh | 126 +++++++++++++++++++++++++++++++++--------------------- stress-server.sh | 52 +++++++++++++--------- 2 files changed, 109 insertions(+), 69 deletions(-) diff --git a/stress-clients.sh b/stress-clients.sh index d2085e4a..440e5621 100755 --- a/stress-clients.sh +++ b/stress-clients.sh @@ -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 + diff --git a/stress-server.sh b/stress-server.sh index 643c8990..1649e64d 100755 --- a/stress-server.sh +++ b/stress-server.sh @@ -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 -- 2.16.6