tests/boot-serial: Do not delete the output file in case of errors
Peter reported that the boot-serial tester sometimes runs into timeouts with SPARC guests. It's currently completely unclear whether this is due to too much load on the host machine (so that the guest really just ran too slow), or whether there is something wrong with the guest's firmware boot. For further debugging, we need the serial output of the guest in case of errors, so instead of unlinking the file immediately, this is now only done in case of success. In case of error, print the name of the file with the serial output via g_error() (which then also calls abort() internally to mark the test as failed). Signed-off-by: Thomas Huth <thuth@redhat.com> Message-Id: <1526977831-31129-1-git-send-email-thuth@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
a71c775b24
commit
28a3cfc10b
@ -111,9 +111,8 @@ static testdef_t tests[] = {
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static void check_guest_output(const testdef_t *test, int fd)
|
||||
static bool check_guest_output(const testdef_t *test, int fd)
|
||||
{
|
||||
bool output_ok = false;
|
||||
int i, nbr = 0, pos = 0, ccnt;
|
||||
char ch;
|
||||
|
||||
@ -125,8 +124,7 @@ static void check_guest_output(const testdef_t *test, int fd)
|
||||
pos += 1;
|
||||
if (test->expect[pos] == '\0') {
|
||||
/* We've reached the end of the expected string! */
|
||||
output_ok = true;
|
||||
goto done;
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
pos = 0;
|
||||
@ -136,8 +134,7 @@ static void check_guest_output(const testdef_t *test, int fd)
|
||||
g_usleep(10000);
|
||||
}
|
||||
|
||||
done:
|
||||
g_assert(output_ok);
|
||||
return false;
|
||||
}
|
||||
|
||||
static void test_machine(const void *data)
|
||||
@ -180,12 +177,16 @@ static void test_machine(const void *data)
|
||||
"-no-shutdown -serial chardev:serial0 %s",
|
||||
codeparam, code ? codetmp : "",
|
||||
test->machine, serialtmp, test->extra);
|
||||
unlink(serialtmp);
|
||||
if (code) {
|
||||
unlink(codetmp);
|
||||
}
|
||||
|
||||
check_guest_output(test, ser_fd);
|
||||
if (!check_guest_output(test, ser_fd)) {
|
||||
g_error("Failed to find expected string. Please check '%s'",
|
||||
serialtmp);
|
||||
}
|
||||
unlink(serialtmp);
|
||||
|
||||
qtest_quit(global_qtest);
|
||||
|
||||
close(ser_fd);
|
||||
|
Loading…
Reference in New Issue
Block a user