[libvirt] [PATCH] schema: fix idmap validation

Eric Blake eblake at redhat.com
Fri Jan 10 17:42:35 UTC 2014


When idmap was added to LXC, we forgot to cover it in the testsuite.
The schema was missing an <element> layer, and as a result,
virt-xml-validate was failing on valid dumpxml output.

Reported by Eduard - Gabriel Munteanu on IRC.

* docs/schemas/domaincommon.rng (idmap): Include <idmap> element,
and support interleaves.
* tests/lxcxml2xmldata/lxc-idmap.xml: New file.
* tests/lxcxml2xmltest.c (mymain): Test it.

Signed-off-by: Eric Blake <eblake at redhat.com>
---

Eduard, please confirm I spelled your name correctly.

 docs/schemas/domaincommon.rng      | 58 +++++++++++++++++++++-----------------
 tests/lxcxml2xmldata/lxc-idmap.xml | 38 +++++++++++++++++++++++++
 tests/lxcxml2xmltest.c             |  1 +
 3 files changed, 71 insertions(+), 26 deletions(-)
 create mode 100644 tests/lxcxml2xmldata/lxc-idmap.xml

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 86a60c9..a69f6b6 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -506,32 +506,38 @@
     </interleave>
   </define>
   <define name="idmap">
-    <zeroOrMore>
-      <element name="uid">
-        <attribute name="start">
-          <ref name="unsignedInt"/>
-        </attribute>
-        <attribute name="target">
-          <ref name="unsignedInt"/>
-        </attribute>
-        <attribute name="count">
-          <ref name="unsignedInt"/>
-        </attribute>
-      </element>
-    </zeroOrMore>
-    <zeroOrMore>
-      <element name="gid">
-        <attribute name="start">
-          <ref name="unsignedInt"/>
-        </attribute>
-        <attribute name="target">
-          <ref name="unsignedInt"/>
-        </attribute>
-        <attribute name="count">
-          <ref name="unsignedInt"/>
-        </attribute>
-      </element>
-    </zeroOrMore>
+    <element name="idmap">
+      <interleave>
+        <zeroOrMore>
+          <element name="uid">
+            <attribute name="start">
+              <ref name="unsignedInt"/>
+            </attribute>
+            <attribute name="target">
+              <ref name="unsignedInt"/>
+            </attribute>
+            <attribute name="count">
+              <ref name="unsignedInt"/>
+            </attribute>
+            <empty/>
+          </element>
+        </zeroOrMore>
+        <zeroOrMore>
+          <element name="gid">
+            <attribute name="start">
+              <ref name="unsignedInt"/>
+            </attribute>
+            <attribute name="target">
+              <ref name="unsignedInt"/>
+            </attribute>
+            <attribute name="count">
+              <ref name="unsignedInt"/>
+            </attribute>
+          <empty/>
+          </element>
+        </zeroOrMore>
+      </interleave>
+    </element>
   </define>
   <!--
       Resources usage defines the amount of memory (maximum and possibly
diff --git a/tests/lxcxml2xmldata/lxc-idmap.xml b/tests/lxcxml2xmldata/lxc-idmap.xml
new file mode 100644
index 0000000..3cced21
--- /dev/null
+++ b/tests/lxcxml2xmldata/lxc-idmap.xml
@@ -0,0 +1,38 @@
+<domain type='lxc'>
+  <name>jessie</name>
+  <uuid>e21987a5-e98e-9c99-0e35-803e4d9ad1fe</uuid>
+  <memory unit='KiB'>1048576</memory>
+  <currentMemory unit='KiB'>1048576</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <resource>
+    <partition>/machine</partition>
+  </resource>
+  <os>
+    <type arch='x86_64'>exe</type>
+    <init>/sbin/init</init>
+  </os>
+  <idmap>
+    <uid start='0' target='100000' count='100000'/>
+    <gid start='0' target='100000' count='100000'/>
+  </idmap>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <devices>
+    <emulator>/usr/libexec/libvirt_lxc</emulator>
+    <filesystem type='mount' accessmode='passthrough'>
+      <source dir='/mach/jessie'/>
+      <target dir='/'/>
+    </filesystem>
+    <interface type='bridge'>
+      <mac address='00:16:3e:0f:ef:8a'/>
+      <source bridge='bri0'/>
+      <target dev='veth0'/>
+    </interface>
+    <console type='pty'>
+      <target type='lxc' port='0'/>
+    </console>
+  </devices>
+  <seclabel type='none'/>
+</domain>
diff --git a/tests/lxcxml2xmltest.c b/tests/lxcxml2xmltest.c
index a028e39..c6bb706 100644
--- a/tests/lxcxml2xmltest.c
+++ b/tests/lxcxml2xmltest.c
@@ -138,6 +138,7 @@ mymain(void)
     DO_TEST("disk-formats");
     DO_TEST_DIFFERENT("filesystem-ram");
     DO_TEST("filesystem-root");
+    DO_TEST("idmap");

     virObjectUnref(caps);
     virObjectUnref(xmlopt);
-- 
1.8.4.2




More information about the libvir-list mailing list