[LTP] [PATCH 1/1] tst_test.sh: Fix missing cleanup run from setup
Petr Vorel
pvorel@suse.cz
Fri Sep 30 13:24:34 CEST 2022
There was a regression on tests which don't use TST_ALL_FILESYSTEMS=1
when the cleanup function was not run when test called tst_brk in the
setup function. This broke DCCP tests on kernels without dccp_ipv6
module:
./dccp_ipsec_vti.sh; ltp_file -p esp -m tunnel -s 100:500:1000:R1000
dccp_ipsec_vti 1 TINFO: Test vti + IPsec[esp/tunnel]
...
netstress.c:970: TCONF: Failed to load dccp_ipv6 module
Summary:
passed 0
failed 0
broken 0
skipped 1
warnings 0
netstress.c:970: TCONF: Failed to load dccp_ipv6 module
dccp_ipsec_vti 1 TCONF: server failed
./dccp4_ipsec02 dccp_ipsec.sh -p ah -m transport -s 100:500:1000:R1000
...
dccp_ipsec_vti 1 TINFO: Test vti + IPsec[esp/tunnel]
dccp_ipsec_vti 1 TBROK: ip link add ltp_vti0 type vti local 10.0.0.2 remote 10.0.0.1 key 10 dev ltp_ns_veth2 failed: RTNETLINK answers: File exists
The reason was that cleanup function call was moved from _tst_do_exit()
to _tst_run_iterations() created for TST_ALL_FILESYSTEMS. But cleanup
function still needs to be run in _tst_do_exit() (but only) if it
weren't called before.
Fixes: 1f6bd6e66 ("tst_test.sh: Add $TST_ALL_FILESYSTEMS")
Reported-by: Martin Doucha <mdoucha@suse.cz>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
Hi,
It'd be nice to get this to the release.
FYI tested on following tests (probably not worth to add to git)
+ other tests in the shell API.
Kind regards,
Petr
=== /tmp/xx/tst_all_filesystems_cleanup.sh ===
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (c) 2022 Petr Vorel <pvorel@suse.cz>
TST_ALL_FILESYSTEMS=1
TST_MOUNT_DEVICE=1
TST_NEEDS_ROOT=1
TST_TESTFUNC=test
TST_SETUP=do_setup
TST_CLEANUP=do_cleanup
TST_CNT=2
do_setup()
{
tst_brk TCONF "required TCONF"
}
do_cleanup()
{
tst_res TINFO "run cleanup"
}
test1()
{
tst_res TPASS "device using filesystem"
}
test2()
{
EXPECT_PASS "grep -E '$TST_MNTPOINT ($TST_FS_TYPE|fuseblk)' /proc/mounts"
}
. tst_test.sh
tst_run
=== /tmp/xx/tst_net_cleanup.sh ===
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (c) 2022 Petr Vorel <pvorel@suse.cz>
TST_CLEANUP=do_cleanup
TST_TESTFUNC=test
do_cleanup()
{
tst_res TINFO "run cleanup"
}
test()
{
tst_res TPASS "pass"
}
. tst_net.sh
tst_run
=== /tmp/xx/tst_net_tconf_cleanup.sh ===
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (c) 2022 Petr Vorel <pvorel@suse.cz>
TST_SETUP=do_setup
TST_CLEANUP=do_cleanup
TST_TESTFUNC=test
do_setup()
{
tst_brk TCONF "required TCONF"
}
do_cleanup()
{
tst_res TINFO "run cleanup"
}
test()
{
tst_res TPASS "pass"
}
. tst_net.sh
tst_run
testcases/lib/tst_test.sh | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/testcases/lib/tst_test.sh b/testcases/lib/tst_test.sh
index 7ec744cac..033491b08 100644
--- a/testcases/lib/tst_test.sh
+++ b/testcases/lib/tst_test.sh
@@ -24,11 +24,25 @@ export TST_LIB_LOADED=1
trap "tst_brk TBROK 'test interrupted'" INT
trap "unset _tst_setup_timer_pid; tst_brk TBROK 'test terminated'" TERM
+_tst_do_cleanup()
+{
+ if [ -n "$TST_DO_CLEANUP" -a -n "$TST_CLEANUP" -a -z "$TST_NO_CLEANUP" ]; then
+ if command -v $TST_CLEANUP >/dev/null 2>/dev/null; then
+ $TST_CLEANUP
+ else
+ tst_res TWARN "TST_CLEANUP=$TST_CLEANUP declared, but function not defined (or cmd not found)"
+ fi
+ fi
+ TST_DO_CLEANUP=
+}
+
_tst_do_exit()
{
local ret=0
TST_DO_EXIT=1
+ _tst_do_cleanup
+
cd "$LTPROOT"
[ "$TST_MOUNT_FLAG" = 1 ] && tst_umount
@@ -785,13 +799,7 @@ _tst_run_iterations()
_tst_i=$((_tst_i-1))
done
- if [ -n "$TST_DO_CLEANUP" -a -n "$TST_CLEANUP" -a -z "$TST_NO_CLEANUP" ]; then
- if command -v $TST_CLEANUP >/dev/null 2>/dev/null; then
- $TST_CLEANUP
- else
- tst_res TWARN "TST_CLEANUP=$TST_CLEANUP declared, but function not defined (or cmd not found)"
- fi
- fi
+ _tst_do_cleanup
if [ "$TST_MOUNT_FLAG" = 1 ]; then
cd "$LTPROOT"
--
2.37.3
More information about the ltp
mailing list