[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