tst_test: Add test variants
The test variants are intended for running the test more than once for a
different settings. The indended purpose is to run tests for both libc
wrapper and raw syscall as well as for different syscall variants.
The commit itself adds a test_variant integer that, if set, denotes
number of test variants. The test is then forked and executed
test_variant times each time with different value in global tst_variant
variable.
Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
Reviewed-by: Steve Muckle <smuckle@google.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Acked-by: Jan Stancek <jstancek@redhat.com>
diff --git a/lib/tst_test.c b/lib/tst_test.c
index ba5eab0..2d88adb 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -1180,9 +1180,12 @@
return ret;
}
+unsigned int tst_variant;
+
void tst_run_tcases(int argc, char *argv[], struct tst_test *self)
{
- int ret;
+ int ret = 0;
+ unsigned int test_variants = 1;
lib_pid = getpid();
tst_test = self;
@@ -1194,11 +1197,20 @@
SAFE_SIGNAL(SIGALRM, alarm_handler);
SAFE_SIGNAL(SIGUSR1, heartbeat_handler);
- if (tst_test->all_filesystems)
- ret = run_tcases_per_fs();
- else
- ret = fork_testrun();
+ if (tst_test->test_variants)
+ test_variants = tst_test->test_variants;
+ for (tst_variant = 0; tst_variant < test_variants; tst_variant++) {
+ if (tst_test->all_filesystems)
+ ret |= run_tcases_per_fs();
+ else
+ ret |= fork_testrun();
+
+ if (ret & ~(TCONF))
+ goto exit;
+ }
+
+exit:
do_exit(ret);
}