Move the boot validation being done by qemuBuildBootCommandLine()
to to a new qemuDomainDefValidateBoot() function. This new function
is called by qemuDomainDefValidate(), allowing boot validation in
domain define time.
Tests were adapted to consider the new caps being needed in
this earlier stage.
Signed-off-by: Daniel Henrique Barboza <danielhb413(a)gmail.com>
---
src/qemu/qemu_command.c | 17 +----------------
src/qemu/qemu_domain.c | 29 +++++++++++++++++++++++++++++
tests/qemuxml2argvtest.c | 4 ++--
tests/qemuxml2xmltest.c | 6 +++---
4 files changed, 35 insertions(+), 21 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 5c29ec897b..7d4272a896 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6293,28 +6293,13 @@ qemuBuildBootCommandLine(virCommandPtr cmd,
}
if (def->os.bios.rt_set) {
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_REBOOT_TIMEOUT)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("reboot timeout is not supported "
- "by this QEMU binary"));
- return -1;
- }
-
virBufferAsprintf(&boot_buf,
"reboot-timeout=%d,",
def->os.bios.rt_delay);
}
- if (def->os.bm_timeout_set) {
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPLASH_TIMEOUT)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("splash timeout is not supported "
- "by this QEMU binary"));
- return -1;
- }
-
+ if (def->os.bm_timeout_set)
virBufferAsprintf(&boot_buf, "splash-time=%u,",
def->os.bm_timeout);
- }
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOT_STRICT))
virBufferAddLit(&boot_buf, "strict=on,");
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index a87f283f19..0c04ba9dcc 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -5449,6 +5449,32 @@ qemuDomainDefValidatePM(const virDomainDef *def,
}
+static int
+qemuDomainDefValidateBoot(const virDomainDef *def,
+ virQEMUCapsPtr qemuCaps)
+{
+ if (def->os.bios.rt_set) {
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_REBOOT_TIMEOUT)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("reboot timeout is not supported "
+ "by this QEMU binary"));
+ return -1;
+ }
+ }
+
+ if (def->os.bm_timeout_set) {
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPLASH_TIMEOUT)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("splash timeout is not supported "
+ "by this QEMU binary"));
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
static int
qemuDomainDefValidate(const virDomainDef *def,
void *opaque)
@@ -5547,6 +5573,9 @@ qemuDomainDefValidate(const virDomainDef *def,
if (qemuDomainDefValidatePM(def, qemuCaps) < 0)
goto cleanup;
+ if (qemuDomainDefValidateBoot(def, qemuCaps) < 0)
+ goto cleanup;
+
/* QEMU 2.7 (detected via the availability of query-hotpluggable-cpus)
* enforces stricter rules than previous versions when it comes to guest
* CPU topology. Verify known constraints are respected */
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 6f6585ba71..802ecc98f8 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -844,7 +844,7 @@ mymain(void)
DO_TEST("boot-menu-enable", NONE);
DO_TEST("boot-menu-enable-with-timeout",
QEMU_CAPS_SPLASH_TIMEOUT);
- DO_TEST_FAILURE("boot-menu-enable-with-timeout", NONE);
+ DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout", NONE);
DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
DO_TEST("boot-menu-disable", NONE);
DO_TEST("boot-menu-disable-drive", NONE);
@@ -860,7 +860,7 @@ mymain(void)
DO_TEST("reboot-timeout-disabled", QEMU_CAPS_REBOOT_TIMEOUT);
DO_TEST("reboot-timeout-enabled", QEMU_CAPS_REBOOT_TIMEOUT);
- DO_TEST_FAILURE("reboot-timeout-enabled", NONE);
+ DO_TEST_PARSE_ERROR("reboot-timeout-enabled", NONE);
DO_TEST("bios",
QEMU_CAPS_DEVICE_ISA_SERIAL,
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 29d3a31e9f..ee76d50a41 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -251,13 +251,13 @@ mymain(void)
QEMU_CAPS_DEVICE_IOH3420,
QEMU_CAPS_ICH9_AHCI);
DO_TEST("boot-multi", NONE);
- DO_TEST("boot-menu-enable-with-timeout", NONE);
+ DO_TEST("boot-menu-enable-with-timeout", QEMU_CAPS_SPLASH_TIMEOUT);
DO_TEST("boot-menu-disable", NONE);
DO_TEST("boot-menu-disable-with-timeout", NONE);
DO_TEST("boot-order", NONE);
- DO_TEST("reboot-timeout-enabled", NONE);
- DO_TEST("reboot-timeout-disabled", NONE);
+ DO_TEST("reboot-timeout-enabled", QEMU_CAPS_REBOOT_TIMEOUT);
+ DO_TEST("reboot-timeout-disabled", QEMU_CAPS_REBOOT_TIMEOUT);
DO_TEST("clock-utc", NONE);
DO_TEST("clock-localtime", NONE);
--
2.23.0