* [PATCH i-g-t v2] lib/tests/igt_segfault.c Add unit test to test segfault handling @ 2015-05-27 9:34 Derek Morton 2015-05-27 12:19 ` Daniel Vetter 0 siblings, 1 reply; 3+ messages in thread From: Derek Morton @ 2015-05-27 9:34 UTC (permalink / raw) To: intel-gfx; +Cc: thomas.wood [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain; charset=y, Size: 5384 bytes --] 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@intel.com> --- 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@intel.com> + * + */ + +/* + * + * 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@intel.com> +# + +# +# 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" + fi +else + echo "$top_builddir/tests/igt_segfault is not executable" +fi + +exit 99 -- 1.9.1 [-- Attachment #2: Type: text/plain, Size: 159 bytes --] _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH i-g-t v2] lib/tests/igt_segfault.c Add unit test to test segfault handling 2015-05-27 9:34 [PATCH i-g-t v2] lib/tests/igt_segfault.c Add unit test to test segfault handling Derek Morton @ 2015-05-27 12:19 ` Daniel Vetter 2015-05-27 13:14 ` Morton, Derek J 0 siblings, 1 reply; 3+ messages in thread From: Daniel Vetter @ 2015-05-27 12:19 UTC (permalink / raw) To: Derek Morton; +Cc: intel-gfx, thomas.wood 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@intel.com> > --- > 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@intel.com> > + * > + */ > + > +/* > + * > + * 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@intel.com> > +# > + > +# > +# 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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH i-g-t v2] lib/tests/igt_segfault.c Add unit test to test segfault handling 2015-05-27 12:19 ` Daniel Vetter @ 2015-05-27 13:14 ` Morton, Derek J 0 siblings, 0 replies; 3+ messages in thread From: Morton, Derek J @ 2015-05-27 13:14 UTC (permalink / raw) To: Daniel Vetter; +Cc: intel-gfx@lists.freedesktop.org, Wood, Thomas >-----Original Message----- >From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of Daniel Vetter >Sent: Wednesday, May 27, 2015 1:20 PM >To: Morton, Derek J >Cc: intel-gfx@lists.freedesktop.org; Wood, Thomas >Subject: Re: [Intel-gfx] [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@intel.com> >> --- >> 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@intel.com> >> + * >> + */ >> + >> +/* >> + * >> + * 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@intel.com> >> +# >> + >> +# >> +# 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@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/intel-gfx > > >-- >Daniel Vetter >Software Engineer, Intel Corporation >http://blog.ffwll.ch > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-05-27 13:15 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-05-27 9:34 [PATCH i-g-t v2] lib/tests/igt_segfault.c Add unit test to test segfault handling Derek Morton 2015-05-27 12:19 ` Daniel Vetter 2015-05-27 13:14 ` Morton, Derek J
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox