]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
tests: virstoragetest: Add tests for detection of qcow2 'data_file' feature
authorNikolai Barybin <nikolai.barybin@virtuozzo.com>
Wed, 20 Nov 2024 15:48:49 +0000 (18:48 +0300)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 25 Nov 2024 21:31:18 +0000 (22:31 +0100)
Add two test images showing the use of 'data_file' and 'data_file_raw'
(although the latter is not detected by libvirt) so that we can see that
the qcow2 metadata parser and backing chain populators work correctly.

The example files were created by:

 qemu-img create  -f qcow2 -o data_file=raw,data_file_raw=true,preallocation=off datafile.qcow2 1k
 qemu-img create  -f qcow2 -o data_file=rawpreallocation=off -F qcow2 -b datafile.qcow2 qcow2datafile-datafile.qcow2

Note that 'data_file_raw' is mutually exclusive with backing images.

Signed-off-by: Nikolai Barybin <nikolai.barybin@virtuozzo.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
tests/virstoragetest.c
tests/virstoragetestdata/images/datafile.qcow2 [new file with mode: 0644]
tests/virstoragetestdata/images/qcow2datafile-datafile.qcow2 [new file with mode: 0644]
tests/virstoragetestdata/out/qcow2-datafile [new file with mode: 0644]
tests/virstoragetestdata/out/qcow2datafile-qcow2_qcow2-datafile [new file with mode: 0644]

index 75d04e803042e41821cfc8412d03d9d94797b5e7..4ec837eefb3f87f503658d9933b85e08be755921 100644 (file)
@@ -203,6 +203,26 @@ testStorageChain(const void *args)
                           NULLSTR(virStorageFileFormatTypeToString(elt->format)),
                           virStorageNetProtocolTypeToString(elt->protocol),
                           NULLSTR(elt->nhosts ? elt->hosts[0].name : NULL));
+
+        if (elt->dataFileStore) {
+            g_autofree char *strippedPathDataFileRaw = virTestStablePath(elt->dataFileRaw);
+            g_autofree char *strippedPathDataFile = virTestStablePath(elt->dataFileStore->path);
+
+            virBufferAsprintf(&buf,
+                              "dataFileRaw: %s\n\n\n"
+                              "dataFileStoreSource:\n"
+                              "path: %s\n"
+                              "capacity: %lld\n"
+                              "encryption: %d\n"
+                              "type:%s\n"
+                              "format:%s\n",
+                              strippedPathDataFileRaw,
+                              strippedPathDataFile,
+                              elt->dataFileStore->capacity,
+                              !!elt->dataFileStore->encryption,
+                              NULLSTR(virStorageTypeToString(elt->dataFileStore->type)),
+                              NULLSTR(virStorageFileFormatTypeToString(elt->dataFileStore->format)));
+        }
     }
 
     virBufferTrim(&buf, "\n");
@@ -464,6 +484,16 @@ mymain(void)
 
     testCleanupImages();
 
+    /* qcow2 + datafile
+     * 1) qcow2 image with data file
+     * 2) qcow2 -> qcow2 backing image with data file */
+    TEST_CHAIN("qcow2-datafile",
+               abs_srcdir "/virstoragetestdata/images/datafile.qcow2",
+               VIR_STORAGE_FILE_QCOW2, EXP_PASS);
+    TEST_CHAIN("qcow2datafile-qcow2_qcow2-datafile",
+               abs_srcdir "/virstoragetestdata/images/qcow2datafile-datafile.qcow2",
+               VIR_STORAGE_FILE_QCOW2, EXP_PASS);
+
     /* Test various combinations of qcow2 images with missing 'backing_format' */
     TEST_CHAIN("qcow2-qcow2_qcow2-qcow2_qcow2-auto",
                abs_srcdir "/virstoragetestdata/images/qcow2_qcow2-qcow2_qcow2-auto.qcow2",
diff --git a/tests/virstoragetestdata/images/datafile.qcow2 b/tests/virstoragetestdata/images/datafile.qcow2
new file mode 100644 (file)
index 0000000..32f3acf
Binary files /dev/null and b/tests/virstoragetestdata/images/datafile.qcow2 differ
diff --git a/tests/virstoragetestdata/images/qcow2datafile-datafile.qcow2 b/tests/virstoragetestdata/images/qcow2datafile-datafile.qcow2
new file mode 100644 (file)
index 0000000..1fce3ff
Binary files /dev/null and b/tests/virstoragetestdata/images/qcow2datafile-datafile.qcow2 differ
diff --git a/tests/virstoragetestdata/out/qcow2-datafile b/tests/virstoragetestdata/out/qcow2-datafile
new file mode 100644 (file)
index 0000000..d0f46f7
--- /dev/null
@@ -0,0 +1,20 @@
+path:ABS_SRCDIR/virstoragetestdata/images/datafile.qcow2
+backingStoreRaw: <null>
+backingStoreRawFormat: none(0)
+capacity: 1024
+encryption: 0
+relPath:<null>
+type:file
+format:qcow2
+protocol:none
+hostname:<null>
+
+dataFileRaw: raw
+
+
+dataFileStoreSource:
+path: ABS_SRCDIR/virstoragetestdata/images/raw
+capacity: 0
+encryption: 0
+type:file
+format:raw
diff --git a/tests/virstoragetestdata/out/qcow2datafile-qcow2_qcow2-datafile b/tests/virstoragetestdata/out/qcow2datafile-qcow2_qcow2-datafile
new file mode 100644 (file)
index 0000000..cc8bac3
--- /dev/null
@@ -0,0 +1,31 @@
+path:ABS_SRCDIR/virstoragetestdata/images/qcow2datafile-datafile.qcow2
+backingStoreRaw: datafile.qcow2
+backingStoreRawFormat: qcow2(14)
+capacity: 1024
+encryption: 0
+relPath:<null>
+type:file
+format:qcow2
+protocol:none
+hostname:<null>
+
+path:ABS_SRCDIR/virstoragetestdata/images/datafile.qcow2
+backingStoreRaw: <null>
+backingStoreRawFormat: none(0)
+capacity: 1024
+encryption: 0
+relPath:datafile.qcow2
+type:file
+format:qcow2
+protocol:none
+hostname:<null>
+
+dataFileRaw: raw
+
+
+dataFileStoreSource:
+path: ABS_SRCDIR/virstoragetestdata/images/raw
+capacity: 0
+encryption: 0
+type:file
+format:raw