From: Cyril Hrubis <chrubis@suse.cz>
To: Matus Marhefka <mmarhefk@redhat.com>
Cc: ltp-list@lists.sourceforge.net
Subject: Re: [LTP] [PATCH] testcases/lib/test.sh: added tst_timeout()
Date: Tue, 2 Dec 2014 13:38:40 +0100 [thread overview]
Message-ID: <20141202123840.GA16824@rei.suse.de> (raw)
In-Reply-To: <1417101031-5272-1-git-send-email-mmarhefk@redhat.com>
Hi!
> 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.
Nice idea, comments below.
> 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
This is bashism. The portable way to do this seems to be do
tr -d [:digit:] on the string and checking if result is empty or use
grep.
> + echo "only numbers as second argument"
> + return 1
> + fi
> +
> + if [ -z "$TMPDIR" ]; then
> + TMPDIR="/tmp"
> + fi
I guess that better solution would be to move this check from the
tst_tmpdir() after the LTPROOT check in the test.sh so that we have only
one copy of it.
> + local output=$(mktemp --tmpdir=$TMPDIR)
> + sh -c "eval $command" >$output 2>&1 &
Do we really need to redirect the output to the file here? Shouldn't
just redirecting stderr to stdout work?
> + 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
The usleep is bashism as well. What is not POSIX but tend to work is
sleep with a real number, i.e. sleep 0.1 but it does not seems to be
supported under BussyBox.
So we can either do the polling once a second or create our own
tst_usleep C source that calls usleep().
Ah and I've found that coreutils even includes timeout command that
can be used to fairly simplify the code.
Try:
timeout $timeout sh -c "eval $command"
echo $?
> + 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
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
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
next prev parent reply other threads:[~2014-12-02 12:38 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-27 15:10 [LTP] [PATCH] testcases/lib/test.sh: added tst_timeout() Matus Marhefka
2014-12-02 12:38 ` Cyril Hrubis [this message]
[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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141202123840.GA16824@rei.suse.de \
--to=chrubis@suse.cz \
--cc=ltp-list@lists.sourceforge.net \
--cc=mmarhefk@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.