From 349dc0bff8d4c24d0aa51f2182488c1046414128 Mon Sep 17 00:00:00 2001 From: cgeoffroy Date: Wed, 15 Mar 2017 16:24:58 +0100 Subject: [PATCH] Removing subshell for compatibility with Jenkins --- utils/ci/check_manual_usage_example.sh | 40 +++++++++++++++++--------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/utils/ci/check_manual_usage_example.sh b/utils/ci/check_manual_usage_example.sh index 5bf4e84..be69d3f 100755 --- a/utils/ci/check_manual_usage_example.sh +++ b/utils/ci/check_manual_usage_example.sh @@ -5,9 +5,26 @@ set -e set -x W() { - # Wait until a line appears in the screen session - local T=${2:-10s} - timeout -k 3s ${T} grep -q "^${1}" <(tail -f screenlog.0) + # Wait until a line appears in the screen session. + # It starts from the beginning of the log and exits after the first match. + local T=${2:-20s} + #timeout -k 3s ${T} stdbuf -o0 grep -q -m 1 "^${1}" <(tail -F -n+0 screenlog.0) + # (HACK) As Jenkins blocks subshell, we must use an intermediate script + local SUBF=$(mktemp) + chmod +x ${SUBF} + cat > ${SUBF} <<- EOF + #!/bin/bash -e + while true; do + if strings screenlog.0 | grep -m 1 "\${1}"; then + exit 0 + fi + sleep 0.5s + done + EOF + timeout -k 3s ${T} ${SUBF} "${1}" + local RES=$? + rm -f ${SUBF} + return ${RES} } Cmd() { @@ -33,7 +50,7 @@ screen -L -S sonemu -d -m python src/emuvim/examples/simple_topology.py # Setup screen for immediate flusing screen -S sonemu -X logfile flush 0 # Wait for the cli to start -W '*** Starting CLI:' +W '^*** Starting CLI:' # Print nodes Cmd 'nodes' # Start vnf1 @@ -44,18 +61,19 @@ son-emu-cli compute start -d datacenter1 -n vnf2 && sleep 1s son-emu-cli compute list && sleep 1s # Gather some infos Cmd 'sh echo "... starting various checks"' +sync # avoid test overlapping Cmd 'vnf1 ifconfig && echo "... checked vnf1"' -W "... checked vnf1" +W "^... checked vnf1" Cmd 'vnf2 ifconfig && echo "... checked vnf2"' -W "... checked vnf2" +W "^... checked vnf2" # Try to ping vnfs Cmd 'vnf1 ping -c 2 vnf2 || echo "... checked ping"' -W "... checked ping" 20s +W "^... checked ping" 20s Cmd 'quit' # Wait for sonemu to end -W '*** Done' +W '^*** Done' -echo -e '\n\n************i****** Result ******************\n\n' +echo -e '\n\n******************* Result ******************\n\n' strings screenlog.0 echo -e '\n\n*********************************************\n\n' @@ -68,7 +86,3 @@ else echo 'Ping is broken !' exit 1 fi - - -# Cleanup -rm -f screenlog.0 -- 2.25.1