Signed-off-by: Nikolai Barybin <nikolai.barybin(a)virtuozzo.com>
---
tests/qemublocktest.c | 78 +++++++++++--------
...backing-with-data-file-noopts-srconly.json | 27 +++++++
...e-qcow2-backing-with-data-file-noopts.json | 41 ++++++++++
...le-qcow2-backing-with-data-file-noopts.xml | 35 +++++++++
.../file-qcow2-data-file-noopts-srconly.json | 18 +++++
.../xml2json/file-qcow2-data-file-noopts.json | 27 +++++++
.../xml2json/file-qcow2-data-file-noopts.xml | 24 ++++++
7 files changed, 219 insertions(+), 31 deletions(-)
create mode 100644
tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts-srconly.json
create mode 100644
tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts.json
create mode 100644
tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts.xml
create mode 100644
tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts-srconly.json
create mode 100644 tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts.xml
diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index c581bd1748..46c080fb3b 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -247,6 +247,48 @@ testQemuDiskXMLToJSONFakeSecrets(virStorageSource *src)
static const char *testQemuDiskXMLToJSONPath = abs_srcdir
"/qemublocktestdata/xml2json/";
+static int
+testQemuDiskXMLToPropsCollectDataOne(virStorageSource *src,
+ virDomainDiskDef *disk,
+ struct testQemuDiskXMLToJSONData *data)
+{
+ g_autofree char *backingstore = NULL;
+ g_autoptr(virJSONValue) formatProps = NULL;
+ g_autoptr(virJSONValue) storageProps = NULL;
+ g_autoptr(virJSONValue) storageSrcOnlyProps = NULL;
+
+ if (testQemuDiskXMLToJSONFakeSecrets(src) < 0)
+ return -1;
+
+ if (qemuDomainValidateStorageSource(src, data->qemuCaps) < 0)
+ return -1;
+
+ qemuDomainPrepareDiskSourceData(disk, src);
+
+ if (!(formatProps = qemuBlockStorageSourceGetFormatProps(src, src->backingStore))
||
+ !(storageSrcOnlyProps = qemuBlockStorageSourceGetBackendProps(src,
QEMU_BLOCK_STORAGE_SOURCE_BACKEND_PROPS_TARGET_ONLY)) ||
+ !(storageProps = qemuBlockStorageSourceGetBackendProps(src, 0)) ||
+ !(backingstore = qemuBlockGetBackingStoreString(src, true))) {
+ if (!data->fail) {
+ VIR_TEST_VERBOSE("failed to generate qemu blockdev props");
+ return -1;
+ }
+ } else if (data->fail) {
+ VIR_TEST_VERBOSE("qemu blockdev props should have failed");
+ return -1;
+ }
+
+ VIR_REALLOC_N(data->images, data->nimages + 1);
+
+ data->images[data->nimages].formatprops = g_steal_pointer(&formatProps);
+ data->images[data->nimages].storageprops = g_steal_pointer(&storageProps);
+ data->images[data->nimages].storagepropssrc =
g_steal_pointer(&storageSrcOnlyProps);
+ data->images[data->nimages].backingstore = g_steal_pointer(&backingstore);
+
+ data->nimages++;
+ return 0;
+}
+
static int
testQemuDiskXMLToProps(const void *opaque)
{
@@ -254,9 +296,6 @@ testQemuDiskXMLToProps(const void *opaque)
g_autoptr(virDomainDef) vmdef = NULL;
virDomainDiskDef *disk = NULL;
virStorageSource *n;
- g_autoptr(virJSONValue) formatProps = NULL;
- g_autoptr(virJSONValue) storageProps = NULL;
- g_autoptr(virJSONValue) storageSrcOnlyProps = NULL;
g_autofree char *xmlpath = NULL;
g_autofree char *xmlstr = NULL;
@@ -284,37 +323,12 @@ testQemuDiskXMLToProps(const void *opaque)
}
for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
- g_autofree char *backingstore = NULL;
-
- if (testQemuDiskXMLToJSONFakeSecrets(n) < 0)
- return -1;
-
- if (qemuDomainValidateStorageSource(n, data->qemuCaps) < 0)
+ if (testQemuDiskXMLToPropsCollectDataOne(n, disk, data) < 0)
return -1;
- qemuDomainPrepareDiskSourceData(disk, n);
-
- if (!(formatProps = qemuBlockStorageSourceGetFormatProps(n, n->backingStore))
||
- !(storageSrcOnlyProps = qemuBlockStorageSourceGetBackendProps(n,
QEMU_BLOCK_STORAGE_SOURCE_BACKEND_PROPS_TARGET_ONLY)) ||
- !(storageProps = qemuBlockStorageSourceGetBackendProps(n, 0)) ||
- !(backingstore = qemuBlockGetBackingStoreString(n, true))) {
- if (!data->fail) {
- VIR_TEST_VERBOSE("failed to generate qemu blockdev props");
- return -1;
- }
- } else if (data->fail) {
- VIR_TEST_VERBOSE("qemu blockdev props should have failed");
+ if (n->dataFileStore &&
+ testQemuDiskXMLToPropsCollectDataOne(n->dataFileStore, disk, data) <
0)
return -1;
- }
-
- VIR_REALLOC_N(data->images, data->nimages + 1);
-
- data->images[data->nimages].formatprops =
g_steal_pointer(&formatProps);
- data->images[data->nimages].storageprops =
g_steal_pointer(&storageProps);
- data->images[data->nimages].storagepropssrc =
g_steal_pointer(&storageSrcOnlyProps);
- data->images[data->nimages].backingstore =
g_steal_pointer(&backingstore);
-
- data->nimages++;
}
return 0;
@@ -1123,6 +1137,8 @@ mymain(void)
TEST_DISK_TO_JSON("file-qcow2-backing-chain-unterminated");
TEST_DISK_TO_JSON("file-qcow2-backing-chain-encryption");
TEST_DISK_TO_JSON("network-qcow2-backing-chain-encryption_auth");
+ TEST_DISK_TO_JSON("file-qcow2-data-file-noopts");
+ TEST_DISK_TO_JSON("file-qcow2-backing-with-data-file-noopts");
TEST_DISK_TO_JSON("file-backing_basic-unmap");
TEST_DISK_TO_JSON("file-backing_basic-unmap-detect");
diff --git
a/tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts-srconly.json
b/tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts-srconly.json
new file mode 100644
index 0000000000..1621b4b0fc
--- /dev/null
+++
b/tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts-srconly.json
@@ -0,0 +1,27 @@
+(
+ source only properties:
+ {
+ "driver": "file",
+ "filename": "/var/lib/libvirt/images/rhel7.3.1507297895"
+ }
+ backing store string:
+ /var/lib/libvirt/images/rhel7.3.1507297895
+)
+(
+ source only properties:
+ {
+ "driver": "file",
+ "filename": "/var/lib/libvirt/images/rhel7.3.1484071872"
+ }
+ backing store string:
+ /var/lib/libvirt/images/rhel7.3.1484071872
+)
+(
+ source only properties:
+ {
+ "driver": "file",
+ "filename": "/var/lib/libvirt/images/rhel7.3.1483615252"
+ }
+ backing store string:
+ /var/lib/libvirt/images/rhel7.3.1483615252
+)
diff --git
a/tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts.json
b/tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts.json
new file mode 100644
index 0000000000..b78848ddea
--- /dev/null
+++ b/tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts.json
@@ -0,0 +1,41 @@
+{
+ "node-name": "#block126",
+ "read-only": false,
+ "driver": "qcow2",
+ "file": "#block004",
+ "backing": "#block313"
+}
+{
+ "driver": "file",
+ "filename": "/var/lib/libvirt/images/rhel7.3.1507297895",
+ "node-name": "#block004",
+ "auto-read-only": true,
+ "discard": "unmap"
+}
+{
+ "node-name": "#block313",
+ "read-only": true,
+ "driver": "qcow2",
+ "data-file": "#block556",
+ "file": "#block256"
+}
+{
+ "driver": "file",
+ "filename": "/var/lib/libvirt/images/rhel7.3.1484071872",
+ "node-name": "#block256",
+ "auto-read-only": true,
+ "discard": "unmap"
+}
+{
+ "node-name": "#block556",
+ "read-only": true,
+ "driver": "raw",
+ "file": "#block418"
+}
+{
+ "driver": "file",
+ "filename": "/var/lib/libvirt/images/rhel7.3.1483615252",
+ "node-name": "#block418",
+ "auto-read-only": true,
+ "discard": "unmap"
+}
diff --git a/tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts.xml
b/tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts.xml
new file mode 100644
index 0000000000..4fd561b8bf
--- /dev/null
+++ b/tests/qemublocktestdata/xml2json/file-qcow2-backing-with-data-file-noopts.xml
@@ -0,0 +1,35 @@
+<disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2'/>
+ <source file='/var/lib/libvirt/images/rhel7.3.1507297895'>
+ <privateData>
+ <nodenames>
+ <nodename type='storage' name='#block004'/>
+ <nodename type='format' name='#block126'/>
+ </nodenames>
+ </privateData>
+ </source>
+ <backingStore type='file' index='1'>
+ <format type='qcow2'/>
+ <source file='/var/lib/libvirt/images/rhel7.3.1484071872'>
+ <privateData>
+ <nodenames>
+ <nodename type='storage' name='#block256'/>
+ <nodename type='format' name='#block313'/>
+ </nodenames>
+ </privateData>
+ </source>
+ <dataFileStore type='file'>
+ <format type='raw'/>
+ <source file='/var/lib/libvirt/images/rhel7.3.1483615252'>
+ <privateData>
+ <nodenames>
+ <nodename type='storage' name='#block418'/>
+ <nodename type='format' name='#block556'/>
+ </nodenames>
+ </privateData>
+ </source>
+ </dataFileStore>
+ </backingStore>
+ <target dev='vda' bus='virtio'/>
+ <alias name='virtio-disk0'/>
+</disk>
diff --git a/tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts-srconly.json
b/tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts-srconly.json
new file mode 100644
index 0000000000..f2fd81184b
--- /dev/null
+++ b/tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts-srconly.json
@@ -0,0 +1,18 @@
+(
+ source only properties:
+ {
+ "driver": "file",
+ "filename": "/var/lib/libvirt/images/rhel7.3.1507297895"
+ }
+ backing store string:
+ /var/lib/libvirt/images/rhel7.3.1507297895
+)
+(
+ source only properties:
+ {
+ "driver": "file",
+ "filename": "/var/lib/libvirt/images/rhel7.3.1484071872"
+ }
+ backing store string:
+ /var/lib/libvirt/images/rhel7.3.1484071872
+)
diff --git a/tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts.json
b/tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts.json
new file mode 100644
index 0000000000..ed7782b4f6
--- /dev/null
+++ b/tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts.json
@@ -0,0 +1,27 @@
+{
+ "node-name": "#block126",
+ "read-only": false,
+ "driver": "qcow2",
+ "data-file": "#block313",
+ "file": "#block004"
+}
+{
+ "driver": "file",
+ "filename": "/var/lib/libvirt/images/rhel7.3.1507297895",
+ "node-name": "#block004",
+ "auto-read-only": true,
+ "discard": "unmap"
+}
+{
+ "node-name": "#block313",
+ "read-only": false,
+ "driver": "raw",
+ "file": "#block256"
+}
+{
+ "driver": "file",
+ "filename": "/var/lib/libvirt/images/rhel7.3.1484071872",
+ "node-name": "#block256",
+ "auto-read-only": true,
+ "discard": "unmap"
+}
diff --git a/tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts.xml
b/tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts.xml
new file mode 100644
index 0000000000..6d4c9fd174
--- /dev/null
+++ b/tests/qemublocktestdata/xml2json/file-qcow2-data-file-noopts.xml
@@ -0,0 +1,24 @@
+<disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2'/>
+ <source file='/var/lib/libvirt/images/rhel7.3.1507297895'>
+ <privateData>
+ <nodenames>
+ <nodename type='storage' name='#block004'/>
+ <nodename type='format' name='#block126'/>
+ </nodenames>
+ </privateData>
+ </source>
+ <dataFileStore type='file'>
+ <format type='raw'/>
+ <source file='/var/lib/libvirt/images/rhel7.3.1484071872'>
+ <privateData>
+ <nodenames>
+ <nodename type='storage' name='#block256'/>
+ <nodename type='format' name='#block313'/>
+ </nodenames>
+ </privateData>
+ </source>
+ </dataFileStore>
+ <target dev='vda' bus='virtio'/>
+ <alias name='virtio-disk0'/>
+</disk>
\ No newline at end of file
--
2.43.5