From 56e1b4c30faedc6b18246ae43f2c85e68889d927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Mon, 18 Feb 2013 13:43:28 +0100 Subject: [PATCH] storage: add test for qemu-img command line generation --- tests/Makefile.am | 9 + tests/storagevolxml2argvdata/pool-dir.xml | 18 ++ tests/storagevolxml2argvdata/qcow2-flag.argv | 1 + .../qcow2-nobacking-convert-flag.argv | 1 + .../qcow2-nobacking-convert-none.argv | 1 + .../qcow2-nobacking-convert-prealloc.argv | 1 + .../qcow2-nobacking-flag.argv | 1 + .../qcow2-nobacking-none.argv | 1 + .../qcow2-nobacking-prealloc.argv | 1 + tests/storagevolxml2argvdata/qcow2-none.argv | 1 + tests/storagevolxml2argvdata/qcow2.argv | 1 + tests/storagevolxml2argvdata/vol-file.xml | 20 ++ .../vol-qcow2-nobacking.xml | 21 ++ tests/storagevolxml2argvdata/vol-qcow2.xml | 31 +++ tests/storagevolxml2argvtest.c | 189 ++++++++++++++++++ 15 files changed, 297 insertions(+) create mode 100644 tests/storagevolxml2argvdata/pool-dir.xml create mode 100644 tests/storagevolxml2argvdata/qcow2-flag.argv create mode 100644 tests/storagevolxml2argvdata/qcow2-nobacking-convert-flag.argv create mode 100644 tests/storagevolxml2argvdata/qcow2-nobacking-convert-none.argv create mode 100644 tests/storagevolxml2argvdata/qcow2-nobacking-convert-prealloc.argv create mode 100644 tests/storagevolxml2argvdata/qcow2-nobacking-flag.argv create mode 100644 tests/storagevolxml2argvdata/qcow2-nobacking-none.argv create mode 100644 tests/storagevolxml2argvdata/qcow2-nobacking-prealloc.argv create mode 100644 tests/storagevolxml2argvdata/qcow2-none.argv create mode 100644 tests/storagevolxml2argvdata/qcow2.argv create mode 100644 tests/storagevolxml2argvdata/vol-file.xml create mode 100644 tests/storagevolxml2argvdata/vol-qcow2-nobacking.xml create mode 100644 tests/storagevolxml2argvdata/vol-qcow2.xml create mode 100644 tests/storagevolxml2argvtest.c diff --git a/tests/Makefile.am b/tests/Makefile.am index cafdae0bb9..0304829ba6 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -74,6 +74,7 @@ EXTRA_DIST = \ storagepoolschematest \ storagepoolxml2xmlin \ storagepoolxml2xmlout \ + storagevolxml2argvdata \ storagevolschematest \ storagevolxml2xmlin \ storagevolxml2xmlout \ @@ -170,6 +171,8 @@ endif test_programs += nwfilterxml2xmltest +test_programs += storagevolxml2argvtest + test_programs += storagevolxml2xmltest storagepoolxml2xmltest test_programs += nodedevxml2xmltest @@ -470,6 +473,12 @@ nwfilterxml2xmltest_SOURCES = \ testutils.c testutils.h nwfilterxml2xmltest_LDADD = $(LDADDS) +storagevolxml2argvtest_SOURCES = \ + storagevolxml2argvtest.c \ + testutils.c testutils.h +storagevolxml2argvtest_LDADD = \ + ../src/libvirt_driver_storage_impl.la $(LDADDS) + storagevolxml2xmltest_SOURCES = \ storagevolxml2xmltest.c \ testutils.c testutils.h diff --git a/tests/storagevolxml2argvdata/pool-dir.xml b/tests/storagevolxml2argvdata/pool-dir.xml new file mode 100644 index 0000000000..e10ccb7ca3 --- /dev/null +++ b/tests/storagevolxml2argvdata/pool-dir.xml @@ -0,0 +1,18 @@ + + virtimages + 70a7eb15-6c34-ee9c-bf57-69e8e5ff3fb2 + 0 + 0 + 0 + + + + ///var/////lib/libvirt/images// + + 0700 + -1 + -1 + + + + diff --git a/tests/storagevolxml2argvdata/qcow2-flag.argv b/tests/storagevolxml2argvdata/qcow2-flag.argv new file mode 100644 index 0000000000..3ac9010883 --- /dev/null +++ b/tests/storagevolxml2argvdata/qcow2-flag.argv @@ -0,0 +1 @@ +qemu-img create -f qcow2 -b /dev/null -F raw /var/lib/libvirt/images/OtherDemo.img 5242880K -e diff --git a/tests/storagevolxml2argvdata/qcow2-nobacking-convert-flag.argv b/tests/storagevolxml2argvdata/qcow2-nobacking-convert-flag.argv new file mode 100644 index 0000000000..2d37c50835 --- /dev/null +++ b/tests/storagevolxml2argvdata/qcow2-nobacking-convert-flag.argv @@ -0,0 +1 @@ +qemu-img convert -f raw -O qcow2 /var/lib/libvirt/images/sparse.img /var/lib/libvirt/images/OtherDemo.img -e diff --git a/tests/storagevolxml2argvdata/qcow2-nobacking-convert-none.argv b/tests/storagevolxml2argvdata/qcow2-nobacking-convert-none.argv new file mode 100644 index 0000000000..2d37c50835 --- /dev/null +++ b/tests/storagevolxml2argvdata/qcow2-nobacking-convert-none.argv @@ -0,0 +1 @@ +qemu-img convert -f raw -O qcow2 /var/lib/libvirt/images/sparse.img /var/lib/libvirt/images/OtherDemo.img -e diff --git a/tests/storagevolxml2argvdata/qcow2-nobacking-convert-prealloc.argv b/tests/storagevolxml2argvdata/qcow2-nobacking-convert-prealloc.argv new file mode 100644 index 0000000000..18e8f64b8e --- /dev/null +++ b/tests/storagevolxml2argvdata/qcow2-nobacking-convert-prealloc.argv @@ -0,0 +1 @@ +qemu-img convert -f raw -O qcow2 /var/lib/libvirt/images/sparse.img /var/lib/libvirt/images/OtherDemo.img -o encryption=on,preallocation=metadata diff --git a/tests/storagevolxml2argvdata/qcow2-nobacking-flag.argv b/tests/storagevolxml2argvdata/qcow2-nobacking-flag.argv new file mode 100644 index 0000000000..8980cc40f7 --- /dev/null +++ b/tests/storagevolxml2argvdata/qcow2-nobacking-flag.argv @@ -0,0 +1 @@ +qemu-img create -f qcow2 /var/lib/libvirt/images/OtherDemo.img 5242880K -e diff --git a/tests/storagevolxml2argvdata/qcow2-nobacking-none.argv b/tests/storagevolxml2argvdata/qcow2-nobacking-none.argv new file mode 100644 index 0000000000..8980cc40f7 --- /dev/null +++ b/tests/storagevolxml2argvdata/qcow2-nobacking-none.argv @@ -0,0 +1 @@ +qemu-img create -f qcow2 /var/lib/libvirt/images/OtherDemo.img 5242880K -e diff --git a/tests/storagevolxml2argvdata/qcow2-nobacking-prealloc.argv b/tests/storagevolxml2argvdata/qcow2-nobacking-prealloc.argv new file mode 100644 index 0000000000..828f5fcc94 --- /dev/null +++ b/tests/storagevolxml2argvdata/qcow2-nobacking-prealloc.argv @@ -0,0 +1 @@ +qemu-img create -f qcow2 /var/lib/libvirt/images/OtherDemo.img 5242880K -o encryption=on,preallocation=metadata diff --git a/tests/storagevolxml2argvdata/qcow2-none.argv b/tests/storagevolxml2argvdata/qcow2-none.argv new file mode 100644 index 0000000000..f2dfd159ab --- /dev/null +++ b/tests/storagevolxml2argvdata/qcow2-none.argv @@ -0,0 +1 @@ +qemu-img create -f qcow2 -b /dev/null /var/lib/libvirt/images/OtherDemo.img 5242880K -e diff --git a/tests/storagevolxml2argvdata/qcow2.argv b/tests/storagevolxml2argvdata/qcow2.argv new file mode 100644 index 0000000000..d6f4cb68ac --- /dev/null +++ b/tests/storagevolxml2argvdata/qcow2.argv @@ -0,0 +1 @@ +qemu-img create -f qcow2 -b /dev/null -o backing_fmt=raw,encryption=on /var/lib/libvirt/images/OtherDemo.img 5242880K diff --git a/tests/storagevolxml2argvdata/vol-file.xml b/tests/storagevolxml2argvdata/vol-file.xml new file mode 100644 index 0000000000..d3f65f654b --- /dev/null +++ b/tests/storagevolxml2argvdata/vol-file.xml @@ -0,0 +1,20 @@ + + sparse.img + + 1 + 0 + + /var/lib/libvirt/images/sparse.img + + 0 + 0744 + 0 + + + + 1341933637.273190990 + 1341930622.047245868 + 1341930622.047245868 + + + diff --git a/tests/storagevolxml2argvdata/vol-qcow2-nobacking.xml b/tests/storagevolxml2argvdata/vol-qcow2-nobacking.xml new file mode 100644 index 0000000000..6a6bd5bef3 --- /dev/null +++ b/tests/storagevolxml2argvdata/vol-qcow2-nobacking.xml @@ -0,0 +1,21 @@ + + OtherDemo.img + /var/lib/libvirt/images/OtherDemo.img + + + 5 + 294912 + + /var/lib/libvirt/images/OtherDemo.img + + + 0644 + 0 + 0 + + + + + + + diff --git a/tests/storagevolxml2argvdata/vol-qcow2.xml b/tests/storagevolxml2argvdata/vol-qcow2.xml new file mode 100644 index 0000000000..49a7de33d3 --- /dev/null +++ b/tests/storagevolxml2argvdata/vol-qcow2.xml @@ -0,0 +1,31 @@ + + OtherDemo.img + /var/lib/libvirt/images/OtherDemo.img + + + 5 + 294912 + + /var/lib/libvirt/images/OtherDemo.img + + + 0644 + 0 + 0 + + + + + + + + /dev/null + + + 0644 + 0 + 0 + + + + diff --git a/tests/storagevolxml2argvtest.c b/tests/storagevolxml2argvtest.c new file mode 100644 index 0000000000..416bb6f487 --- /dev/null +++ b/tests/storagevolxml2argvtest.c @@ -0,0 +1,189 @@ +#include + +#include "internal.h" +#include "testutils.h" +#include "datatypes.h" +#include "storage/storage_backend.h" +#include "testutilsqemu.h" + +const char create_tool[] = "qemu-img"; + +static int +testCompareXMLToArgvFiles(bool shouldFail, + const char *poolxml, + const char *volxml, + const char *inputvolxml, + const char *cmdline, + unsigned int flags, + int imgformat) +{ + char *volXmlData = NULL; + char *poolXmlData = NULL; + char *inputvolXmlData = NULL; + char *expectedCmdline = NULL; + char *actualCmdline = NULL; + int ret = -1; + + int len; + + virCommandPtr cmd = NULL; + virConnectPtr conn; + + virStorageVolDefPtr vol = NULL, inputvol = NULL; + virStoragePoolDefPtr pool = NULL; + virStoragePoolObj poolobj = {.def = NULL }; + + + if (!(conn = virGetConnect())) + goto cleanup; + + if (virtTestLoadFile(poolxml, &poolXmlData) < 0) + goto cleanup; + if (virtTestLoadFile(volxml, &volXmlData) < 0) + goto cleanup; + if (inputvolxml && + virtTestLoadFile(inputvolxml, &inputvolXmlData) < 0) + goto cleanup; + + if (!(pool = virStoragePoolDefParseString(poolXmlData))) + goto cleanup; + + poolobj.def = pool; + + if (!(vol = virStorageVolDefParseString(pool, volXmlData))) + goto cleanup; + + if (inputvolxml && + !(inputvol = virStorageVolDefParseString(pool, inputvolXmlData))) + goto cleanup; + + cmd = virStorageBackendCreateQemuImgCmd(conn, &poolobj, vol, inputvol, + flags, create_tool, imgformat); + + actualCmdline = virCommandToString(cmd); + if (!actualCmdline) { + if (shouldFail) { + virResetLastError(); + ret = 0; + } + goto cleanup; + } + + len = virtTestLoadFile(cmdline, &expectedCmdline); + if (len < 0) + goto cleanup; + if (len && expectedCmdline[len-1] == '\n') + expectedCmdline[len-1] = '\0'; + + if (STRNEQ_NULLABLE(expectedCmdline, actualCmdline)) { + virtTestDifference(stderr, expectedCmdline, actualCmdline); + goto cleanup; + } + + ret = 0; + +cleanup: + virStoragePoolDefFree(pool); + virStorageVolDefFree(vol); + virStorageVolDefFree(inputvol); + virCommandFree(cmd); + VIR_FREE(actualCmdline); + VIR_FREE(expectedCmdline); + return ret; +} + +struct testInfo { + bool shouldFail; + const char *pool; + const char *vol; + const char *inputvol; + const char *cmdline; + unsigned int flags; + int imgformat; +}; + +static int +testCompareXMLToArgvHelper(const void *data) +{ + int result = -1; + const struct testInfo *info = data; + char *poolxml = NULL; + char *volxml = NULL; + char *inputvolxml = NULL; + char *cmdline = NULL; + + if (info->inputvol && + virAsprintf(&inputvolxml, "%s/storagevolxml2argvdata/%s.xml", + abs_srcdir, info->inputvol) < 0) + goto cleanup; + if (virAsprintf(&poolxml, "%s/storagevolxml2argvdata/%s.xml", + abs_srcdir, info->pool) < 0 || + virAsprintf(&volxml, "%s/storagevolxml2argvdata/%s.xml", + abs_srcdir, info->vol) < 0) { + goto cleanup; + } + if (virAsprintf(&cmdline, "%s/storagevolxml2argvdata/%s.argv", + abs_srcdir, info->cmdline) < 0 && !info->shouldFail) + goto cleanup; + + result = testCompareXMLToArgvFiles(info->shouldFail, poolxml, volxml, + inputvolxml, cmdline, info->flags, + info->imgformat); + +cleanup: + VIR_FREE(poolxml); + VIR_FREE(volxml); + VIR_FREE(inputvolxml); + VIR_FREE(cmdline); + + return result; +} + +enum { + FMT_NONE = 0, + FMT_FLAG, + FMT_OPTIONS, +}; + + + +static int +mymain(void) +{ + int ret = 0; + unsigned int flags = VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA; + +#define DO_TEST(shouldFail, pool, vol, inputvol, cmdline, flags, imgformat) \ + do { \ + struct testInfo info = { shouldFail, pool, vol, inputvol, cmdline, \ + flags, imgformat }; \ + if (virtTestRun("Storage Vol XML-2-argv " cmdline, \ + 1, testCompareXMLToArgvHelper, &info) < 0) \ + ret = -1; \ + } \ + while (0); + + DO_TEST(false, "pool-dir", "vol-qcow2", NULL, "qcow2", 0, FMT_OPTIONS); + DO_TEST(true, "pool-dir", "vol-qcow2", NULL, "qcow2-prealloc", flags, + FMT_OPTIONS); + DO_TEST(false, "pool-dir", "vol-qcow2-nobacking", NULL, + "qcow2-nobacking-prealloc", flags, FMT_OPTIONS); + DO_TEST(false, "pool-dir", "vol-qcow2-nobacking", "vol-file", + "qcow2-nobacking-convert-prealloc", flags, FMT_OPTIONS); + DO_TEST(true, "pool-dir", "vol-qcow2", "vol-file", + "qcow2-convert-prealloc", flags, FMT_OPTIONS); + DO_TEST(false, "pool-dir", "vol-qcow2", NULL, "qcow2-flag", 0, FMT_FLAG); + DO_TEST(false, "pool-dir", "vol-qcow2-nobacking", NULL, + "qcow2-nobacking-flag", 0, FMT_FLAG); + DO_TEST(false, "pool-dir", "vol-qcow2-nobacking", "vol-file", + "qcow2-nobacking-convert-flag", 0, FMT_FLAG); + DO_TEST(false, "pool-dir", "vol-qcow2", NULL, "qcow2-none", 0, FMT_NONE); + DO_TEST(false, "pool-dir", "vol-qcow2-nobacking", NULL, + "qcow2-nobacking-none", 0, FMT_NONE); + DO_TEST(false, "pool-dir", "vol-qcow2-nobacking", "vol-file", + "qcow2-nobacking-convert-none", 0, FMT_NONE); + + return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE; +} + +VIRT_TEST_MAIN(mymain)