[PATCH 06/21] domain_conf.c: move primary video check to virDomainDefPostParseVideo()

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

 



Move it to post parse since it's not related to XML parsing.
Since we don't have a failure test for this scenario, a new
'video-multiple-primaries' test was added to test this failure
case.

Signed-off-by: Daniel Henrique Barboza <danielhb413@xxxxxxxxx>
---
 src/conf/domain_conf.c                        | 24 +++++++++-----
 .../video-multiple-primaries.err              |  1 +
 .../video-multiple-primaries.xml              | 32 +++++++++++++++++++
 tests/qemuxml2argvtest.c                      |  5 +++
 4 files changed, 54 insertions(+), 8 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/video-multiple-primaries.err
 create mode 100644 tests/qemuxml2argvdata/video-multiple-primaries.xml

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 88c647f943..521a7cee3a 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -5873,9 +5873,23 @@ static int
 virDomainDefPostParseVideo(virDomainDefPtr def,
                            void *opaque)
 {
+    size_t i;
+
     if (def->nvideos == 0)
         return 0;
 
+    /* Any video marked as primary will be put in index 0 by the
+     * parser. Ensure that we have only one primary set by the user. */
+    if (def->videos[0]->primary) {
+        for (i = 1; i < def->nvideos; i++) {
+            if (def->videos[i]->primary) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("Only one primary video device is supported"));
+                return -1;
+            }
+        }
+    }
+
     if (def->videos[0]->type == VIR_DOMAIN_VIDEO_TYPE_NONE) {
         char *alias;
 
@@ -22240,15 +22254,9 @@ virDomainDefParseXML(xmlDocPtr xml,
                                                 ctxt, flags)))
             goto error;
 
-        if (video->primary) {
-            if (def->nvideos != 0 && def->videos[0]->primary) {
-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                               _("Only one primary video device is supported"));
-                goto error;
-            }
-
+        if (video->primary)
             insertAt = 0;
-        }
+
         if (VIR_INSERT_ELEMENT_INPLACE(def->videos,
                                        insertAt,
                                        def->nvideos,
diff --git a/tests/qemuxml2argvdata/video-multiple-primaries.err b/tests/qemuxml2argvdata/video-multiple-primaries.err
new file mode 100644
index 0000000000..f81b7275e4
--- /dev/null
+++ b/tests/qemuxml2argvdata/video-multiple-primaries.err
@@ -0,0 +1 @@
+unsupported configuration: Only one primary video device is supported
diff --git a/tests/qemuxml2argvdata/video-multiple-primaries.xml b/tests/qemuxml2argvdata/video-multiple-primaries.xml
new file mode 100644
index 0000000000..977227c5ff
--- /dev/null
+++ b/tests/qemuxml2argvdata/video-multiple-primaries.xml
@@ -0,0 +1,32 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>1048576</memory>
+  <currentMemory unit='KiB'>1048576</currentMemory>
+  <vcpu>1</vcpu>
+  <os>
+    <type arch='i686' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu-system-i386</emulator>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='qcow2' cache='none'/>
+      <source file='/var/lib/libvirt/images/QEMUGuest1'/>
+      <target dev='hda' bus='ide'/>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
+    <controller type='ide' index='0'/>
+    <video>
+      <model type='vga' vram='16384' heads='1' primary='yes'/>
+    </video>
+    <video>
+      <model type='qxl' heads='1' primary='yes'/>
+    </video>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 42d147243e..9043c9bdbe 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -2378,6 +2378,11 @@ mymain(void)
     DO_TEST_CAPS_ARCH_LATEST("default-video-type-riscv64", "riscv64");
     DO_TEST_CAPS_ARCH_LATEST("default-video-type-s390x", "s390x");
 
+    DO_TEST_PARSE_ERROR("video-multiple-primaries",
+                        QEMU_CAPS_DEVICE_QXL,
+                        QEMU_CAPS_DEVICE_VGA,
+                        QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
+
     DO_TEST("virtio-rng-default",
             QEMU_CAPS_DEVICE_VIRTIO_RNG,
             QEMU_CAPS_OBJECT_RNG_RANDOM);
-- 
2.26.2




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux