All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH] tst_test.sh: achieve TST_RETRY_FUNC function in shell
@ 2018-05-02 13:29 Li Wang
  2018-05-02 16:36 ` Petr Vorel
  0 siblings, 1 reply; 3+ messages in thread
From: Li Wang @ 2018-05-02 13:29 UTC (permalink / raw)
  To: ltp

Signed-off-by: Li Wang <liwang@redhat.com>
---
 doc/test-writing-guidelines.txt | 20 ++++++++++++++++++++
 testcases/lib/tst_test.sh       | 30 ++++++++++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/doc/test-writing-guidelines.txt b/doc/test-writing-guidelines.txt
index cbbfe6c..318eca6 100644
--- a/doc/test-writing-guidelines.txt
+++ b/doc/test-writing-guidelines.txt
@@ -1640,6 +1640,26 @@ that can sleep for defined amount of seconds, milliseconds or microseconds.
 tst_sleep 100ms
 -------------------------------------------------------------------------------
 
+Retry a function in limited time
+++++++++++++++++++++++++++++++++
+
+Sometimes LTP test needs retrying a function for many times to get success.
+This achievement makes that possible via keeping it retrying if the return
+value of the function is NOT as we expected. After exceeding one second, the
+test will break from the retries immediately.
+
+[source,c]
+-------------------------------------------------------------------------------
+# retry function in 1 second
+TST_RETRY_FUNC(FUNC, ERET)
+-------------------------------------------------------------------------------
+
+[source,sh]
+-------------------------------------------------------------------------------
+# retry function in 1 second
+TST_RETRY_FUNC "FUNC arg1 arg2" "ERET"
+-------------------------------------------------------------------------------
+
 Checking for integers
 +++++++++++++++++++++
 
diff --git a/testcases/lib/tst_test.sh b/testcases/lib/tst_test.sh
index 8d49d34..d03ed04 100644
--- a/testcases/lib/tst_test.sh
+++ b/testcases/lib/tst_test.sh
@@ -154,6 +154,36 @@ EXPECT_FAIL()
 	fi
 }
 
+TST_RETRY_FN_EXP_BACKOFF()
+{
+	local tst_fun=$1
+	local tst_exp=$2
+	local tst_sec=$(expr $3 \* 1000000)
+	local tst_delay=1
+
+	while true; do
+		$tst_fun
+		if [ "$?" == "$tst_exp" ]; then
+			break
+		fi
+
+		if [ $tst_delay -lt $tst_sec ]; then
+			tst_sleep ${tst_delay}us
+			tst_delay=$((tst_delay*2))
+		else
+			tst_brk TBROK "$tst_fun failed"
+		fi
+	done
+
+	return $tst_exp
+}
+
+TST_RETRY_FUNC()
+{
+	TST_RETRY_FN_EXP_BACKOFF "$1" "$2" 1
+	return $2
+}
+
 tst_umount()
 {
 	local device="$1"
-- 
2.9.5


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

* [LTP] [PATCH] tst_test.sh: achieve TST_RETRY_FUNC function in shell
  2018-05-02 13:29 [LTP] [PATCH] tst_test.sh: achieve TST_RETRY_FUNC function in shell Li Wang
@ 2018-05-02 16:36 ` Petr Vorel
  2018-05-03  2:56   ` Li Wang
  0 siblings, 1 reply; 3+ messages in thread
From: Petr Vorel @ 2018-05-02 16:36 UTC (permalink / raw)
  To: ltp

Hi Li,

nice feature, thanks for adding it.
1 bashism to be fixed + minor issues bellow.


> Signed-off-by: Li Wang <liwang@redhat.com>
Tested-by: Petr Vorel <pvorel@suse.cz>

> ---
>  doc/test-writing-guidelines.txt | 20 ++++++++++++++++++++
>  testcases/lib/tst_test.sh       | 30 ++++++++++++++++++++++++++++++
>  2 files changed, 50 insertions(+)

> diff --git a/doc/test-writing-guidelines.txt b/doc/test-writing-guidelines.txt
> index cbbfe6c..318eca6 100644
> --- a/doc/test-writing-guidelines.txt
> +++ b/doc/test-writing-guidelines.txt
> @@ -1640,6 +1640,26 @@ that can sleep for defined amount of seconds, milliseconds or microseconds.
>  tst_sleep 100ms
>  -------------------------------------------------------------------------------

> +Retry a function in limited time
> +++++++++++++++++++++++++++++++++
> +
> +Sometimes LTP test needs retrying a function for many times to get success.
> +This achievement makes that possible via keeping it retrying if the return
> +value of the function is NOT as we expected. After exceeding one second, the
> +test will break from the retries immediately.
> +
> +[source,c]
> +-------------------------------------------------------------------------------
> +# retry function in 1 second
> +TST_RETRY_FUNC(FUNC, ERET)
C docs should have been added in c2ce4df67d. Maybe you could just mention this in commit
message.

> +-------------------------------------------------------------------------------
> +
> +[source,sh]
> +-------------------------------------------------------------------------------
> +# retry function in 1 second
> +TST_RETRY_FUNC "FUNC arg1 arg2" "ERET"
Maybe EXPECTED_RET to be clearer?

> +-------------------------------------------------------------------------------
> +
>  Checking for integers
>  +++++++++++++++++++++

> +TST_RETRY_FN_EXP_BACKOFF()
> +{
> +	local tst_fun=$1
> +	local tst_exp=$2
I'd check number of params ($#) and tst_brk to warn user about improper usage.
And mention TST_RETRY_FN_EXP_BACKOFF() in docs?

> +	local tst_sec=$(expr $3 \* 1000000)
> +	local tst_delay=1
> +
> +	while true; do
> +		$tst_fun
> +		if [ "$?" == "$tst_exp" ]; then
                  ^
This is bashism, it's broken in dash. Please use single equal sign:
		if [ "$?" = "$tst_exp" ]; then


> +			break
> +		fi
> +
> +		if [ $tst_delay -lt $tst_sec ]; then
> +			tst_sleep ${tst_delay}us
> +			tst_delay=$((tst_delay*2))
> +		else
> +			tst_brk TBROK "$tst_fun failed"
> +		fi
> +	done
> +
> +	return $tst_exp
> +}
> +
> +TST_RETRY_FUNC()
> +{
> +	TST_RETRY_FN_EXP_BACKOFF "$1" "$2" 1
> +	return $2
> +}
> +
>  tst_umount()
>  {
>  	local device="$1"


Kind regards,
Petr

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

* [LTP] [PATCH] tst_test.sh: achieve TST_RETRY_FUNC function in shell
  2018-05-02 16:36 ` Petr Vorel
@ 2018-05-03  2:56   ` Li Wang
  0 siblings, 0 replies; 3+ messages in thread
From: Li Wang @ 2018-05-03  2:56 UTC (permalink / raw)
  To: ltp

Petr Vorel <pvorel@suse.cz> wrote:

Hi Li,
>
> nice feature, thanks for adding it.
> 1 bashism to be fixed + minor issues bellow.
>

​Hi Petr,​

​Thanks for your testing, I'm glad to accept your comments all below.​
​Patch V2 is coming soon...​


-- 
Li Wang
liwang@redhat.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20180503/86b9dfd3/attachment.html>

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

end of thread, other threads:[~2018-05-03  2:56 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-02 13:29 [LTP] [PATCH] tst_test.sh: achieve TST_RETRY_FUNC function in shell Li Wang
2018-05-02 16:36 ` Petr Vorel
2018-05-03  2:56   ` Li Wang

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.