On Wed, Nov 20, 2024 at 18:48:49 +0300, Nikolai Barybin via Devel wrote:
- qemuxmlconftest: check various xml definitions of dataFileStore:
types file, block, network and the case when data-file belongs
to qcow2 backing image
- virstoragetest: create qcow2 image chains and check that data files
are properly probed by metadata parser
- qemuxmlactivetest: check that status files will contain data files'
node names
Each of the above should have been a separate patch. I'll thus split up
this into 3 patches, each for it's own test program.
Signed-off-by: Nikolai Barybin <nikolai.barybin(a)virtuozzo.com>
---
[...]
+static void
+testPrepImagesWithQcow2DataFiles(char **chains)
+{
+ g_autoptr(virCommand) cmdData1 = NULL;
+ g_autoptr(virCommand) cmdData2 = NULL;
+ g_autoptr(virCommand) cmdqcow2_1 = NULL;
+ g_autoptr(virCommand) cmdqcow2_2_backing = NULL;
+ g_autoptr(virCommand) cmdqcow2_2 = NULL;
+ g_autofree char *data1 = g_strdup_printf("%s/data-1", datadir);
+ g_autofree char *data2 = g_strdup_printf("%s/data-2", datadir);
+ g_autofree char *qcow2_1 = g_strdup_printf("%s/qcow2-1", datadir);
+ g_autofree char *qcow2_1_opt_create =
g_strdup_printf("data_file=%s,data_file_raw=true", data1);
+ g_autofree char *qcow2_2_backing = g_strdup_printf("%s/qcow2-2-backing",
datadir);
+ g_autofree char *qcow2_2_backing_opt_create =
g_strdup_printf("data_file=%s,data_file_raw=true", data2);
+ g_autofree char *qcow2_2 = g_strdup_printf("%s/qcow2-2", datadir);
+ g_autofree char *qemuimg = virFindFileInPath("qemu-img");
+
+ if (!qemuimg)
+ return;
+
+ /* Clean up from any earlier failed tests */
+ virFileDeleteTree(datadir);
+
+ if (g_mkdir_with_parents(datadir, 0777) < 0) {
+ VIR_TEST_VERBOSE("unable to create directory '%s'\n",
datadir);
+ return;
+ }
+
+ /* create 2 chains containing data-file
+ * 1. qcow2 image with data-file
+ * 2. qcow2 image with backing qcow2 image containing data-file */
+ cmdData1 = virCommandNewArgList(qemuimg, "create",
+ "-f", "raw",
+ data1, "1k", NULL);
+ cmdData2 = virCommandNewArgList(qemuimg, "create",
+ "-f", "raw",
+ data2, "1k", NULL);
+
+ cmdqcow2_1 = virCommandNewArgList(qemuimg, "create",
+ "-f", "qcow2",
+ "-o", qcow2_1_opt_create,
+ qcow2_1, "1k", NULL);
+
+ cmdqcow2_2_backing = virCommandNewArgList(qemuimg, "create",
+ "-f", "qcow2",
+ "-o",
qcow2_2_backing_opt_create,
+ qcow2_2_backing, "1k", NULL);
+
+ cmdqcow2_2 = virCommandNewArgList(qemuimg, "create",
+ "-f", "qcow2",
+ "-F", "qcow2",
+ "-b", qcow2_2_backing,
+ qcow2_2, NULL);
+
+ if (virCommandRun(cmdData1, NULL) < 0 ||
+ virCommandRun(cmdData2, NULL) < 0 ||
+ virCommandRun(cmdqcow2_1, NULL) < 0 ||
+ virCommandRun(cmdqcow2_2_backing, NULL) < 0 ||
+ virCommandRun(cmdqcow2_2, NULL) < 0) {
+ VIR_TEST_VERBOSE("failed to create backing chain with data file in
'%s'\n", datadir);
+ return;
While all of the above will be deleted ... this error handling doesn't
make sense, as you don't actually signal a failure to the caller,
letting it fail later.
+ }
+
+ chains[0] = g_steal_pointer(&qcow2_1);
+ chains[1] = g_steal_pointer(&qcow2_2);
+
+ return;
+}
Historically I've refactored virstoragetest to avoid use of 'qemu-img'
so I'll delete all of the above and replace it with example images
directly commited into the repository as we do with most of the other
cases.