diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2018-12-18 14:31:06 +0000 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2018-12-18 14:31:06 +0000 |
| commit | e85c577158a2e8e252414959da9ef15c12eec63d (patch) | |
| tree | b94528b6cb2a0682fa1f60a2ea5852ea8a3f2a10 /tests/boot-serial-test.c | |
| parent | ec3c927f3d983b277d00fb88e26785c94e545af3 (diff) | |
| parent | fe17cca6bd2cdfb9cc7f29da8e71aa1238bcdba7 (diff) | |
| download | focaccia-qemu-e85c577158a2e8e252414959da9ef15c12eec63d.tar.gz focaccia-qemu-e85c577158a2e8e252414959da9ef15c12eec63d.zip | |
Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2018-12-17' into staging
- Replace global_qtest in some tests - Exit boot-serial-test loop if child dies - Sanitize verbose output in biot-tables-test # gpg: Signature made Mon 17 Dec 2018 16:08:07 GMT # gpg: using RSA key 2ED9D774FE702DB5 # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" # gpg: aka "Thomas Huth <thuth@redhat.com>" # gpg: aka "Thomas Huth <huth@tuxfamily.org>" # gpg: aka "Thomas Huth <th.huth@posteo.de>" # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * remotes/huth-gitlab/tags/pull-request-2018-12-17: tests/bios-tables-test: Sanitize test verbose output tests: acpi: remove not used ACPI_READ_GENERIC_ADDRESS macro tests: Exit boot-serial-test loop if child dies tests/pxe: Make test independent of global_qtest tests/prom-env: Make test independent of global_qtest tests/machine-none: Make test independent of global_qtest tests/test-filter: Make tests independent of global_qtest tests/boot-serial: Get rid of global_qtest variable tests/pvpanic: Make the pvpanic test independent of global_qtest tests/vmgenid: Make test independent of global_qtest tests/acpi-utils: Drop dependence on global_qtest ivshmem-test: Drop dependence on global_qtest tests/libqos/pci: Make PCI access functions independent of global_qtest Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'tests/boot-serial-test.c')
| -rw-r--r-- | tests/boot-serial-test.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/tests/boot-serial-test.c b/tests/boot-serial-test.c index 8ec6aed35d..58a48f39bf 100644 --- a/tests/boot-serial-test.c +++ b/tests/boot-serial-test.c @@ -128,13 +128,14 @@ static testdef_t tests[] = { { NULL } }; -static bool check_guest_output(const testdef_t *test, int fd) +static bool check_guest_output(QTestState *qts, const testdef_t *test, int fd) { - int i, nbr = 0, pos = 0, ccnt; + int nbr = 0, pos = 0, ccnt; + time_t now, start = time(NULL); char ch; - /* Poll serial output... Wait at most 360 seconds */ - for (i = 0; i < 36000; ++i) { + /* Poll serial output... */ + while (1) { ccnt = 0; while (ccnt++ < 512 && (nbr = read(fd, &ch, 1)) == 1) { if (ch == test->expect[pos]) { @@ -148,6 +149,15 @@ static bool check_guest_output(const testdef_t *test, int fd) } } g_assert(nbr >= 0); + /* Wait only if the child is still alive. */ + if (!qtest_probe_child(qts)) { + break; + } + /* Wait at most 360 seconds. */ + now = time(NULL); + if (now - start >= 360) { + break; + } g_usleep(10000); } @@ -161,6 +171,7 @@ static void test_machine(const void *data) char codetmp[] = "/tmp/qtest-boot-serial-cXXXXXX"; const char *codeparam = ""; const uint8_t *code = NULL; + QTestState *qts; int ser_fd; ser_fd = mkstemp(serialtmp); @@ -189,22 +200,22 @@ static void test_machine(const void *data) * Make sure that this test uses tcg if available: It is used as a * fast-enough smoketest for that. */ - global_qtest = qtest_initf("%s %s -M %s,accel=tcg:kvm " - "-chardev file,id=serial0,path=%s " - "-no-shutdown -serial chardev:serial0 %s", - codeparam, code ? codetmp : "", - test->machine, serialtmp, test->extra); + qts = qtest_initf("%s %s -M %s,accel=tcg:kvm -no-shutdown " + "-chardev file,id=serial0,path=%s " + "-serial chardev:serial0 %s", + codeparam, code ? codetmp : "", test->machine, + serialtmp, test->extra); if (code) { unlink(codetmp); } - if (!check_guest_output(test, ser_fd)) { + if (!check_guest_output(qts, test, ser_fd)) { g_error("Failed to find expected string. Please check '%s'", serialtmp); } unlink(serialtmp); - qtest_quit(global_qtest); + qtest_quit(qts); close(ser_fd); } |