[libvirt] [PATCH v2 RFC 11/12] schema: backup: add schema and its tests

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Fri May 12 13:37:27 UTC 2017


---
 docs/schemas/domainbackup.rng                  | 79 ++++++++++++++++++++++++++
 tests/domainbackupxml/block_target.xml         |  5 ++
 tests/domainbackupxml/explicit_description.xml |  6 ++
 tests/domainbackupxml/explicit_file_type.xml   |  5 ++
 tests/domainbackupxml/explicit_format.xml      |  5 ++
 tests/domainbackupxml/explicit_name.xml        |  6 ++
 tests/domainbackupxml/multi_disk.xml           |  8 +++
 tests/domainbackupxml/ref_by_path.xml          |  5 ++
 tests/virschematest.c                          |  1 +
 tools/virt-xml-validate.in                     |  5 +-
 10 files changed, 124 insertions(+), 1 deletion(-)
 create mode 100644 docs/schemas/domainbackup.rng
 create mode 100644 tests/domainbackupxml/block_target.xml
 create mode 100644 tests/domainbackupxml/explicit_description.xml
 create mode 100644 tests/domainbackupxml/explicit_file_type.xml
 create mode 100644 tests/domainbackupxml/explicit_format.xml
 create mode 100644 tests/domainbackupxml/explicit_name.xml
 create mode 100644 tests/domainbackupxml/multi_disk.xml
 create mode 100644 tests/domainbackupxml/ref_by_path.xml

