This is the same as the previously submitted patch except the text encoding 
should (hopefully) now be correct.

//Derek

>
>
>-----Original Message-----
>From: Morton, Derek J 
>Sent: Friday, June 12, 2015 11:05 AM
>To: [email protected]
>Cc: Wood, Thomas; [email protected]; Morton, Derek J
>Subject: [PATCH i-g-t v4] lib/tests/igt_segfault Add unit test to test 
>segfault handling
>
>Unit test to check a segfaulting subtest is handled correctly.
>
>v2: Added script to check subtest results
>v3: Removed script. Updated test to use fork to monitor return status.
>v4: Added igt_segfault to .gitignore
>
>Signed-off-by: Derek Morton <[email protected]>
>---
> lib/tests/.gitignore       |   1 +
> lib/tests/Makefile.sources |   1 +
> lib/tests/igt_segfault.c   | 139 +++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 141 insertions(+)
> create mode 100644 lib/tests/igt_segfault.c
>
>diff --git a/lib/tests/.gitignore b/lib/tests/.gitignore index 
>a745a23..729568b 100644
>--- a/lib/tests/.gitignore
>+++ b/lib/tests/.gitignore
>@@ -5,6 +5,7 @@ igt_list_only
> igt_no_exit
> igt_no_exit_list_only
> igt_no_subtest
>+igt_segfault
> igt_simple_test_subtests
> igt_simulation
> igt_timeout
>diff --git a/lib/tests/Makefile.sources b/lib/tests/Makefile.sources index 
>10e0617..5fa0b31 100644
>--- a/lib/tests/Makefile.sources
>+++ b/lib/tests/Makefile.sources
>@@ -8,6 +8,7 @@ check_PROGRAMS = \
>       igt_simple_test_subtests \
>       igt_timeout \
>       igt_invalid_subtest_name \
>+      igt_segfault \
>       $(NULL)
> 
> check_SCRIPTS = \
>diff --git a/lib/tests/igt_segfault.c b/lib/tests/igt_segfault.c new file mode 
>100644 index 0000000..b420b1a
>--- /dev/null
>+++ b/lib/tests/igt_segfault.c
>@@ -0,0 +1,139 @@
>+/*
>+ * Copyright © 2015 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.
>+ *
>+ * Authors:
>+ *    Derek Morton <[email protected]>
>+ *
>+ */
>+
>+/*
>+ * Testcase: Test the framework catches a segfault and returns an error.
>+ *
>+ * 1. Test a crashing simple test is reported.
>+ * 2. Test a crashing subtest is reported.
>+ * 3. Test a crashing subtest following a passing subtest is reported.
>+ * 4. Test a crashing subtest preceeding a passing subtest is reported.
>+ */
>+
>+#include <stdlib.h>
>+#include <sys/wait.h>
>+#include <sys/types.h>
>+#include <assert.h>
>+#include <errno.h>
>+
>+#include "drmtest.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
>+
>+bool simple;
>+bool runa;
>+bool runc;
>+char test[] = "test";
>+char *argv_run[] = { test };
>+
>+static int do_fork(void)
>+{
>+      int pid, status;
>+      int argc;
>+      void (*crashme)(void) = NULL;
>+
>+      switch (pid = fork()) {
>+      case -1:
>+              internal_assert(0);
>+      case 0:
>+              if (simple) {
>+                      argc = 1;
>+                      igt_simple_init(argc, argv_run);
>+                      crashme();
>+
>+                      igt_exit();
>+              } else {
>+
>+                      argc = 1;
>+                      igt_subtest_init(argc, argv_run);
>+
>+                      if(runa)
>+                              igt_subtest("A")
>+                                      ;
>+
>+                      igt_subtest("B")
>+                              crashme();
>+
>+                      if(runc)
>+                              igt_subtest("C")
>+                                      ;
>+
>+                      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)
>+{
>+      /* Test Crash in simple test is reported */
>+      simple = true;
>+      runa=false;
>+      runc=false;
>+      igt_info("Simple test.\n");
>+      fflush(stdout);
>+      internal_assert(do_fork() == SIGSEGV + 128);
>+
>+      /* Test crash in a single subtest is reported */
>+      simple = false;
>+      igt_info("Single subtest.\n");
>+      fflush(stdout);
>+      internal_assert(do_fork() == SIGSEGV + 128);
>+
>+      /* 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);
>+
>+      /* Test crash in a subtest preceeding a pass is reported */
>+      simple = false;
>+      runa=false;
>+      runc=true;
>+      igt_info("Crashing then passing subtest.\n");
>+      fflush(stdout);
>+      internal_assert(do_fork() == SIGSEGV + 128);
>+
>+      return 0;
>+}
>+
>--
>1.9.1
>
>
_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to