All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t 1/9] lib/tests: Check that igt_assert forwards correctly through igt_fork
@ 2019-02-11 18:02 Daniel Vetter
  2019-02-11 18:02 ` [igt-dev] [PATCH i-g-t 2/9] lib/tests: make sure igt_skip in igt_fork is forbidden Daniel Vetter
                   ` (14 more replies)
  0 siblings, 15 replies; 34+ messages in thread
From: Daniel Vetter @ 2019-02-11 18:02 UTC (permalink / raw)
  To: IGT development; +Cc: Daniel Vetter

Note that without the igt_waitchildren nothing at all gets forwarded,
maybe we should check for left-behind children somewhere on subtest
exit.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 lib/tests/igt_fork.c  | 87 +++++++++++++++++++++++++++++++++++++++++++
 lib/tests/meson.build |  1 +
 2 files changed, 88 insertions(+)
 create mode 100644 lib/tests/igt_fork.c

diff --git a/lib/tests/igt_fork.c b/lib/tests/igt_fork.c
new file mode 100644
index 000000000000..d495c7815e06
--- /dev/null
+++ b/lib/tests/igt_fork.c
@@ -0,0 +1,87 @@
+/*
+ * Copyright © 2019 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+
+#include <assert.h>
+#include <errno.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include "igt_core.h"
+
+/*
+ * We need to hide assert from the cocci igt test refactor spatch.
+ *
+ * IMPORTANT: Test infrastructure tests are the only valid places where using
+ * assert is allowed.
+ */
+#define internal_assert assert
+
+char test[] = "test";
+char *argv_run[] = { test };
+
+static void igt_fork_vs_assert(void)
+{
+	igt_fork(i, 1) {
+		igt_assert(0);
+	}
+
+	igt_waitchildren();
+}
+
+static int do_fork(void (*test_to_run)(void))
+{
+	int pid, status;
+	int argc;
+
+	switch (pid = fork()) {
+	case -1:
+		internal_assert(0);
+	case 0:
+		argc = 1;
+		igt_simple_init(argc, argv_run);
+		test_to_run();
+		igt_exit();
+	default:
+		while (waitpid(pid, &status, 0) == -1 &&
+		       errno == EINTR)
+			;
+
+		if(WIFSIGNALED(status))
+			return WTERMSIG(status) + 128;
+
+		return WEXITSTATUS(status);
+	}
+}
+
+
+int main(int argc, char **argv)
+{
+	int ret;
+
+	ret = do_fork(igt_fork_vs_assert);
+	internal_assert(ret == IGT_EXIT_FAILURE);
+}
diff --git a/lib/tests/meson.build b/lib/tests/meson.build
index 55ab2b3d2dff..665ad4a0fbcc 100644
--- a/lib/tests/meson.build
+++ b/lib/tests/meson.build
@@ -1,5 +1,6 @@
 lib_tests = [
 	'igt_fork_helper',
+	'igt_fork',
 	'igt_list_only',
 	'igt_simulation',
 	'igt_stats',
-- 
2.20.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 34+ messages in thread
* [igt-dev] [PATCH i-g-t 1/9] lib/tests: Drop NIH exit status handling
@ 2019-02-13 10:35 Daniel Vetter
  2019-02-13 10:35 ` [igt-dev] [PATCH i-g-t 7/9] lib: Make sure we leak no child processes Daniel Vetter
  0 siblings, 1 reply; 34+ messages in thread
From: Daniel Vetter @ 2019-02-13 10:35 UTC (permalink / raw)
  To: IGT development; +Cc: Daniel Vetter

Spotted by Chris.

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 lib/tests/igt_assert.c     |  9 +++------
 lib/tests/igt_segfault.c   |  8 ++++----
 lib/tests/igt_simulation.c | 39 +++++++++++++++++++++++---------------
 3 files changed, 31 insertions(+), 25 deletions(-)

diff --git a/lib/tests/igt_assert.c b/lib/tests/igt_assert.c
index 306b1fb8533c..0082fda14851 100644
--- a/lib/tests/igt_assert.c
+++ b/lib/tests/igt_assert.c
@@ -79,10 +79,7 @@ static int do_fork(void)
 		       errno == EINTR)
 			;
 
-		if(WIFSIGNALED(status))
-			return WTERMSIG(status) + 128;
-
-		return WEXITSTATUS(status);
+		return status;
 	}
 }
 
@@ -161,7 +158,7 @@ igt_main
 	test_to_run = test_cmpint_negative;
 	ret = do_fork();
 	igt_subtest("igt_cmpint_negative")
-		internal_assert(ret == IGT_EXIT_FAILURE);
+		internal_assert(WEXITSTATUS(ret) == IGT_EXIT_FAILURE);
 
 	igt_subtest("igt_assert_fd")
 		test_fd();
@@ -169,5 +166,5 @@ igt_main
 	test_to_run = test_fd_negative;
 	ret = do_fork();
 	igt_subtest("igt_assert_fd_negative")
-		internal_assert(ret == IGT_EXIT_FAILURE);
+		internal_assert(WEXITSTATUS(ret) == IGT_EXIT_FAILURE);
 }
diff --git a/lib/tests/igt_segfault.c b/lib/tests/igt_segfault.c
index d07677dad0cb..86fee5354d67 100644
--- a/lib/tests/igt_segfault.c
+++ b/lib/tests/igt_segfault.c
@@ -116,20 +116,20 @@ int main(int argc, char **argv)
 	runc=false;
 	igt_info("Simple test.\n");
 	fflush(stdout);
-	internal_assert(do_fork() == SIGSEGV + 128);
+	internal_assert(WTERMSIG(do_fork()) == SIGSEGV);
 
 	/* Test crash in a single subtest is reported */
 	simple = false;
 	igt_info("Single subtest.\n");
 	fflush(stdout);
-	internal_assert(do_fork() == SIGSEGV + 128);
+	internal_assert(WTERMSIG(do_fork()) == SIGSEGV);
 
 	/* Test crash in a subtest following a pass is reported */
 	simple = false;
 	runa=true;
 	igt_info("Passing then crashing subtest.\n");
 	fflush(stdout);
-	internal_assert(do_fork() == SIGSEGV + 128);
+	internal_assert(WTERMSIG(do_fork()) == SIGSEGV);
 
 	/* Test crash in a subtest preceeding a pass is reported */
 	simple = false;
@@ -137,7 +137,7 @@ int main(int argc, char **argv)
 	runc=true;
 	igt_info("Crashing then passing subtest.\n");
 	fflush(stdout);
-	internal_assert(do_fork() == SIGSEGV + 128);
+	internal_assert(WTERMSIG(do_fork()) == SIGSEGV);
 
 	return 0;
 }
diff --git a/lib/tests/igt_simulation.c b/lib/tests/igt_simulation.c
index 32830ba7dde8..2efccac4e390 100644
--- a/lib/tests/igt_simulation.c
+++ b/lib/tests/igt_simulation.c
@@ -99,7 +99,7 @@ static int do_fork(void)
 
 		internal_assert(WIFEXITED(status));
 
-		return WEXITSTATUS(status);
+		return status;
 	}
 }
 
@@ -108,10 +108,10 @@ int main(int argc, char **argv)
 	/* simple tests */
 	simple = true;
 	internal_assert(setenv("INTEL_SIMULATION", "1", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SKIP);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SKIP);
 
 	internal_assert(setenv("INTEL_SIMULATION", "0", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SUCCESS);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SUCCESS);
 
 	/* subtests, list mode */
 	simple = false;
@@ -119,25 +119,29 @@ int main(int argc, char **argv)
 
 	in_fixture = false;
 	internal_assert(setenv("INTEL_SIMULATION", "1", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SUCCESS);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SUCCESS);
 
 	internal_assert(setenv("INTEL_SIMULATION", "0", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SUCCESS);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SUCCESS);
 
 	in_fixture = true;
 	internal_assert(setenv("INTEL_SIMULATION", "1", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SUCCESS);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SUCCESS);
+
 
 	internal_assert(setenv("INTEL_SIMULATION", "0", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SUCCESS);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SUCCESS);
+
 
 	in_fixture = false;
 	in_subtest = true;
 	internal_assert(setenv("INTEL_SIMULATION", "1", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SUCCESS);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SUCCESS);
+
 
 	internal_assert(setenv("INTEL_SIMULATION", "0", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SUCCESS);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SUCCESS);
+
 
 	/* subtest, run mode */
 	simple = false;
@@ -145,25 +149,30 @@ int main(int argc, char **argv)
 
 	in_fixture = false;
 	internal_assert(setenv("INTEL_SIMULATION", "1", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SKIP);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SKIP);
 
 	internal_assert(setenv("INTEL_SIMULATION", "0", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SUCCESS);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SUCCESS);
+
 
 	in_fixture = true;
 	internal_assert(setenv("INTEL_SIMULATION", "1", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SKIP);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SKIP);
+
 
 	internal_assert(setenv("INTEL_SIMULATION", "0", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SUCCESS);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SUCCESS);
+
 
 	in_fixture = false;
 	in_subtest = true;
 	internal_assert(setenv("INTEL_SIMULATION", "1", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SKIP);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SKIP);
+
 
 	internal_assert(setenv("INTEL_SIMULATION", "0", 1) == 0);
-	internal_assert(do_fork() == IGT_EXIT_SUCCESS);
+	internal_assert(WEXITSTATUS(do_fork()) == IGT_EXIT_SUCCESS);
+
 
 	return 0;
 }
-- 
2.20.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2019-02-13 10:36 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-11 18:02 [igt-dev] [PATCH i-g-t 1/9] lib/tests: Check that igt_assert forwards correctly through igt_fork Daniel Vetter
2019-02-11 18:02 ` [igt-dev] [PATCH i-g-t 2/9] lib/tests: make sure igt_skip in igt_fork is forbidden Daniel Vetter
2019-02-11 18:02 ` [igt-dev] [PATCH i-g-t 3/9] lib: Don't leak children in igt_waitchildren_timeout Daniel Vetter
2019-02-11 21:03   ` Chris Wilson
2019-02-11 22:38     ` Daniel Vetter
2019-02-11 23:01       ` Chris Wilson
2019-02-12  8:45         ` Daniel Vetter
2019-02-12 12:04   ` [igt-dev] [PATCH i-g-t] " Daniel Vetter
2019-02-12 12:09     ` Chris Wilson
2019-02-12 12:46       ` Daniel Vetter
2019-02-12 16:02     ` Daniel Vetter
2019-02-12 16:08       ` Chris Wilson
2019-02-13 10:20         ` Daniel Vetter
2019-02-11 18:02 ` [igt-dev] [PATCH i-g-t 4/9] tests/gem_exec_reuse: Don't leak the hang detector Daniel Vetter
2019-02-11 18:06   ` Chris Wilson
2019-02-11 18:02 ` [igt-dev] [PATCH i-g-t 5/9] tests/i915_missed_irq: Don't leave the hang detector hanging Daniel Vetter
2019-02-11 18:08   ` Chris Wilson
2019-02-11 18:02 ` [igt-dev] [PATCH i-g-t 6/9] lib/tests: make sure we catch igt_fork leaks Daniel Vetter
2019-02-12 16:00   ` [igt-dev] [PATCH i-g-t] " Daniel Vetter
2019-02-11 18:02 ` [igt-dev] [PATCH i-g-t 7/9] lib: Make sure we leak no child processes Daniel Vetter
2019-02-11 21:06   ` Chris Wilson
2019-02-11 22:43   ` [igt-dev] [PATCH i-g-t] " Daniel Vetter
2019-02-12 16:48     ` Chris Wilson
2019-02-11 18:02 ` [igt-dev] [PATCH i-g-t 8/9] lib: Drop igt_child_done Daniel Vetter
2019-02-11 18:02 ` [igt-dev] [PATCH i-g-t 9/9] lib: Drop IGT_EXIT_TIMEOUT Daniel Vetter
2019-02-11 18:27 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/9] lib/tests: Check that igt_assert forwards correctly through igt_fork Patchwork
2019-02-11 22:15 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2019-02-12 12:46 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/9] lib/tests: Check that igt_assert forwards correctly through igt_fork (rev2) Patchwork
2019-02-12 14:59 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2019-02-12 16:09 ` [igt-dev] ✗ Fi.CI.BAT: failure for series starting with [i-g-t,1/9] lib/tests: Check that igt_assert forwards correctly through igt_fork (rev4) Patchwork
2019-02-12 16:44 ` [igt-dev] [PATCH i-g-t 1/9] lib/tests: Check that igt_assert forwards correctly through igt_fork Chris Wilson
2019-02-13 10:00   ` Daniel Vetter
2019-02-12 17:51 ` [igt-dev] ✗ Fi.CI.BAT: failure for series starting with [i-g-t,1/9] lib/tests: Check that igt_assert forwards correctly through igt_fork (rev5) Patchwork
2019-02-13 10:35 [igt-dev] [PATCH i-g-t 1/9] lib/tests: Drop NIH exit status handling Daniel Vetter
2019-02-13 10:35 ` [igt-dev] [PATCH i-g-t 7/9] lib: Make sure we leak no child processes Daniel Vetter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.