[libvirt] [PATCH 3/5] cachetune schema: a looser check for the order of <cache> and <monitor> element

Wang Huaqiang huaqiang.wang at intel.com
Wed Nov 13 17:08:21 UTC 2019


From: Huaqiang <huaqiang.wang at intel.com>

Originally, inside <cputune/cachetune>, it requires the <cache> element to
be in the position before <monitor>, and following configuration is not
permitted by schema, but it is better to let it be valid.

  <cputune>
    <cachetune vcpus='0-1'>
      <monitor level='3' vcpus='0-1'/>
            ^
            |__ Not permitted originally because it is in the place
                before <cache> element.

      <cache id='0' level='3' type='both' size='3' unit='MiB'/>
      <cache id='1' level='3' type='both' size='3' unit='MiB'/>
    </cachetune>
    ...
  </cputune>

And, let schema do more strict check by identifying following configuration to
be invalid, due to <cachetune> should contain at least one <cache> or <monitor>
element.

  <cputune>
    <cachetune vcpus='0-1'>
        ^
        |__ a <cachetune> SHOULD contain at least one <cache> or <monitor>

    </cachetune>
    ...
  </cputune>

Signed-off-by: Huaqiang <huaqiang.wang at intel.com>
---
 docs/schemas/domaincommon.rng             | 68 +++++++++++------------
 tests/genericxml2xmlindata/cachetune.xml  |  1 +
 tests/genericxml2xmloutdata/cachetune.xml | 34 ++++++++++++
 tests/genericxml2xmltest.c                |  2 +-
 4 files changed, 70 insertions(+), 35 deletions(-)
 create mode 100644 tests/genericxml2xmloutdata/cachetune.xml

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index e06f892da3..aa4f512e5c 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -980,41 +980,41 @@
             <attribute name="vcpus">
               <ref name='cpuset'/>
             </attribute>
-            <zeroOrMore>
-              <element name="cache">
-                <attribute name="id">
-                  <ref name='unsignedInt'/>
-                </attribute>
-                <attribute name="level">
-                  <ref name='unsignedInt'/>
-                </attribute>
-                <attribute name="type">
-                  <choice>
-                    <value>both</value>
-                    <value>code</value>
-                    <value>data</value>
-                  </choice>
-                </attribute>
-                <attribute name="size">
-                  <ref name='unsignedLong'/>
-                </attribute>
-                <optional>
-                  <attribute name='unit'>
-                    <ref name='unit'/>
+            <oneOrMore>
+              <choice>
+                <element name="cache">
+                  <attribute name="id">
+                    <ref name='unsignedInt'/>
                   </attribute>
-                </optional>
-              </element>
-            </zeroOrMore>
-            <zeroOrMore>
-              <element name="monitor">
-                <attribute name="level">
-                  <ref name='unsignedInt'/>
-                </attribute>
-                <attribute name="vcpus">
-                  <ref name='cpuset'/>
-                </attribute>
-              </element>
-            </zeroOrMore>
+                  <attribute name="level">
+                    <ref name='unsignedInt'/>
+                  </attribute>
+                  <attribute name="type">
+                    <choice>
+                      <value>both</value>
+                      <value>code</value>
+                      <value>data</value>
+                    </choice>
+                  </attribute>
+                  <attribute name="size">
+                    <ref name='unsignedLong'/>
+                  </attribute>
+                  <optional>
+                    <attribute name='unit'>
+                      <ref name='unit'/>
+                    </attribute>
+                  </optional>
+                </element>
+                <element name="monitor">
+                  <attribute name="level">
+                    <ref name='unsignedInt'/>
+                  </attribute>
+                  <attribute name="vcpus">
+                    <ref name='cpuset'/>
+                  </attribute>
+                </element>
+              </choice>
+            </oneOrMore>
           </element>
         </zeroOrMore>
         <zeroOrMore>
diff --git a/tests/genericxml2xmlindata/cachetune.xml b/tests/genericxml2xmlindata/cachetune.xml
index 645cab7771..eda2ca6fb6 100644
--- a/tests/genericxml2xmlindata/cachetune.xml
+++ b/tests/genericxml2xmlindata/cachetune.xml
@@ -6,6 +6,7 @@
   <vcpu placement='static'>4</vcpu>
   <cputune>
     <cachetune vcpus='0-1'>
+      <monitor level='3' vcpus='0-1'/>
       <cache id='0' level='3' type='both' size='3' unit='MiB'/>
       <cache id='1' level='3' type='both' size='3' unit='MiB'/>
     </cachetune>
diff --git a/tests/genericxml2xmloutdata/cachetune.xml b/tests/genericxml2xmloutdata/cachetune.xml
new file mode 100644
index 0000000000..dcde0ebc2a
--- /dev/null
+++ b/tests/genericxml2xmloutdata/cachetune.xml
@@ -0,0 +1,34 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219136</memory>
+  <currentMemory unit='KiB'>219136</currentMemory>
+  <vcpu placement='static'>4</vcpu>
+  <cputune>
+    <cachetune vcpus='0-1'>
+      <cache id='0' level='3' type='both' size='3' unit='MiB'/>
+      <cache id='1' level='3' type='both' size='3' unit='MiB'/>
+      <monitor level='3' vcpus='0-1'/>
+    </cachetune>
+    <cachetune vcpus='3'>
+      <cache id='0' level='3' type='both' size='3' unit='MiB'/>
+    </cachetune>
+  </cputune>
+  <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-i686</emulator>
+    <controller type='usb' index='0'/>
+    <controller type='ide' index='0'/>
+    <controller type='pci' index='0' model='pci-root'/>
+    <input type='mouse' bus='ps2'/>
+    <input type='keyboard' bus='ps2'/>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c
index 0d04413712..62005a5393 100644
--- a/tests/genericxml2xmltest.c
+++ b/tests/genericxml2xmltest.c
@@ -125,9 +125,9 @@ mymain(void)
     DO_TEST_FULL("chardev-reconnect-invalid-mode", 0, false,
                  TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE);
 
-    DO_TEST("cachetune");
     DO_TEST("cachetune-small");
     DO_TEST("cachetune-cdp");
+    DO_TEST_DIFFERENT("cachetune");
     DO_TEST_DIFFERENT("cachetune-extra-tunes");
     DO_TEST_FULL("cachetune-colliding-allocs", false, true,
                  TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE);
-- 
2.23.0





More information about the libvir-list mailing list