>-----Original Message----- >From: Daniel Vetter [mailto:daniel.vetter@xxxxxxxx] On Behalf Of Daniel Vetter >Sent: Wednesday, May 27, 2015 1:20 PM >To: Morton, Derek J >Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; Wood, Thomas >Subject: Re: [PATCH i-g-t v2] lib/tests/igt_segfault.c Add unit test to test segfault handling > >On Wed, May 27, 2015 at 10:34:26AM +0100, Derek Morton wrote: >> Unit test to check a segfaulting subtest is handled correctly. >> >> v2: Added script to check subtest results >> >> Signed-off-by: Derek Morton <derek.j.morton@xxxxxxxxx> >> --- >> lib/tests/Makefile.sources | 3 ++ >> lib/tests/igt_segfault.c | 57 ++++++++++++++++++++++++++++++++++++++ >> lib/tests/igt_segfault_check.sh | 61 >> +++++++++++++++++++++++++++++++++++++++++ >> 3 files changed, 121 insertions(+) >> create mode 100644 lib/tests/igt_segfault.c create mode 100755 >> lib/tests/igt_segfault_check.sh >> >> diff --git a/lib/tests/Makefile.sources b/lib/tests/Makefile.sources >> index 10e0617..5e601fe 100644 >> --- a/lib/tests/Makefile.sources >> +++ b/lib/tests/Makefile.sources >> @@ -8,10 +8,12 @@ check_PROGRAMS = \ >> igt_simple_test_subtests \ >> igt_timeout \ >> igt_invalid_subtest_name \ >> + igt_segfault \ >> $(NULL) >> >> check_SCRIPTS = \ >> igt_command_line.sh \ >> + igt_segfault_check.sh \ >> $(NULL) >> >> TESTS = \ >> @@ -29,4 +31,5 @@ XFAIL_TESTS = \ >> igt_simple_test_subtests \ >> igt_timeout \ >> igt_invalid_subtest_name \ >> + igt_segfault \ >> $(NULL) >> diff --git a/lib/tests/igt_segfault.c b/lib/tests/igt_segfault.c new >> file mode 100644 index 0000000..19bb3c2 >> --- /dev/null >> +++ b/lib/tests/igt_segfault.c >> @@ -0,0 +1,57 @@ >> +/* >> + * 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. >> + * >> + * The test consists of three subtests. The first and third should >> +pass >> + * while the second should cause a segfault. >> + * The overall result should be a failure with two subtests passing. >> + * >> + */ >> + >> +#include "drmtest.h" >> + >> +igt_main >> +{ >> + void (*crashme)(void) = NULL; >> + >> + igt_subtest("A") { >> + igt_info("Simple passing subtest.\n"); >> + } >> + >> + igt_subtest("B") { >> + igt_info("Cause a segfault.\n"); >> + crashme(); >> + } >> + >> + igt_subtest("C") { >> + igt_info("2nd Simple passing subtest.\n"); >> + } >> +} >> + >> diff --git a/lib/tests/igt_segfault_check.sh >> b/lib/tests/igt_segfault_check.sh new file mode 100755 index >> 0000000..89d0c94 >> --- /dev/null >> +++ b/lib/tests/igt_segfault_check.sh >> @@ -0,0 +1,61 @@ >> +#!/bin/bash >> +# >> +# 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 subtest results of igt_segfault. >> +# >> + >> +if [ -x "$top_builddir/tests/igt_segfault" ]; then >> + OP=$($top_builddir/tests/igt_segfault) >> + A_MATCH='Subtest A: SUCCESS' >> + B_MATCH='Subtest B: CRASH' >> + C_MATCH='Subtest C: SUCCESS' >> + RESULT='Failed : 1' >> + >> + if [[ $OP == *"$A_MATCH"* ]]; then >> + if [[ $OP == *"$B_MATCH"* ]]; then >> + if [[ $OP == *"$C_MATCH"* ]]; then >> + if [[ $OP == *"$RESULT"* ]]; then >> + echo "igt_segfault_check Passed" >> + exit 0 >> + else >> + echo "Overall result not Failed" >> + fi >> + else >> + echo "Subtest C not SUCCESS" >> + fi >> + else >> + echo "Subtest B not CRASH" >> + fi >> + else >> + echo "Subtest A not SUCCESS" > >See my other mail, imo that's too fragile: The precise lines we print to stdout aren't part of the testrunner spec, they're only meant for humans. >Can't we fake the coverage you want with something like this: > >testcase 1: >- fork a new process, make the subtest in there crash, check that the exit > code matches with the crash we expected. _exit(0) if that works out > (which bypasses all the library cleanup code and sanity checks) > >testcase 2: >- make one subtest crash, follow up by another subtest > which calls just calls _exit(0). > >Or have I lost track of what we want to test here already? >-Daniel I see igt_simulation uses fork to run several testcases. I will use that as a base. //Derek > >> + fi >> +else >> + echo "$top_builddir/tests/igt_segfault is not executable" >> +fi >> + >> +exit 99 >> -- >> 1.9.1 >> > >> _______________________________________________ >> Intel-gfx mailing list >> Intel-gfx@xxxxxxxxxxxxxxxxxxxxx >> http://lists.freedesktop.org/mailman/listinfo/intel-gfx > > >-- >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