[igt-dev] [PATCH i-g-t 2/5] lib/tests: add internal_assert_wexited/wsignaled

Chris Wilson chris at chris-wilson.co.uk
Tue Feb 19 08:52:48 UTC 2019


Quoting Daniel Vetter (2019-02-19 07:57:13)
> And convert everything over.
> 
> igt_segfault needed a bit of care to differentiate between a real
> death-by-signal and igt_exit mapping a child process signal death to
> an exit code.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
>  lib/tests/igt_assert.c       |  4 ++--
>  lib/tests/igt_exit_handler.c |  6 +++---
>  lib/tests/igt_fork.c         | 10 +++++-----
>  lib/tests/igt_segfault.c     | 14 +++++---------
>  lib/tests/igt_tests_common.h | 11 +++++++++++
>  5 files changed, 26 insertions(+), 19 deletions(-)
> 
> diff --git a/lib/tests/igt_assert.c b/lib/tests/igt_assert.c
> index e3c1ec49daf2..632e15978978 100644
> --- a/lib/tests/igt_assert.c
> +++ b/lib/tests/igt_assert.c
> @@ -151,7 +151,7 @@ igt_main
>         test_to_run = test_cmpint_negative;
>         ret = do_fork();
>         igt_subtest("igt_cmpint_negative")
> -               internal_assert(WEXITSTATUS(ret) == IGT_EXIT_FAILURE);
> +               internal_assert_wexited(ret, IGT_EXIT_FAILURE);
>  
>         igt_subtest("igt_assert_fd")
>                 test_fd();
> @@ -159,5 +159,5 @@ igt_main
>         test_to_run = test_fd_negative;
>         ret = do_fork();
>         igt_subtest("igt_assert_fd_negative")
> -               internal_assert(WEXITSTATUS(ret) == IGT_EXIT_FAILURE);
> +               internal_assert_wexited(ret, IGT_EXIT_FAILURE);

Ok, exit -> exit.

>  }
> diff --git a/lib/tests/igt_exit_handler.c b/lib/tests/igt_exit_handler.c
> index 7546fde6d6f8..f8a747862c01 100644
> --- a/lib/tests/igt_exit_handler.c
> +++ b/lib/tests/igt_exit_handler.c
> @@ -118,11 +118,11 @@ int main(int argc, char **argv)
>         internal_assert(testfunc(NORMAL) == 0);
>  
>         status = testfunc(FAIL);
> -       assert(WIFEXITED(status) && WEXITSTATUS(status) == 1);
> +       internal_assert_wexited(status, 1);
>  
>         status = testfunc(SKIP);
> -       assert(WIFEXITED(status) && WEXITSTATUS(status) == IGT_EXIT_SKIP);
> +       internal_assert_wexited(status, IGT_EXIT_SKIP);
>  
>         status = testfunc(SIG);
> -       assert(WIFSIGNALED(status) && WTERMSIG(status) == SIGTERM);
> +       internal_assert_wsignaled(status, SIGTERM);
>  }

Ok.

> diff --git a/lib/tests/igt_fork.c b/lib/tests/igt_fork.c
> index 38c55d11f7ec..100031207461 100644
> --- a/lib/tests/igt_fork.c
> +++ b/lib/tests/igt_fork.c
> @@ -113,21 +113,21 @@ int main(int argc, char **argv)
>  
>         /* check that igt_assert is forwarded */
>         ret = do_fork(igt_fork_vs_assert);
> -       internal_assert(WEXITSTATUS(ret) == IGT_EXIT_FAILURE);
> +       internal_assert_wexited(ret, IGT_EXIT_FAILURE);
>  
>         /* check that igt_skip within a fork blows up */
>         ret = do_fork(igt_fork_vs_skip);
> -       internal_assert(WEXITSTATUS(ret) == SIGABRT + 128);
> +       internal_assert_wexited(ret, SIGABRT + 128);
>  
>         /* check that failure to clean up fails */
>         ret = do_fork(igt_fork_leak);
> -       internal_assert(WTERMSIG(ret) == SIGABRT);
> +       internal_assert_wsignaled(ret, SIGABRT);
>  
>         /* check that igt_waitchildren_timeout cleans up*/
>         ret = do_fork(igt_fork_timeout_leak);
> -       internal_assert(WEXITSTATUS(ret) == SIGKILL + 128);
> +       internal_assert_wexited(ret, SIGKILL + 128);
>  
>         /* check that any other process leaks are caught*/
>         ret = do_fork(plain_fork_leak);
> -       internal_assert(WTERMSIG(ret) == SIGABRT);
> +       internal_assert_wsignaled(ret, SIGABRT);
>  }

Ok.

> diff --git a/lib/tests/igt_segfault.c b/lib/tests/igt_segfault.c
> index bfbbff564fac..2a24531aaa8c 100644
> --- a/lib/tests/igt_segfault.c
> +++ b/lib/tests/igt_segfault.c
> @@ -94,10 +94,7 @@ static int do_fork(void)
>                        errno == EINTR)
>                         ;
>  
> -               if(WIFSIGNALED(status))
> -                       return WTERMSIG(status) + 128;
> -
> -               return WEXITSTATUS(status);
> +               return status;
>         }
>  }
>  
> @@ -109,20 +106,20 @@ int main(int argc, char **argv)
>         runc=false;
>         igt_info("Simple test.\n");
>         fflush(stdout);
> -       internal_assert(WTERMSIG(do_fork()) == SIGSEGV);
> +       internal_assert_wsignaled(do_fork(), SIGSEGV);
>  
>         /* Test crash in a single subtest is reported */
>         simple = false;
>         igt_info("Single subtest.\n");
>         fflush(stdout);
> -       internal_assert(WTERMSIG(do_fork()) == SIGSEGV);
> +       internal_assert_wexited(do_fork(), SIGSEGV + 128);
>  
>         /* Test crash in a subtest following a pass is reported */
>         simple = false;
>         runa=true;
>         igt_info("Passing then crashing subtest.\n");
>         fflush(stdout);
> -       internal_assert(WTERMSIG(do_fork()) == SIGSEGV);
> +       internal_assert_wexited(do_fork(), SIGSEGV + 128);
>  
>         /* Test crash in a subtest preceeding a pass is reported */
>         simple = false;
> @@ -130,8 +127,7 @@ int main(int argc, char **argv)
>         runc=true;
>         igt_info("Crashing then passing subtest.\n");
>         fflush(stdout);
> -       internal_assert(WTERMSIG(do_fork()) == SIGSEGV);
> +       internal_assert_wexited(do_fork(), SIGSEGV + 128);

Ok.

>         return 0;
>  }
> -
> diff --git a/lib/tests/igt_tests_common.h b/lib/tests/igt_tests_common.h
> index 9b347a4565d9..e66ee37c0331 100644
> --- a/lib/tests/igt_tests_common.h
> +++ b/lib/tests/igt_tests_common.h
> @@ -35,4 +35,15 @@
>   */
>  #define internal_assert assert
>  
> +static inline void internal_assert_wexited(int wstatus, int exitcode)
> +{
> +       internal_assert(WIFEXITED(wstatus) &&
> +                       WEXITSTATUS(wstatus) == exitcode);
> +}
> +
> +static inline void internal_assert_wsignaled(int wstatus, int signal)
> +{
> +       internal_assert(WIFSIGNALED(wstatus) &&
> +                       WTERMSIG(wstatus) == signal);
> +}
>  #endif

Ok. internal_assert_f() ? ;)

Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris


More information about the igt-dev mailing list