From: Huaqiang <huaqiang.wang(a)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(a)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