> > >-----Original Message----- >From: Daniel Vetter [mailto:daniel.vetter@xxxxxxxx] On Behalf Of Daniel Vetter >Sent: Monday, June 15, 2015 2:55 PM >To: Morton, Derek J >Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; Wood, Thomas; daniel@xxxxxxxx >Subject: Re: [PATCH i-g-t v4] lib/tests/igt_segfault Add unit test to test segfault handling > >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 > Hi Daniel, It was the same patch, I just reran git send-email with the correct encoding. //Derek >> >> //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 (c) 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