Function tst_timeout() added into LTP test interface:

        tst_timeout "command arg1 arg2 ..." timeout

Function enables waiting for specified command for timeout
seconds. Example usage:

        cmd_output=$(tst_timeout "ping -c 3 localhost" 5)
        if [ $? -ne 0 ]; then
                tst_brkm TBROK "timeout reached!"
        fi

where $cmd_output contains stdout and stderr of ping command.

Signed-off-by: Matus Marhefka <mmarh...@redhat.com>
---
 testcases/lib/test.sh | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/testcases/lib/test.sh b/testcases/lib/test.sh
index eecbfba..d31fcb8 100644
--- a/testcases/lib/test.sh
+++ b/testcases/lib/test.sh
@@ -129,6 +129,50 @@ tst_check_cmds()
        done
 }
 
+# tst_timeout "command arg1 arg2 ..." timeout
+# Runs command for specified timeout (in seconds).
+# Function returns retcode of command or 1 if arguments are invalid.
+tst_timeout()
+{
+       local command=$1
+       local timeout=$(echo $2 | grep -o "^[0-9]\+$")
+
+       # command must be non-empty string with command to run
+       if [ -z "$command" ]; then
+               echo "first argument must be non-empty string"
+               return 1
+       fi
+
+       # accept only numbers as timeout
+       if [ -z "$timeout" ]; then
+               echo "only numbers as second argument"
+               return 1
+       fi
+
+       setsid sh -c "eval $command" 2>&1 &
+       local pid=$!
+       local pgid=$(ps -eo pid,pgid | grep $pid | sed 's/^.* //')
+       while [ $timeout -gt 0 ]; do
+               kill -s 0 $pid 2>/dev/null
+               if [ $? -ne 0 ]; then
+                       break
+               fi
+               timeout=$((timeout - 1))
+               sleep 1
+       done
+
+       local ret=0
+       if [ $timeout -le 0 ]; then
+               ret=128
+               kill -TERM -- -$pgid
+       fi
+
+       wait $pid
+       ret=$((ret | $?))
+
+       return $ret
+}
+
 # Check that test name is set
 if [ -z "$TCID" ]; then
        tst_brkm TBROK "TCID is not defined"
-- 
1.8.3.1


------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to