[Intel-gfx] [PATCH i-g-t v2] lib/tests/igt_segfault.c Add unit test to test segfault handling
Morton, Derek J
derek.j.morton at intel.com
Wed May 27 06:14:21 PDT 2015
>-----Original Message-----
>From: Daniel Vetter [mailto:daniel.vetter at ffwll.ch] On Behalf Of Daniel Vetter
>Sent: Wednesday, May 27, 2015 1:20 PM
>To: Morton, Derek J
>Cc: intel-gfx at 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 at 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 at 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 at 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 at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>
>--
>Daniel Vetter
>Software Engineer, Intel Corporation
>http://blog.ffwll.ch
>
More information about the Intel-gfx
mailing list