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 © 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 © 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 > + 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