[LTP] [PATCH 1/3] Add tst_validate_children() helper function
Martin Doucha
mdoucha@suse.cz
Tue Sep 13 17:19:05 CEST 2022
The function waits for given number of child processes and validates
that they have all exited without error.
Signed-off-by: Martin Doucha <mdoucha@suse.cz>
---
include/tst_test.h | 8 ++++++++
lib/tst_res.c | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/include/tst_test.h b/include/tst_test.h
index ac52f268c..69e649651 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -362,6 +362,14 @@ void tst_set_max_runtime(int max_runtime);
*/
char *tst_get_tmpdir(void);
+/*
+ * Validates exit status of child processes
+ */
+int tst_validate_children_(const char *file, const int lineno,
+ unsigned int count);
+#define tst_validate_children(child_count) \
+ tst_validate_children_(__FILE__, __LINE__, (child_count))
+
#ifndef TST_NO_DEFAULT_MAIN
static struct tst_test test;
diff --git a/lib/tst_res.c b/lib/tst_res.c
index e0896eb05..cac7484e7 100644
--- a/lib/tst_res.c
+++ b/lib/tst_res.c
@@ -613,3 +613,40 @@ void tst_require_root(void)
if (geteuid() != 0)
tst_brkm(TCONF, NULL, "Test needs to be run as root");
}
+
+int tst_validate_children_(const char *file, const int lineno,
+ unsigned int count)
+{
+ unsigned int i;
+ int status;
+
+ for (i = 0; i < count; i++) {
+ SAFE_WAITPID(NULL, -1, &status, 0);
+
+ if (WIFSIGNALED(status)) {
+ tst_res_(file, lineno, TFAIL,
+ "Child killed by signal %d %s",
+ WTERMSIG(status), tst_strsig(WTERMSIG(status)));
+ return 1;
+ }
+
+ if (WCOREDUMP(status)) {
+ tst_res_(file, lineno, TFAIL, "Child crashed");
+ return 1;
+ }
+
+ if (!WIFEXITED(status)) {
+ tst_res_(file, lineno, TFAIL,
+ "Unexpected child status");
+ return 1;
+ }
+
+ if (WEXITSTATUS(status)) {
+ tst_res_(file, lineno, TFAIL, "Child returned error %d",
+ WEXITSTATUS(status));
+ return 1;
+ }
+ }
+
+ return 0;
+}
--
2.37.2
More information about the ltp
mailing list