[libvirt] [PATCH 11/11] tests: qemublock: Add testing of 'blockdev-create' generators

Peter Krempa pkrempa at redhat.com
Thu Jul 4 14:26:35 UTC 2019


Test the output against the schema and also against what we expect.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 tests/qemublocktest.c                         | 170 ++++++++++++++++++
 .../imagecreate/luks-encopts.json             |  19 ++
 .../imagecreate/luks-encopts.xml              |  16 ++
 .../imagecreate/luks-noopts.json              |  14 ++
 .../imagecreate/luks-noopts.xml               |  14 ++
 .../imagecreate/network-gluster-qcow2.json    |  28 +++
 .../imagecreate/network-gluster-qcow2.xml     |  13 ++
 .../imagecreate/network-rbd-qcow2.json        |  26 +++
 .../imagecreate/network-rbd-qcow2.xml         |  13 ++
 .../imagecreate/network-sheepdog-qcow2.json   |  20 +++
 .../imagecreate/network-sheepdog-qcow2.xml    |  12 ++
 .../imagecreate/network-ssh-qcow2.json        |  19 ++
 .../imagecreate/network-ssh-qcow2.xml         |  12 ++
 .../imagecreate/qcow2-backing-luks.json       |  15 ++
 .../imagecreate/qcow2-backing-luks.xml        |   1 +
 .../imagecreate/qcow2-backing-raw-nbd.json    |  15 ++
 .../imagecreate/qcow2-backing-raw-nbd.xml     |   1 +
 .../imagecreate/qcow2-backing-raw.json        |  15 ++
 .../imagecreate/qcow2-backing-raw.xml         |   1 +
 .../qcow2-luks-encopts-backing.json           |  24 +++
 .../qcow2-luks-encopts-backing.xml            |   1 +
 .../imagecreate/qcow2-luks-encopts.json       |  22 +++
 .../imagecreate/qcow2-luks-encopts.xml        |  16 ++
 .../imagecreate/qcow2-luks-noopts.json        |  17 ++
 .../imagecreate/qcow2-luks-noopts.xml         |  14 ++
 .../qemublocktestdata/imagecreate/qcow2.json  |  13 ++
 tests/qemublocktestdata/imagecreate/qcow2.xml |  11 ++
 .../imagecreate/raw-nbd.json                  |   4 +
 .../qemublocktestdata/imagecreate/raw-nbd.xml |  12 ++
 tests/qemublocktestdata/imagecreate/raw.json  |   9 +
 tests/qemublocktestdata/imagecreate/raw.xml   |  11 ++
 31 files changed, 578 insertions(+)
 create mode 100644 tests/qemublocktestdata/imagecreate/luks-encopts.json
 create mode 100644 tests/qemublocktestdata/imagecreate/luks-encopts.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/luks-noopts.json
 create mode 100644 tests/qemublocktestdata/imagecreate/luks-noopts.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/network-gluster-qcow2.json
 create mode 100644 tests/qemublocktestdata/imagecreate/network-gluster-qcow2.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/network-rbd-qcow2.json
 create mode 100644 tests/qemublocktestdata/imagecreate/network-rbd-qcow2.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.json
 create mode 100644 tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/network-ssh-qcow2.json
 create mode 100644 tests/qemublocktestdata/imagecreate/network-ssh-qcow2.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-backing-luks.json
 create mode 120000 tests/qemublocktestdata/imagecreate/qcow2-backing-luks.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-backing-raw-nbd.json
 create mode 120000 tests/qemublocktestdata/imagecreate/qcow2-backing-raw-nbd.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-backing-raw.json
 create mode 120000 tests/qemublocktestdata/imagecreate/qcow2-backing-raw.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-luks-encopts-backing.json
 create mode 120000 tests/qemublocktestdata/imagecreate/qcow2-luks-encopts-backing.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-luks-encopts.json
 create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-luks-encopts.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-luks-noopts.json
 create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-luks-noopts.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/qcow2.json
 create mode 100644 tests/qemublocktestdata/imagecreate/qcow2.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/raw-nbd.json
 create mode 100644 tests/qemublocktestdata/imagecreate/raw-nbd.xml
 create mode 100644 tests/qemublocktestdata/imagecreate/raw.json
 create mode 100644 tests/qemublocktestdata/imagecreate/raw.xml

diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index 5c381d1e3b..cd5047a545 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -342,6 +342,138 @@ testQemuDiskXMLToPropsValidateFile(const void *opaque)
 }


+struct testQemuImageCreateData {
+    const char *name;
+    const char *backingname;
+    virHashTablePtr schema;
+    virJSONValuePtr schemaroot;
+    virQEMUDriverPtr driver;
+    virQEMUCapsPtr qemuCaps;
+};
+
+static const char *testQemuImageCreatePath = abs_srcdir "/qemublocktestdata/imagecreate/";
+
+static virStorageSourcePtr
+testQemuImageCreateLoadDiskXML(const char *name,
+                               virDomainXMLOptionPtr xmlopt)
+
+{
+    virDomainSnapshotDiskDefPtr diskdef = NULL;
+    VIR_AUTOPTR(xmlDoc) doc = NULL;
+    VIR_AUTOPTR(xmlXPathContext) ctxt = NULL;
+    xmlNodePtr node;
+    VIR_AUTOFREE(char *) xmlpath = NULL;
+    virStorageSourcePtr ret = NULL;
+
+    if (virAsprintf(&xmlpath, "%s%s.xml",
+                    testQemuImageCreatePath, name) < 0)
+        return NULL;
+
+    if (!(doc = virXMLParseFileCtxt(xmlpath, &ctxt)))
+        return NULL;
+
+    if (!(node = virXPathNode("//disk", ctxt))) {
+        VIR_TEST_VERBOSE("failed to find <source> element\n");
+        return NULL;
+    }
+
+    if (VIR_ALLOC(diskdef) < 0)
+        return NULL;
+
+    if (virDomainSnapshotDiskDefParseXML(node, ctxt, diskdef,
+                                         VIR_DOMAIN_DEF_PARSE_STATUS,
+                                         xmlopt) == 0)
+        VIR_STEAL_PTR(ret, diskdef->src);
+
+    virDomainSnapshotDiskDefFree(diskdef);
+    return ret;
+}
+
+
+static int
+testQemuImageCreate(const void *opaque)
+{
+    struct testQemuImageCreateData *data = (void *) opaque;
+    VIR_AUTOPTR(virJSONValue) protocolprops = NULL;
+    VIR_AUTOPTR(virJSONValue) formatprops = NULL;
+    VIR_AUTOUNREF(virStorageSourcePtr) src = NULL;
+    VIR_AUTOCLEAN(virBuffer) debug = VIR_BUFFER_INITIALIZER;
+    VIR_AUTOCLEAN(virBuffer) actualbuf = VIR_BUFFER_INITIALIZER;
+    VIR_AUTOFREE(char *) jsonprotocol = NULL;
+    VIR_AUTOFREE(char *) jsonformat = NULL;
+    VIR_AUTOFREE(char *) actual = NULL;
+    VIR_AUTOFREE(char *) jsonpath = NULL;
+
+    if (!(src = testQemuImageCreateLoadDiskXML(data->name, data->driver->xmlopt)))
+        return -1;
+
+    if (data->backingname &&
+        !(src->backingStore = testQemuImageCreateLoadDiskXML(data->backingname,
+                                                             data->driver->xmlopt)))
+        return -1;
+
+    if (testQemuDiskXMLToJSONFakeSecrets(src) < 0)
+        return -1;
+
+    /* fake some sizes */
+    src->capacity = 1337;
+    src->physical = 42;
+
+    if (qemuDomainValidateStorageSource(src, data->qemuCaps) < 0)
+        return -1;
+
+    if (qemuBlockStorageSourceCreateGetStorageProps(src, &protocolprops) < 0)
+        return -1;
+
+    if (qemuBlockStorageSourceCreateGetFormatProps(src, src->backingStore, &formatprops) < 0)
+        return -1;
+
+    if (formatprops) {
+        if (!(jsonformat = virJSONValueToString(formatprops, true)))
+            return -1;
+
+        if (testQEMUSchemaValidate(formatprops, data->schemaroot, data->schema,
+                                   &debug) < 0) {
+            VIR_AUTOFREE(char *) debugmsg = virBufferContentAndReset(&debug);
+            VIR_TEST_VERBOSE("blockdev-create format json does not conform to QAPI schema");
+            VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s",
+                           jsonformat, NULLSTR(debugmsg));
+            return -1;
+        }
+        virBufferFreeAndReset(&debug);
+    }
+
+    if (protocolprops) {
+        if (!(jsonprotocol = virJSONValueToString(protocolprops, true)))
+            return -1;
+
+        if (testQEMUSchemaValidate(protocolprops, data->schemaroot, data->schema,
+                                   &debug) < 0) {
+            VIR_AUTOFREE(char *) debugmsg = virBufferContentAndReset(&debug);
+            VIR_TEST_VERBOSE("blockdev-create protocol json does not conform to QAPI schema");
+            VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s",
+                           jsonprotocol, NULLSTR(debugmsg));
+            return -1;
+        }
+        virBufferFreeAndReset(&debug);
+    }
+
+    virBufferStrcat(&actualbuf, "protocol:\n", NULLSTR(jsonprotocol),
+                    "\nformat:\n", NULLSTR(jsonformat), NULL);
+    virBufferTrim(&actualbuf, "\n", -1);
+    virBufferAddLit(&actualbuf, "\n");
+
+    if (virAsprintf(&jsonpath, "%s%s.json",
+                    testQemuImageCreatePath, data->name) < 0)
+        return -1;
+
+    if (!(actual = virBufferContentAndReset(&actualbuf)))
+        return -1;
+
+    return virTestCompareToFile(actual, jsonpath);
+}
+
+
 static int
 testQemuDiskXMLToPropsValidateFileSrcOnly(const void *opaque)
 {
@@ -383,6 +515,7 @@ mymain(void)
     virQEMUDriver driver;
     struct testBackingXMLjsonXMLdata xmljsonxmldata;
     struct testQemuDiskXMLToJSONData diskxmljsondata;
+    struct testQemuImageCreateData imagecreatedata;
     char *capslatest_x86_64 = NULL;
     virQEMUCapsPtr caps_x86_64 = NULL;

@@ -390,6 +523,7 @@ mymain(void)
         return EXIT_FAILURE;

     diskxmljsondata.driver = &driver;
+    imagecreatedata.driver = &driver;

     if (!(capslatest_x86_64 = testQemuGetLatestCapsForArch("x86_64", "xml")))
         return EXIT_FAILURE;
@@ -401,6 +535,7 @@ mymain(void)
         return EXIT_FAILURE;

     diskxmljsondata.qemuCaps = caps_x86_64;
+    imagecreatedata.qemuCaps = caps_x86_64;

     virTestCounterReset("qemu storage source xml->json->xml ");

@@ -548,6 +683,41 @@ mymain(void)
     TEST_DISK_TO_JSON("block-raw-noopts");
     TEST_DISK_TO_JSON("block-raw-reservations");

+# define TEST_IMAGE_CREATE(testname, testbacking) \
+    do { \
+        imagecreatedata.name = testname; \
+        imagecreatedata.backingname = testbacking; \
+        if (virTestRun("image create xml to props " testname, testQemuImageCreate, \
+                       &imagecreatedata) < 0) \
+            ret = -1; \
+    } while (0)
+    imagecreatedata.schema = diskxmljsondata.schema;
+    if (virQEMUQAPISchemaPathGet("blockdev-create/arg-type/options",
+                                 imagecreatedata.schema,
+                                 &imagecreatedata.schemaroot) < 0 ||
+        !imagecreatedata.schemaroot) {
+        VIR_TEST_VERBOSE("failed to find schema entry for blockdev-create\n");
+        ret = -1;
+        goto cleanup;
+    }
+
+    TEST_IMAGE_CREATE("raw", NULL);
+    TEST_IMAGE_CREATE("raw-nbd", NULL);
+    TEST_IMAGE_CREATE("luks-noopts", NULL);
+    TEST_IMAGE_CREATE("luks-encopts", NULL);
+    TEST_IMAGE_CREATE("qcow2", NULL);
+    TEST_IMAGE_CREATE("qcow2-luks-noopts", NULL);
+    TEST_IMAGE_CREATE("qcow2-luks-encopts", NULL);
+    TEST_IMAGE_CREATE("qcow2-backing-raw", "raw");
+    TEST_IMAGE_CREATE("qcow2-backing-raw-nbd", "raw-nbd");
+    TEST_IMAGE_CREATE("qcow2-backing-luks", "luks-noopts");
+    TEST_IMAGE_CREATE("qcow2-luks-encopts-backing", "qcow2");
+
+    TEST_IMAGE_CREATE("network-gluster-qcow2", NULL);
+    TEST_IMAGE_CREATE("network-rbd-qcow2", NULL);
+    TEST_IMAGE_CREATE("network-ssh-qcow2", NULL);
+    TEST_IMAGE_CREATE("network-sheepdog-qcow2", NULL);
+
  cleanup:
     virHashFree(diskxmljsondata.schema);
     qemuTestDriverFree(&driver);
diff --git a/tests/qemublocktestdata/imagecreate/luks-encopts.json b/tests/qemublocktestdata/imagecreate/luks-encopts.json
new file mode 100644
index 0000000000..f065ad89a7
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/luks-encopts.json
@@ -0,0 +1,19 @@
+protocol:
+{
+  "driver": "file",
+  "filename": "/var/lib/libvirt/images/i.img",
+  "size": 42
+}
+
+format:
+{
+  "key-secret": "0123456789ABCDEF0123456789ABCDE-encalias",
+  "cipher-alg": "serpent-256",
+  "cipher-mode": "cbc",
+  "hash-alg": "sha256",
+  "ivgen-alg": "plain64",
+  "ivgen-hash-alg": "sha256",
+  "driver": "luks",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337
+}
diff --git a/tests/qemublocktestdata/imagecreate/luks-encopts.xml b/tests/qemublocktestdata/imagecreate/luks-encopts.xml
new file mode 100644
index 0000000000..bb0ee54adc
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/luks-encopts.xml
@@ -0,0 +1,16 @@
+<disk device='disk' name='vda'>
+  <driver type='raw'/>
+  <source file='/var/lib/libvirt/images/i.img'>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+    <encryption format='luks'>
+      <secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/>
+      <cipher name='serpent' size='256' mode='cbc' hash='sha256'/>
+      <ivgen name='plain64' hash='sha256'/>
+    </encryption>
+  </source>
+</disk>
diff --git a/tests/qemublocktestdata/imagecreate/luks-noopts.json b/tests/qemublocktestdata/imagecreate/luks-noopts.json
new file mode 100644
index 0000000000..1ea1948119
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/luks-noopts.json
@@ -0,0 +1,14 @@
+protocol:
+{
+  "driver": "file",
+  "filename": "/var/lib/libvirt/images/i.img",
+  "size": 42
+}
+
+format:
+{
+  "key-secret": "0123456789ABCDEF0123456789ABCDE-encalias",
+  "driver": "luks",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337
+}
diff --git a/tests/qemublocktestdata/imagecreate/luks-noopts.xml b/tests/qemublocktestdata/imagecreate/luks-noopts.xml
new file mode 100644
index 0000000000..ac224b02de
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/luks-noopts.xml
@@ -0,0 +1,14 @@
+<disk device='disk' name='vda'>
+  <driver type='raw'/>
+  <source file='/var/lib/libvirt/images/i.img'>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+    <encryption format='luks'>
+      <secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/>
+    </encryption>
+  </source>
+</disk>
diff --git a/tests/qemublocktestdata/imagecreate/network-gluster-qcow2.json b/tests/qemublocktestdata/imagecreate/network-gluster-qcow2.json
new file mode 100644
index 0000000000..aee7bfd401
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/network-gluster-qcow2.json
@@ -0,0 +1,28 @@
+protocol:
+{
+  "driver": "gluster",
+  "location": {
+    "volume": "asdf",
+    "path": "i.qcow2",
+    "server": [
+      {
+        "type": "inet",
+        "host": "example.com",
+        "port": "1234"
+      },
+      {
+        "type": "inet",
+        "host": "alternate.example.com",
+        "port": "3214"
+      }
+    ]
+  },
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337
+}
diff --git a/tests/qemublocktestdata/imagecreate/network-gluster-qcow2.xml b/tests/qemublocktestdata/imagecreate/network-gluster-qcow2.xml
new file mode 100644
index 0000000000..f3dbf24180
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/network-gluster-qcow2.xml
@@ -0,0 +1,13 @@
+<disk device='disk' name='vda' type='network'>
+  <driver type='qcow2'/>
+  <source protocol='gluster' name='asdf/i.qcow2'>
+    <host name='example.com' port='1234'/>
+    <host name='alternate.example.com' port='3214'/>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+  </source>
+</disk>
diff --git a/tests/qemublocktestdata/imagecreate/network-rbd-qcow2.json b/tests/qemublocktestdata/imagecreate/network-rbd-qcow2.json
new file mode 100644
index 0000000000..56d9c0f1ed
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/network-rbd-qcow2.json
@@ -0,0 +1,26 @@
+protocol:
+{
+  "driver": "rbd",
+  "location": {
+    "pool": "asdf",
+    "image": "i.qcow2",
+    "server": [
+      {
+        "host": "example.com",
+        "port": "1234"
+      },
+      {
+        "host": "alternate.example.com",
+        "port": "4321"
+      }
+    ]
+  },
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337
+}
diff --git a/tests/qemublocktestdata/imagecreate/network-rbd-qcow2.xml b/tests/qemublocktestdata/imagecreate/network-rbd-qcow2.xml
new file mode 100644
index 0000000000..0f6c1ddb98
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/network-rbd-qcow2.xml
@@ -0,0 +1,13 @@
+<disk device='disk' name='vda' type='network'>
+  <driver type='qcow2'/>
+  <source protocol='rbd' name='asdf/i.qcow2'>
+    <host name='example.com' port='1234'/>
+    <host name='alternate.example.com' port='4321'/>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+  </source>
+</disk>
diff --git a/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.json b/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.json
new file mode 100644
index 0000000000..b7272625a2
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.json
@@ -0,0 +1,20 @@
+protocol:
+{
+  "driver": "sheepdog",
+  "location": {
+    "server": {
+      "type": "inet",
+      "host": "example.com",
+      "port": "1234"
+    },
+    "vdi": "asdf/i.qcow2"
+  },
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337
+}
diff --git a/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.xml b/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.xml
new file mode 100644
index 0000000000..1145daafdd
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/network-sheepdog-qcow2.xml
@@ -0,0 +1,12 @@
+<disk device='disk' name='vda' type='network'>
+  <driver type='qcow2'/>
+  <source protocol='sheepdog' name='asdf/i.qcow2'>
+    <host name='example.com' port='1234'/>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+  </source>
+</disk>
diff --git a/tests/qemublocktestdata/imagecreate/network-ssh-qcow2.json b/tests/qemublocktestdata/imagecreate/network-ssh-qcow2.json
new file mode 100644
index 0000000000..31416ed4fc
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/network-ssh-qcow2.json
@@ -0,0 +1,19 @@
+protocol:
+{
+  "driver": "ssh",
+  "location": {
+    "path": "asdf/i.qcow2",
+    "server": {
+      "host": "example.com",
+      "port": "1234"
+    }
+  },
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337
+}
diff --git a/tests/qemublocktestdata/imagecreate/network-ssh-qcow2.xml b/tests/qemublocktestdata/imagecreate/network-ssh-qcow2.xml
new file mode 100644
index 0000000000..4c44f81c81
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/network-ssh-qcow2.xml
@@ -0,0 +1,12 @@
+<disk device='disk' name='vda' type='network'>
+  <driver type='qcow2'/>
+  <source protocol='ssh' name='asdf/i.qcow2'>
+    <host name='example.com' port='1234'/>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+  </source>
+</disk>
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-luks.json b/tests/qemublocktestdata/imagecreate/qcow2-backing-luks.json
new file mode 100644
index 0000000000..63ba35dc79
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-luks.json
@@ -0,0 +1,15 @@
+protocol:
+{
+  "driver": "file",
+  "filename": "/var/lib/libvirt/images/i.qcow2",
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337,
+  "backing-file": "/var/lib/libvirt/images/i.img",
+  "backing-fmt": "luks"
+}
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-luks.xml b/tests/qemublocktestdata/imagecreate/qcow2-backing-luks.xml
new file mode 120000
index 0000000000..5769c2c866
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-luks.xml
@@ -0,0 +1 @@
+qcow2.xml
\ No newline at end of file
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-nbd.json b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-nbd.json
new file mode 100644
index 0000000000..34ce74a548
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-nbd.json
@@ -0,0 +1,15 @@
+protocol:
+{
+  "driver": "file",
+  "filename": "/var/lib/libvirt/images/i.qcow2",
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337,
+  "backing-file": "json:{\"driver\":\"nbd\",\"server\":{\"type\":\"inet\",\"host\":\"example.com\",\"port\":\"1234\"}}",
+  "backing-fmt": "raw"
+}
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-nbd.xml b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-nbd.xml
new file mode 120000
index 0000000000..5769c2c866
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-nbd.xml
@@ -0,0 +1 @@
+qcow2.xml
\ No newline at end of file
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-raw.json b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw.json
new file mode 100644
index 0000000000..8176c8dadd
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw.json
@@ -0,0 +1,15 @@
+protocol:
+{
+  "driver": "file",
+  "filename": "/var/lib/libvirt/images/i.qcow2",
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337,
+  "backing-file": "/var/lib/libvirt/images/i.img",
+  "backing-fmt": "raw"
+}
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-raw.xml b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw.xml
new file mode 120000
index 0000000000..5769c2c866
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw.xml
@@ -0,0 +1 @@
+qcow2.xml
\ No newline at end of file
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts-backing.json b/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts-backing.json
new file mode 100644
index 0000000000..a57617dfac
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts-backing.json
@@ -0,0 +1,24 @@
+protocol:
+{
+  "driver": "file",
+  "filename": "/var/lib/libvirt/images/i.qcow2",
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337,
+  "backing-file": "/var/lib/libvirt/images/i.qcow2",
+  "backing-fmt": "qcow2",
+  "encrypt": {
+    "key-secret": "0123456789ABCDEF0123456789ABCDE-encalias",
+    "cipher-alg": "serpent-256",
+    "cipher-mode": "cbc",
+    "hash-alg": "sha256",
+    "ivgen-alg": "plain64",
+    "ivgen-hash-alg": "sha256",
+    "format": "luks"
+  }
+}
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts-backing.xml b/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts-backing.xml
new file mode 120000
index 0000000000..6ea018cec2
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts-backing.xml
@@ -0,0 +1 @@
+qcow2-luks-encopts.xml
\ No newline at end of file
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts.json b/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts.json
new file mode 100644
index 0000000000..8796726fcb
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts.json
@@ -0,0 +1,22 @@
+protocol:
+{
+  "driver": "file",
+  "filename": "/var/lib/libvirt/images/i.qcow2",
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337,
+  "encrypt": {
+    "key-secret": "0123456789ABCDEF0123456789ABCDE-encalias",
+    "cipher-alg": "serpent-256",
+    "cipher-mode": "cbc",
+    "hash-alg": "sha256",
+    "ivgen-alg": "plain64",
+    "ivgen-hash-alg": "sha256",
+    "format": "luks"
+  }
+}
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts.xml b/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts.xml
new file mode 100644
index 0000000000..d6616bd164
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-luks-encopts.xml
@@ -0,0 +1,16 @@
+<disk device='disk' name='vda'>
+  <driver type='qcow2'/>
+  <source file='/var/lib/libvirt/images/i.qcow2'>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+    <encryption format='luks'>
+      <secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/>
+      <cipher name='serpent' size='256' mode='cbc' hash='sha256'/>
+      <ivgen name='plain64' hash='sha256'/>
+    </encryption>
+  </source>
+</disk>
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-luks-noopts.json b/tests/qemublocktestdata/imagecreate/qcow2-luks-noopts.json
new file mode 100644
index 0000000000..f9caaee6bb
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-luks-noopts.json
@@ -0,0 +1,17 @@
+protocol:
+{
+  "driver": "file",
+  "filename": "/var/lib/libvirt/images/i.qcow2",
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337,
+  "encrypt": {
+    "key-secret": "0123456789ABCDEF0123456789ABCDE-encalias",
+    "format": "luks"
+  }
+}
diff --git a/tests/qemublocktestdata/imagecreate/qcow2-luks-noopts.xml b/tests/qemublocktestdata/imagecreate/qcow2-luks-noopts.xml
new file mode 100644
index 0000000000..e2d1c42424
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2-luks-noopts.xml
@@ -0,0 +1,14 @@
+<disk device='disk' name='vda'>
+  <driver type='qcow2'/>
+  <source file='/var/lib/libvirt/images/i.qcow2'>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+    <encryption format='luks'>
+      <secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/>
+    </encryption>
+  </source>
+</disk>
diff --git a/tests/qemublocktestdata/imagecreate/qcow2.json b/tests/qemublocktestdata/imagecreate/qcow2.json
new file mode 100644
index 0000000000..7142cf67b6
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2.json
@@ -0,0 +1,13 @@
+protocol:
+{
+  "driver": "file",
+  "filename": "/var/lib/libvirt/images/i.qcow2",
+  "size": 42
+}
+
+format:
+{
+  "driver": "qcow2",
+  "file": "0123456789ABCDEF0123456789ABCDE",
+  "size": 1337
+}
diff --git a/tests/qemublocktestdata/imagecreate/qcow2.xml b/tests/qemublocktestdata/imagecreate/qcow2.xml
new file mode 100644
index 0000000000..f3c235f82f
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/qcow2.xml
@@ -0,0 +1,11 @@
+<disk device='disk' name='vda'>
+  <driver type='qcow2'/>
+  <source file='/var/lib/libvirt/images/i.qcow2'>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+  </source>
+</disk>
diff --git a/tests/qemublocktestdata/imagecreate/raw-nbd.json b/tests/qemublocktestdata/imagecreate/raw-nbd.json
new file mode 100644
index 0000000000..d1e089e3e3
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/raw-nbd.json
@@ -0,0 +1,4 @@
+protocol:
+<null>
+format:
+<null>
diff --git a/tests/qemublocktestdata/imagecreate/raw-nbd.xml b/tests/qemublocktestdata/imagecreate/raw-nbd.xml
new file mode 100644
index 0000000000..256bf23797
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/raw-nbd.xml
@@ -0,0 +1,12 @@
+<disk device='disk' name='vda' type='network'>
+  <driver type='raw'/>
+  <source protocol='nbd'>
+    <host name='example.com' port='1234'/>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+  </source>
+</disk>
diff --git a/tests/qemublocktestdata/imagecreate/raw.json b/tests/qemublocktestdata/imagecreate/raw.json
new file mode 100644
index 0000000000..06abb25ab9
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/raw.json
@@ -0,0 +1,9 @@
+protocol:
+{
+  "driver": "file",
+  "filename": "/var/lib/libvirt/images/i.img",
+  "size": 42
+}
+
+format:
+<null>
diff --git a/tests/qemublocktestdata/imagecreate/raw.xml b/tests/qemublocktestdata/imagecreate/raw.xml
new file mode 100644
index 0000000000..3a91600bd8
--- /dev/null
+++ b/tests/qemublocktestdata/imagecreate/raw.xml
@@ -0,0 +1,11 @@
+<disk device='disk' name='vda'>
+  <driver type='raw'/>
+  <source file='/var/lib/libvirt/images/i.img'>
+    <privateData>
+      <nodenames>
+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
+      </nodenames>
+    </privateData>
+  </source>
+</disk>
-- 
2.21.0




More information about the libvir-list mailing list