diff options
author | Li Wang <liwang@redhat.com> | 2018-05-17 14:29:19 +0800 |
---|---|---|
committer | Petr Vorel <pvorel@suse.cz> | 2018-06-12 14:59:20 +0200 |
commit | cdc9b837facdf1b77b2a4ecfa4dd7317c9cfecd2 (patch) | |
tree | 95d8112f3a8982da6f081f307409eddc68c42568 /testcases/lib | |
parent | fee1d2efd289d30f8536c5955b9378f15446afa7 (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.sh | 43 |
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 |