aboutsummaryrefslogtreecommitdiff
path: root/testcases/lib
diff options
context:
space:
mode:
authorLi Wang <liwang@redhat.com>2018-05-17 14:29:19 +0800
committerPetr Vorel <pvorel@suse.cz>2018-06-12 14:59:20 +0200
commitcdc9b837facdf1b77b2a4ecfa4dd7317c9cfecd2 (patch)
tree95d8112f3a8982da6f081f307409eddc68c42568 /testcases/lib
parentfee1d2efd289d30f8536c5955b9378f15446afa7 (diff)
tst_test.sh: achieve TST_RETRY_FUNC function in shell
The commit c2ce4df67d(include: add an exponential backoff macro for function retry) involves a new MACRO for function retry in C code, here achieve it in shell lib and gives a introduction in LTP documents. Signed-off-by: Li Wang <liwang@redhat.com> Acked-by: Petr Vorel <pvorel@suse.cz>
Diffstat (limited to 'testcases/lib')
-rw-r--r--testcases/lib/tst_test.sh43
1 files changed, 43 insertions, 0 deletions
diff --git a/testcases/lib/tst_test.sh b/testcases/lib/tst_test.sh
index 04f548621..0c98d5a75 100644
--- a/testcases/lib/tst_test.sh
+++ b/testcases/lib/tst_test.sh
@@ -154,6 +154,48 @@ 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
+
+ if [ $# -ne 3 ]; then
+ tst_brk TBROK "TST_RETRY_FN_EXP_BACKOFF expects 3 parameters"
+ fi
+
+ if ! tst_is_int "$tst_sec"; then
+ tst_brk TBROK "TST_RETRY_FN_EXP_BACKOFF: tst_sec must be integer ('$tst_sec')"
+ fi
+
+ 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\" timed out"
+ fi
+ done
+
+ return $tst_exp
+}
+
+TST_RETRY_FUNC()
+{
+ if [ $# -ne 2 ]; then
+ tst_brk TBROK "TST_RETRY_FUNC expects 2 parameters"
+ fi
+
+ TST_RETRY_FN_EXP_BACKOFF "$1" "$2" 1
+ return $2
+}
+
tst_umount()
{
local device="$1"
@@ -259,6 +301,7 @@ tst_run()
NEEDS_ROOT|NEEDS_TMPDIR|NEEDS_DEVICE|DEVICE);;
NEEDS_CMDS|NEEDS_MODULE|MODPATH|DATAROOT);;
IPV6|IPVER|TEST_DATA|TEST_DATA_IFS);;
+ RETRY_FUNC|RETRY_FN_EXP_BACKOFF);;
*) tst_res TWARN "Reserved variable TST_$_tst_i used!";;
esac
done