
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@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.