diff --git a/docs/schemas/domainbackup.rng b/docs/schemas/domainbackup.rng
new file mode 100644
index 0000000..4a93dfb
--- /dev/null
+++ b/docs/schemas/domainbackup.rng
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<!-- A Relax NG schema for the libvirt domain backup properties XML format -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+  <start>
+    <ref name='domainBackup'/>
+  </start>
+
+  <include href='domaincommon.rng'/>
+
+  <define name='domainBackup'>
+    <element name='domainbackup'>
+      <interleave>
+        <optional>
+          <element name='name'>
+            <text/>
+          </element>
+        </optional>
+        <optional>
+          <element name='description'>
+            <text/>
+          </element>
+        </optional>
+        <oneOrMore>
+          <ref name='diskBackup'/>
+        </oneOrMore>
+      </interleave>
+    </element>
+  </define>
+
+  <define name='diskBackup'>
+    <element name='disk'>
+      <attribute name='name'>
+        <choice>
+          <ref name='diskTarget'/>
+          <ref name='absFilePath'/>
+        </choice>
+      </attribute>
+      <choice>
+        <ref name="backupTargetFile"/>
+        <ref name="backupTargetBlock"/>
+      </choice>
+    </element>
+  </define>
+
+  <define name="backupTargetCommon">
+    <optional>
+      <attribute name='format'>
+        <ref name='storageFormatBacking'/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="backupTargetFile">
+    <optional>
+      <attribute name="type">
+        <value>file</value>
+      </attribute>
+    </optional>
+    <element name="target">
+      <attribute name="file">
+        <ref name="absFilePath"/>
+      </attribute>
+      <ref name="backupTargetCommon"/>
+    </element>
+  </define>
+
+  <define name="backupTargetBlock">
+    <attribute name="type">
+      <value>block</value>
+    </attribute>
+    <element name="target">
+      <attribute name="dev">
+        <ref name="absFilePath"/>
+      </attribute>
+      <ref name="backupTargetCommon"/>
+    </element>
+  </define>
+
+</grammar>
diff --git a/tests/domainbackupxml/block_target.xml b/tests/domainbackupxml/block_target.xml
new file mode 100644
index 0000000..a7618d1
--- /dev/null
+++ b/tests/domainbackupxml/block_target.xml
@@ -0,0 +1,5 @@
+<domainbackup>
+  <disk name="sda" type="block">
+    <target dev="/path/to/backup/dev"/>
+  </disk>
+</domainbackup>
diff --git a/tests/domainbackupxml/explicit_description.xml b/tests/domainbackupxml/explicit_description.xml
new file mode 100644
index 0000000..ea378a4
--- /dev/null
+++ b/tests/domainbackupxml/explicit_description.xml
@@ -0,0 +1,6 @@
+<domainbackup>
+  <description>description</description>
+  <disk name="sda">
+    <target file="/path/to/file"/>
+  </disk>
+</domainbackup>
diff --git a/tests/domainbackupxml/explicit_file_type.xml b/tests/domainbackupxml/explicit_file_type.xml
new file mode 100644
index 0000000..cfc424f
--- /dev/null
+++ b/tests/domainbackupxml/explicit_file_type.xml
@@ -0,0 +1,5 @@
+<domainbackup>
+  <disk name="sda" type="file">
+    <target file="/path/to/backup/file"/>
+  </disk>
+</domainbackup>
diff --git a/tests/domainbackupxml/explicit_format.xml b/tests/domainbackupxml/explicit_format.xml
new file mode 100644
index 0000000..3151f84
--- /dev/null
+++ b/tests/domainbackupxml/explicit_format.xml
@@ -0,0 +1,5 @@
+<domainbackup>
+  <disk name="sda" type="file">
+    <target file="/path/to/backup/file" format="qcow2"/>
+  </disk>
+</domainbackup>
diff --git a/tests/domainbackupxml/explicit_name.xml b/tests/domainbackupxml/explicit_name.xml
new file mode 100644
index 0000000..61f7731
--- /dev/null
+++ b/tests/domainbackupxml/explicit_name.xml
@@ -0,0 +1,6 @@
+<domainbackup>
+  <name>name</name>
+  <disk name="sda">
+    <target file="/path/to/file"/>
+  </disk>
+</domainbackup>
diff --git a/tests/domainbackupxml/multi_disk.xml b/tests/domainbackupxml/multi_disk.xml
new file mode 100644
index 0000000..2d1797f
--- /dev/null
+++ b/tests/domainbackupxml/multi_disk.xml
@@ -0,0 +1,8 @@
+<domainbackup>
+  <disk name="sda">
+    <target file="/path/to/backup/sda"/>
+  </disk>
+  <disk name="sdb">
+    <target file="/path/to/backup/sdb"/>
+  </disk>
+</domainbackup>
diff --git a/tests/domainbackupxml/ref_by_path.xml b/tests/domainbackupxml/ref_by_path.xml
new file mode 100644
index 0000000..496fc49
--- /dev/null
+++ b/tests/domainbackupxml/ref_by_path.xml
@@ -0,0 +1,5 @@
+<domainbackup>
+  <disk name="/path/to/disk/file">
+    <target file="/path/to/backup/file"/>
+  </disk>
+</domainbackup>
diff --git a/tests/virschematest.c b/tests/virschematest.c
index ffed217..c1624e6 100644
--- a/tests/virschematest.c
+++ b/tests/virschematest.c
@@ -226,6 +226,7 @@ mymain(void)
     DO_TEST_DIR("domaincaps.rng", "domaincapsschemadata");
     DO_TEST_DIR("domainsnapshot.rng", "domainsnapshotxml2xmlin",
                 "domainsnapshotxml2xmlout");
+    DO_TEST_DIR("domainbackup.rng", "domainbackupxml");
     DO_TEST_DIR("interface.rng", "interfaceschemadata");
     DO_TEST_DIR("network.rng", "../src/network", "networkxml2xmlin",
                 "networkxml2xmlout", "networkxml2confdata");
diff --git a/tools/virt-xml-validate.in b/tools/virt-xml-validate.in
index 81fde4d..b890b22 100644
--- a/tools/virt-xml-validate.in
+++ b/tools/virt-xml-validate.in
@@ -56,9 +56,12 @@ fi
 if [ -z "$TYPE" ]; then
   ROOT=`xmllint --stream --debug "$XMLFILE" 2>/dev/null | grep "^0 1 " | awk '{ print $3 }'`
   case "$ROOT" in
-     *domainsnapshot*) # Must come first, since *domain* is a substring
+     *domainsnapshot*) # Must be above domain, since *domain* is a substring
         TYPE="domainsnapshot"
         ;;
+     *domainbackup*) # Must be above domain, since *domain* is a substring
+        TYPE="domainbackup"
+        ;;
      *domain*)
         TYPE="domain"
         ;;
-- 
1.8.3.1




More information about the libvir-list mailing list