[LTP] [PATCH 5/7] tst_test.sh: Introduce tst_set_timeout(timeout)

Li Wang liwang@redhat.com
Tue Mar 2 09:53:16 CET 2021


Hi Petr,

On Tue, Mar 2, 2021 at 6:02 AM Petr Vorel <pvorel@suse.cz> wrote:

> to sync with C API. This allows to setup timer after test has started.
> It's useful when test length depends on input decided during setup.
>
> Suggested-by: Cyril Hrubis <chrubis@suse.cz>
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
> New in v3.
>
>  doc/test-writing-guidelines.txt | 16 ++++++++++++----
>  testcases/lib/tst_test.sh       | 23 ++++++++++++++++++-----
>  2 files changed, 30 insertions(+), 9 deletions(-)
>
> diff --git a/doc/test-writing-guidelines.txt
> b/doc/test-writing-guidelines.txt
> index dd1911ceb..50696e14a 100644
> --- a/doc/test-writing-guidelines.txt
> +++ b/doc/test-writing-guidelines.txt
> @@ -2393,8 +2393,8 @@ tst_run
>  '$TST_TEST_DATA' can be used with '$TST_CNT'. If '$TST_TEST_DATA_IFS' not
> specified,
>  space as default value is used. Of course, it's possible to use separate
> functions.
>
> -2.3.2 Library environment variables for shell
> -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +2.3.2 Library environment variables and functions for shell
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
>  Similarily to the C library various checks and preparations can be
> requested
>  simply by setting right '$TST_NEEDS_FOO'.
> @@ -2415,11 +2415,19 @@ simply by setting right '$TST_NEEDS_FOO'.
>  | 'TST_TIMEOUT'      | Maximum timeout set for the test in sec. Must be
> int >= 1,
>                         or -1 (special value to disable timeout), default
> is 300.
>                         Variable is meant be set in tests, not by user.
> -                       It's equivalent of `tst_test.timeout` in C.
> +                       It's an equivalent of `tst_test.timeout` in C, can
> be set
> +                       via 'tst_set_timeout(timeout)' after test has
> started.
>
> +|=============================================================================
> +
> +[options="header"]
>
> +|=============================================================================
> +| Function name              | Action done
> +| 'tst_set_timeout(timeout)' | Maximum timeout set for the test in sec.
> +                               See 'TST_TIMEOUT' variable.
>
>  |=============================================================================
>
>  NOTE: Network tests (see testcases/network/README.md) use additional
> variables
> -in 'tst_net.sh'.
> +and functions in 'tst_net.sh'.
>
>  Checking for presence of commands
>  +++++++++++++++++++++++++++++++++
> diff --git a/testcases/lib/tst_test.sh b/testcases/lib/tst_test.sh
> index 69f007d89..58056e28b 100644
> --- a/testcases/lib/tst_test.sh
> +++ b/testcases/lib/tst_test.sh
> @@ -1,6 +1,6 @@
>  #!/bin/sh
>  # SPDX-License-Identifier: GPL-2.0-or-later
> -# Copyright (c) Linux Test Project, 2014-2020
> +# Copyright (c) Linux Test Project, 2014-2021
>  # Author: Cyril Hrubis <chrubis@suse.cz>
>  #
>  # LTP test library for shell.
> @@ -23,6 +23,14 @@ export TST_LIB_LOADED=1
>  # default trap function
>  trap "tst_brk TBROK 'test interrupted'" INT
>
> +_tst_cleanup_timer()
> +{
> +       if [ -n "$_tst_setup_timer_pid" ]; then
> +               kill $_tst_setup_timer_pid 2>/dev/null
> +               wait $_tst_setup_timer_pid 2>/dev/null
> +       fi
> +}
> +
>  _tst_do_exit()
>  {
>         local ret=0
> @@ -48,10 +56,7 @@ _tst_do_exit()
>                 [ "$TST_TMPDIR_RHOST" = 1 ] && tst_cleanup_rhost
>         fi
>
> -       if [ -n "$_tst_setup_timer_pid" ]; then
> -               kill $_tst_setup_timer_pid 2>/dev/null
> -               wait $_tst_setup_timer_pid 2>/dev/null
> -       fi
> +       _tst_cleanup_timer
>
>         if [ $TST_FAIL -gt 0 ]; then
>                 ret=$((ret|1))
> @@ -459,6 +464,8 @@ _tst_setup_timer()
>
>         tst_res TINFO "timeout per run is ${h}h ${m}m ${s}s"
>
> +       _tst_cleanup_timer
> +
>         sleep $sec && tst_res TBROK "test killed, timeout! If you are
> running on slow machine, try exporting LTP_TIMEOUT_MUL > 1" && kill -9
> -$pid &
>
>         _tst_setup_timer_pid=$!
> @@ -492,6 +499,12 @@ tst_require_module()
>         tst_res TINFO "Found module at '$TST_MODPATH'"
>  }
>
> +tst_set_timeout()
> +{
> +       TST_TIMEOUT="$1"
>

Not sure if we should check "$1" is valid again before using it.

I guess in most scenarios, the function is invoked by tests, so
just needs to guarantee $1 > $TST_TIMEOUT, otherwise, it
looks meaningless to reset TST_TIMEOUT?
(especially to avoid people set a smaller value by a typo)



> +       _tst_setup_timer
> +}
> +
>  tst_run()
>  {
>         local _tst_i
> --
> 2.30.1
>
>

-- 
Regards,
Li Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20210302/b2aa7a21/attachment.htm>


More information about the ltp mailing list