qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] tests: report errors when iasl exits with non-z


From: Michael S. Tsirkin
Subject: Re: [Qemu-devel] [PATCH] tests: report errors when iasl exits with non-zero status
Date: Thu, 16 Nov 2017 17:48:55 +0200

On Wed, Oct 18, 2017 at 02:15:28PM +0100, Daniel P. Berrange wrote:
> If iasl exits with non-zero status, the test unhelpfully just reports
> that the AML did not match, because the data files it thought iasl
> generated do not exist. This adds an explicit check for the exit status
> of iasl and prints stderr if it was non-zero. Thus gives us a fighting
> chance of diagnosing why iasl failed.
> 
> Signed-off-by: Daniel P. Berrange <address@hidden>

Given the state of iasl, I'm not sure this will not
give false positives where iasl returns an error status
but does produce a valid input.

I propose this is reworked to just add a warning about the
bad status, but still attempt to process the file.


> ---
>  tests/bios-tables-test.c | 24 ++++++++++++++++++------
>  1 file changed, 18 insertions(+), 6 deletions(-)
> 
> diff --git a/tests/bios-tables-test.c b/tests/bios-tables-test.c
> index 564da45f65..ee441f1e17 100644
> --- a/tests/bios-tables-test.c
> +++ b/tests/bios-tables-test.c
> @@ -304,6 +304,7 @@ static bool load_asl(GArray *sdts, AcpiSdtTable *sdt)
>      gchar *out, *out_err;
>      gboolean ret;
>      int i;
> +    int status;
>  
>      fd = g_file_open_tmp("asl-XXXXXX.dsl", &sdt->asl_file, &error);
>      g_assert_no_error(error);
> @@ -324,14 +325,25 @@ static bool load_asl(GArray *sdts, AcpiSdtTable *sdt)
>      g_string_append_printf(command_line, "-d %s", sdt->aml_file);
>  
>      /* pass 'out' and 'out_err' in order to be redirected */
> -    ret = g_spawn_command_line_sync(command_line->str, &out, &out_err, NULL, 
> &error);
> +    ret = g_spawn_command_line_sync(command_line->str, &out, &out_err, 
> &status, &error);
>      g_assert_no_error(error);
>      if (ret) {
> -        ret = g_file_get_contents(sdt->asl_file, (gchar **)&sdt->asl,
> -                                  &sdt->asl_len, &error);
> -        g_assert(ret);
> -        g_assert_no_error(error);
> -        ret = (sdt->asl_len > 0);
> +        if (status != 0) {
> +            g_printerr("'%s' exited with status %d", command_line->str, 
> status);
> +            if (!g_str_equal(out, "")) {
> +                g_printerr("%s", out);
> +            }
> +            if (!g_str_equal(out_err, "")) {
> +                g_printerr("%s", out_err);
> +            }
> +            ret = FALSE;
> +        } else {
> +            ret = g_file_get_contents(sdt->asl_file, (gchar **)&sdt->asl,
> +                                      &sdt->asl_len, &error);
> +            g_assert(ret);
> +            g_assert_no_error(error);
> +            ret = (sdt->asl_len > 0);
> +        }
>      }
>  
>      g_free(out);
> -- 
> 2.13.6



reply via email to

[Prev in Thread] Current Thread [Next in Thread]