public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH] testcases/lib/test.sh: added tst_timeout()
@ 2014-11-27 15:10 Matus Marhefka
  2014-12-02 12:38 ` Cyril Hrubis
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Matus Marhefka @ 2014-11-27 15:10 UTC (permalink / raw)
  To: ltp-list

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 <mmarhefk@redhat.com>
---
 testcases/lib/test.sh | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git a/testcases/lib/test.sh b/testcases/lib/test.sh
index eecbfba..1c5bdf2 100644
--- a/testcases/lib/test.sh
+++ b/testcases/lib/test.sh
@@ -129,6 +129,60 @@ 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=$2
+	local usleep_time=100000
+
+	# 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
+	re='^[0-9]+$'
+	if ! [[ $timeout =~ $re ]]; then
+		echo "only numbers as second argument"
+		return 1
+	fi
+
+	if [ -z "$TMPDIR" ]; then
+		TMPDIR="/tmp"
+	fi
+
+	local output=$(mktemp --tmpdir=$TMPDIR)
+	sh -c "eval $command" >$output 2>&1 &
+	local pid=$!
+	timeout=$((timeout*1000000))
+	while [ $timeout -gt 0 ]; do
+		kill -s 0 $pid 2>/dev/null
+		if [ $? -ne 0 ]; then
+			break
+		fi
+		timeout=$((timeout - usleep_time))
+		usleep $usleep_time
+	done
+
+	local ret=0
+	if [ $timeout -le 0 ]; then
+		ret=128
+		kill -9 $pid
+	fi
+
+	wait $pid
+	ret=$((ret | $?))
+
+	cat $output
+	rm -f $output
+
+	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=157005751&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-01-05 14:04 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-27 15:10 [LTP] [PATCH] testcases/lib/test.sh: added tst_timeout() Matus Marhefka
2014-12-02 12:38 ` Cyril Hrubis
     [not found]   ` <1961735972.12031389.1417528277602.JavaMail.zimbra@redhat.com>
2014-12-02 14:04     ` Cyril Hrubis
     [not found]   ` <54803C62.30803@redhat.com>
2014-12-04 11:23     ` Cyril Hrubis
2014-12-04 11:03 ` [LTP] [PATCH v2] " Matus Marhefka
2014-12-18 13:30   ` Cyril Hrubis
     [not found] ` <1418987492-17553-1-git-send-email-mmarhefk@redhat.com>
2014-12-22  0:53   ` [LTP] [PATCH v3] " Wanlong Gao
2015-01-05 14:03   ` Cyril Hrubis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox