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 <berra...@redhat.com>
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