@@ -17,10 +17,6 @@ export TST_ITERATIONS=1
17
17
export TST_TMPDIR_RHOST=0
18
18
export TST_LIB_LOADED=1
19
19
20
- if [ -z " $TST_FS_TYPE " ]; then
21
- export TST_FS_TYPE=" ${LTP_DEV_FS_TYPE:- ext2} "
22
- fi
23
-
24
20
. tst_ansi_color.sh
25
21
. tst_security.sh
26
22
@@ -33,17 +29,7 @@ _tst_do_exit()
33
29
local ret=0
34
30
TST_DO_EXIT=1
35
31
36
- if [ -n " $TST_DO_CLEANUP " -a -n " $TST_CLEANUP " -a -z " $TST_NO_CLEANUP " ]; then
37
- if command -v $TST_CLEANUP > /dev/null 2> /dev/null; then
38
- $TST_CLEANUP
39
- else
40
- tst_res TWARN " TST_CLEANUP=$TST_CLEANUP declared, but function not defined (or cmd not found)"
41
- fi
42
- fi
43
-
44
- if [ " $TST_MOUNT_FLAG " = 1 ]; then
45
- tst_umount
46
- fi
32
+ [ " $TST_MOUNT_FLAG " = 1 ] && tst_umount
47
33
48
34
if [ " $TST_NEEDS_DEVICE " = 1 -a " $TST_DEVICE_FLAG " = 1 ]; then
49
35
if ! tst_device release " $TST_DEVICE " ; then
@@ -289,7 +275,7 @@ TST_CHECKPOINT_WAKE_AND_WAIT()
289
275
290
276
tst_mount ()
291
277
{
292
- local mnt_opt mnt_err
278
+ local mnt_opt mnt_err mnt_real
293
279
294
280
if [ -n " $TST_FS_TYPE " ]; then
295
281
mnt_opt=" -t $TST_FS_TYPE "
@@ -480,6 +466,7 @@ LTPROOT Prefix for installed LTP (default: /opt/ltp)
480
466
LTP_COLORIZE_OUTPUT Force colorized output behaviour (y/1 always, n/0: never)
481
467
LTP_DEV Path to the block device to be used (for .needs_device)
482
468
LTP_DEV_FS_TYPE Filesystem used for testing (default: ext2)
469
+ LTP_SINGLE_FS_TYPE Testing only - specifies filesystem instead all supported (for TST_ALL_FILESYSTEMS=1)
483
470
LTP_TIMEOUT_MUL Timeout multiplier (must be a number >=1, ceiled to int)
484
471
TMPDIR Base directory for template directory (for .needs_tmpdir, default: /tmp)
485
472
EOF
@@ -621,10 +608,41 @@ _tst_init_checkpoints()
621
608
export LTP_IPC_PATH
622
609
}
623
610
611
+ _prepare_device ()
612
+ {
613
+ if [ " $TST_FORMAT_DEVICE " = 1 ]; then
614
+ tst_device clear " $TST_DEVICE "
615
+ tst_mkfs $TST_FS_TYPE $TST_DEV_FS_OPTS $TST_DEVICE $TST_DEV_EXTRA_OPTS
616
+ fi
617
+
618
+ if [ " $TST_MOUNT_DEVICE " = 1 ]; then
619
+ tst_mount
620
+ TST_MOUNT_FLAG=1
621
+ fi
622
+ }
623
+
624
+ _tst_run_tcases_per_fs ()
625
+ {
626
+ local fs
627
+ local filesystems
628
+
629
+ filesystems=" $( tst_supported_fs -s " $TST_SKIP_FILESYSTEMS " ) "
630
+ if [ $? -ne 0 ]; then
631
+ tst_brk TCONF " There are no supported filesystems or all skipped"
632
+ fi
633
+
634
+ for fs in $filesystems ; do
635
+ tst_res TINFO " === Testing on $fs ==="
636
+ TST_FS_TYPE=" $fs "
637
+ _tst_run_iterations
638
+ done
639
+ }
640
+
624
641
tst_run ()
625
642
{
626
643
local _tst_i
627
644
local _tst_data
645
+ local _tst_fs
628
646
local _tst_max
629
647
local _tst_name
630
648
local _tst_pattern=' [=' \' ' "} \t\/:`$\;].*'
@@ -633,7 +651,7 @@ tst_run()
633
651
if [ -n " $TST_TEST_PATH " ]; then
634
652
for _tst_i in $( grep ' ^[^#]*\bTST_' " $TST_TEST_PATH " | sed " s/.*TST_//; s/$_tst_pattern //" ) ; do
635
653
case " $_tst_i " in
636
- DISABLE_APPARMOR|DISABLE_SELINUX);;
654
+ ALL_FILESYSTEMS| DISABLE_APPARMOR|DISABLE_SELINUX);;
637
655
SETUP|CLEANUP|TESTFUNC|ID|CNT|MIN_KVER);;
638
656
OPTS|USAGE|PARSE_ARGS|POS_ARGS);;
639
657
NEEDS_ROOT|NEEDS_TMPDIR|TMPDIR|NEEDS_DEVICE|DEVICE);;
@@ -679,16 +697,32 @@ tst_run()
679
697
tst_brk TCONF " test requires kernel $TST_MIN_KVER +"
680
698
fi
681
699
682
- tst_supported_fs -s " $TST_SKIP_FILESYSTEMS " $TST_FS_TYPE
683
- ret=$?
684
- [ $ret -ne 0 ] && return $ret
685
-
686
- _tst_setup_timer
700
+ [ -n " $TST_NEEDS_MODULE " ] && tst_require_module " $TST_NEEDS_MODULE "
687
701
688
702
[ " $TST_MOUNT_DEVICE " = 1 ] && TST_FORMAT_DEVICE=1
689
- [ " $TST_FORMAT_DEVICE " = 1 ] && TST_NEEDS_DEVICE=1
703
+ [ " $TST_FORMAT_DEVICE " = 1 -o " $TST_ALL_FILESYSTEMS " = 1 ] && TST_NEEDS_DEVICE=1
690
704
[ " $TST_NEEDS_DEVICE " = 1 ] && TST_NEEDS_TMPDIR=1
691
705
706
+ if [ " $TST_ALL_FILESYSTEMS " != 1 ]; then
707
+ if ! tst_supported_fs -s " $TST_SKIP_FILESYSTEMS " $TST_FS_TYPE > /dev/null; then
708
+ tst_brk TCONF " $TST_FS_TYPE is skipped by the test"
709
+ fi
710
+ fi
711
+
712
+ if [ " $TST_NEEDS_DEVICE " = 1 ]; then
713
+ TST_DEVICE=$( tst_device acquire)
714
+
715
+ if [ ! -b " $TST_DEVICE " -o $? -ne 0 ]; then
716
+ unset TST_DEVICE
717
+ tst_brk TBROK " Failed to acquire device"
718
+ fi
719
+ TST_DEVICE_FLAG=1
720
+
721
+ if [ -z " $TST_FS_TYPE " ]; then
722
+ export TST_FS_TYPE=" ${LTP_DEV_FS_TYPE:- ext2} "
723
+ fi
724
+ fi
725
+
692
726
if [ " $TST_NEEDS_TMPDIR " = 1 ]; then
693
727
if [ -z " $TMPDIR " ]; then
694
728
export TMPDIR=" /tmp"
@@ -699,35 +733,32 @@ tst_run()
699
733
chmod 777 " $TST_TMPDIR "
700
734
701
735
TST_STARTWD=$( pwd)
702
-
703
736
cd " $TST_TMPDIR "
704
737
fi
705
738
706
- TST_MNTPOINT=" ${TST_MNTPOINT:- $PWD / mntpoint} "
707
- if [ " $TST_NEEDS_DEVICE " = 1 ]; then
708
-
709
- TST_DEVICE=$( tst_device acquire)
739
+ [ -n " $TST_NEEDS_CHECKPOINTS " ] && _tst_init_checkpoints
710
740
711
- if [ ! -b " $TST_DEVICE " -o $? -ne 0 ]; then
712
- unset TST_DEVICE
713
- tst_brk TBROK " Failed to acquire device"
714
- fi
741
+ TST_MNTPOINT=" ${TST_MNTPOINT:- $PWD / mntpoint} "
715
742
716
- TST_DEVICE_FLAG=1
743
+ if [ " $TST_ALL_FILESYSTEMS " = 1 ]; then
744
+ _tst_run_tcases_per_fs
745
+ else
746
+ _tst_run_iterations
717
747
fi
718
748
719
- [ -n " $TST_NEEDS_MODULE " ] && tst_require_module " $TST_NEEDS_MODULE "
749
+ _tst_do_exit
750
+ }
720
751
721
- if [ " $TST_FORMAT_DEVICE " = 1 ]; then
722
- tst_mkfs $TST_FS_TYPE $TST_DEV_FS_OPTS $TST_DEVICE $TST_DEV_EXTRA_OPTS
723
- fi
752
+ _tst_run_iterations ()
753
+ {
754
+ local _tst_i=$TST_ITERATIONS
755
+ local _tst_j
724
756
725
- if [ " $TST_MOUNT_DEVICE " = 1 ]; then
726
- tst_mount
727
- TST_MOUNT_FLAG=1
728
- fi
757
+ [ " $TST_NEEDS_TMPDIR " = 1 ] && cd " $TST_TMPDIR "
729
758
730
- [ -n " $TST_NEEDS_CHECKPOINTS " ] && _tst_init_checkpoints
759
+ _prepare_device
760
+
761
+ _tst_setup_timer
731
762
732
763
if [ -n " $TST_SETUP " ]; then
733
764
if command -v $TST_SETUP > /dev/null 2> /dev/null; then
@@ -739,20 +770,32 @@ tst_run()
739
770
fi
740
771
741
772
# TODO check that test reports some results for each test function call
742
- while [ $TST_ITERATIONS -gt 0 ]; do
773
+ while [ $_tst_i -gt 0 ]; do
743
774
if [ -n " $TST_TEST_DATA " ]; then
744
775
tst_require_cmds cut tr wc
745
776
_tst_max=$(( $(echo $TST_TEST_DATA | tr - cd "$TST_TEST_DATA_IFS " | wc - c) + 1 ))
746
- for _tst_i in $( seq $_tst_max ) ; do
747
- _tst_data=" $( echo " $TST_TEST_DATA " | cut -d" $TST_TEST_DATA_IFS " -f$_tst_i ) "
777
+ for _tst_j in $( seq $_tst_max ) ; do
778
+ _tst_data=" $( echo " $TST_TEST_DATA " | cut -d" $TST_TEST_DATA_IFS " -f$_tst_j ) "
748
779
_tst_run_tests " $_tst_data "
749
780
done
750
781
else
751
782
_tst_run_tests
752
783
fi
753
- TST_ITERATIONS =$(( TST_ITERATIONS - 1 ))
784
+ _tst_i =$(( _tst_i - 1 ))
754
785
done
755
- _tst_do_exit
786
+
787
+ if [ -n " $TST_DO_CLEANUP " -a -n " $TST_CLEANUP " -a -z " $TST_NO_CLEANUP " ]; then
788
+ if command -v $TST_CLEANUP > /dev/null 2> /dev/null; then
789
+ $TST_CLEANUP
790
+ else
791
+ tst_res TWARN " TST_CLEANUP=$TST_CLEANUP declared, but function not defined (or cmd not found)"
792
+ fi
793
+ fi
794
+
795
+ if [ " $TST_MOUNT_FLAG " = 1 ]; then
796
+ tst_umount
797
+ TST_MOUNT_FLAG=
798
+ fi
756
799
}
757
800
758
801
_tst_run_tests ()
0 commit comments