From 2adddd9e9c3e19f6dfcb712de511f078c4025ab8 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Fri, 3 Dec 2021 11:27:58 -0500 Subject: [PATCH] Create a cthon.zsh script And a script to color the output. Additionally, I add a patch that goes on top of the cthon04 git tree so we can test with nconnect Signed-off-by: Anna Schumaker --- colors/cthon.py | 35 ++++++++++++ completions/_cthon.zsh | 16 ++++++ cthon.zsh | 49 +++++++++++++++++ ...0001-runcthon-Add-an-nconnect-option.patch | 53 +++++++++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 colors/cthon.py create mode 100644 completions/_cthon.zsh create mode 100755 cthon.zsh create mode 100644 patches/cthon04-0001-runcthon-Add-an-nconnect-option.patch diff --git a/colors/cthon.py b/colors/cthon.py new file mode 100644 index 0000000..4481b9e --- /dev/null +++ b/colors/cthon.py @@ -0,0 +1,35 @@ +import sys +import re +import termcolor + +colors = { "b" : "blue", "g" : "green", "s" : "cyan", "l" : "yellow" } +last = "white" +newline = False + +text = "" +def print_text(color, attr=None): + global text + termcolor.cprint(text, color=color, attrs=[attr] if attr else None, end="") + text = "" + +while c := sys.stdin.read(1): + text += c + if re.match("^mkdir: .* File exists\n$", text): + print_text("white", "dark") + elif re.match("^The .*? Failed!!\n$", text): + text = "\n" + text if newline else text + newline = False + print_text("red", "bold") + elif match := re.match("^./server -([bgsl]) .*?\n$", text): + print_text(colors[match.group(1)], None) + elif match := re.match("^Waiting for '([bgsl])' to finish...", text): + last = colors[match.group(1)] + newline = True + print_text(last, "bold") + elif match := re.match("^ Done: .*?\n$", text): + print_text(last, "bold") + newline = False + elif c == "\n": + if len(text) > 1: + print_text("white", "bold") + text = "" diff --git a/completions/_cthon.zsh b/completions/_cthon.zsh new file mode 100644 index 0000000..2d26fd2 --- /dev/null +++ b/completions/_cthon.zsh @@ -0,0 +1,16 @@ +#compdef cthon.zsh + +function _cthon.zsh() { + _arguments \ + {-c,--client}'[the client to test]: : _alternative + "hosts\:hosts\: _ssh_hosts" + "domains\:domains\:($(virsh list --all --name))"' \ + --nconnect'[number of connections]: :($(seq 1 32))' \ + --krb5'[run tests with sec=krb5]' \ + {-p,--mountpoint}'[the directory to mount the server]: : _files -/' \ + {-r,--rdma}'[test using rdma]: :(rxe siw)' \ + {-s,--server}'[the server to test against]: : _alternative + "hosts\:hosts\: _ssh_hosts" + "domains\:domains\:($(virsh list --all --name))"' \ + {-x,--export}'[the exported directory on the server]: : _files -/' +} diff --git a/cthon.zsh b/cthon.zsh new file mode 100755 index 0000000..5096161 --- /dev/null +++ b/cthon.zsh @@ -0,0 +1,49 @@ +#!/bin/zsh -e +CLIENT=(client) +SERVER=(server) +EXPORT=(/srv/test) +MOUNTPOINT=(/mnt/test) + +zparseopts -F -K \ + c:=CLIENT -client:=CLIENT \ + p:=MOUNTPOINT -mountpoint:=MOUNTPOINT \ + -nconnect:=NCONNECT \ + -krb5=KRB5 \ + r:=RDMA -rdma:=RDMA \ + s:=SERVER -server:=SERVER \ + x:=EXPORT -export:=EXPORT + +BIN=$HOME/bin +COLOR=$BIN/colors/cthon.py +RUN_CTHON="cd cthon04 && sudo ./runcthon" +USER=$(whoami) + +# +# Prepare to test +# +$BIN/vm.zsh boot ${CLIENT[-1]} ${SERVER[-1]} +if [ ${#RDMA} -gt 0 ]; then + RUN_CTHON="$RUN_CTHON --rdma" + $BIN/rdma.zsh ${RDMA[-1]} ${CLIENT[-1]} ${SERVER[-1]} +fi +if [ ${#NCONNECT} -gt 0 ]; then + RUN_CTHON="$RUN_CTHON --nconnect ${NCONNECT[-1]}" +fi +if [ ${#KRB5} -gt 0 ]; then + RUN_CTHON="$RUN_CTHON --dokrb5" +fi +echo + +ssh ${CLIENT[-1]} "sudo mkdir -p ${MOUNTPOINT[-1]}" +ssh ${CLIENT[-1]} "sudo mount -o sec=sys ${SERVER[-1]}:${EXPORT[-1]} ${MOUNTPOINT[-1]}" +TRAPEXIT() { ssh ${CLIENT[-1]} "sudo umount ${MOUNTPOINT[-1]}" } +ssh ${CLIENT[-1]} "$RUN_CTHON --mkdirs ${MOUNTPOINT[-1]}/$USER/ 2>&1" | python -u $COLOR +ssh ${CLIENT[-1]} "sudo chmod -R 777 ${MOUNTPOINT[-1]}/$USER/" +TRAPEXIT() { ; } +ssh ${CLIENT[-1]} "sudo umount ${MOUNTPOINT[-1]}" +echo + +# +# Run tests +# +ssh client "$RUN_CTHON --server ${SERVER[-1]} --serverdir ${EXPORT[-1]}/$USER 2>&1" | python -u $COLOR diff --git a/patches/cthon04-0001-runcthon-Add-an-nconnect-option.patch b/patches/cthon04-0001-runcthon-Add-an-nconnect-option.patch new file mode 100644 index 0000000..1dc402b --- /dev/null +++ b/patches/cthon04-0001-runcthon-Add-an-nconnect-option.patch @@ -0,0 +1,53 @@ +From 22b0659aa344e2267b6f84321391d141593ab192 Mon Sep 17 00:00:00 2001 +From: Anna Schumaker +Date: Fri, 3 Dec 2021 16:43:36 -0500 +Subject: [PATCH] runcthon: Add an nconnect option + +Signed-off-by: Anna Schumaker +--- + runcthon | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/runcthon b/runcthon +index 730058637c3d..51296cef40ed 100755 +--- a/runcthon ++++ b/runcthon +@@ -92,6 +92,7 @@ sec=$5 + mnt=/mnt + fi + [ "$fsc" -eq 1 ] && mntargs="$mntargs,fsc" ++ [ -n "$nconnect" ] && mntargs="$mntargs,nconnect=$nconnect" + [ -n "$port" ] && mntargs="$mntargs,port=$port" + + mkdir -p $mnt/nfsv$vers$proto || exit 1 +@@ -167,7 +168,7 @@ mkdirs() + } + trap 'echo SIGINT; pkill runcthon; pkill server; exit 1 ' SIGINT + trap 'echo; echo -n "Done:"; date; exit 2' SIGTERM +-Usage="$0 --mkdirs [dir] |--unmountall|--server|--serverdir|--noudp|--dokrb5|--onlykrb5|--nov4|--onlyv3|--onlyv4|--nov41|--nov42|--minver |--fsc|--rdma|--onlyrdma|--nolcks|--port " ++Usage="$0 --mkdirs [dir] |--unmountall|--server|--serverdir|--noudp|--dokrb5|--onlykrb5|--nov4|--onlyv3|--onlyv4|--nov41|--nov42|--minver |--fsc|--nconnect |--rdma|--onlyrdma|--nolcks|--port " + + nolcks=0 + noudp=1 +@@ -180,6 +181,7 @@ onlyv3=0 + onlyv4=0 + minver=0 + fsc=0 ++nconnect="" + # Note port="2050" for Panasas server + port="" + rdma=0 +@@ -235,6 +237,10 @@ do + "--fsc" ) + fsc=1 + ;; ++ "--nconnect" ) ++ nconnect=$2 ++ shift ++ ;; + "--rdma" ) + rdma=1 + ;; +-- +2.34.1 +