On Fri, Jun 12, 2015 at 10:08:43AM +0000, Morton, Derek J wrote: > This is the same as the previously submitted patch except the text > encoding should (hopefully) now be correct. Hm, I failed to push out my igt branch with the patch I applied before vacation, done that now. Is there any material difference? Or just the content-enconding thing? -Daniel > > //Derek > > > > > > >-----Original Message----- > >From: Morton, Derek J > >Sent: Friday, June 12, 2015 11:05 AM > >To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx > >Cc: Wood, Thomas; daniel@xxxxxxxx; 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 <derek.j.morton@xxxxxxxxx> > >--- > > 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 <derek.j.morton@xxxxxxxxx> > >+ * > >+ */ > >+ > >+/* > >+ * 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 > > > > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx