diff --git a/tests/Makefile.am b/tests/Makefile.am index d7ec7e3a6f3c21f4b2ab6014f46762e69cd95dec..bec0930c11789ca7b46e5ed27c9e24d339f5e15a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -140,6 +140,7 @@ EXTRA_DIST = \ storagepoolschemadata \ storagepoolxml2xmlin \ storagepoolxml2xmlout \ + storagepoolxml2argvdata \ storagevolschemadata \ storagevolxml2argvdata \ storagevolxml2xmlin \ @@ -363,6 +364,7 @@ endif WITH_NWFILTER if WITH_STORAGE test_programs += storagevolxml2argvtest +test_programs += storagepoolxml2argvtest test_programs += virstorageutiltest endif WITH_STORAGE @@ -901,6 +903,16 @@ storagevolxml2argvtest_LDADD = \ ../src/libvirt_util.la \ $(LDADDS) +storagepoolxml2argvtest_SOURCES = \ + storagepoolxml2argvtest.c \ + testutils.c testutils.h +storagepoolxml2argvtest_LDADD = \ + $(LIBXML_LIBS) \ + ../src/libvirt_driver_storage_impl.la \ + ../src/libvirt_conf.la \ + ../src/libvirt_util.la \ + $(LDADDS) + else ! WITH_STORAGE EXTRA_DIST += storagevolxml2argvtest.c EXTRA_DIST += virstorageutiltest.c diff --git a/tests/storagepoolxml2argvdata/pool-fs.argv b/tests/storagepoolxml2argvdata/pool-fs.argv new file mode 100644 index 0000000000000000000000000000000000000000..537ce4cee50133af00a60dac1c5d703c65c03fae --- /dev/null +++ b/tests/storagepoolxml2argvdata/pool-fs.argv @@ -0,0 +1 @@ +mount -t ext3 /dev/sda6 /mnt diff --git a/tests/storagepoolxml2argvdata/pool-netfs-cifs.argv b/tests/storagepoolxml2argvdata/pool-netfs-cifs.argv new file mode 100644 index 0000000000000000000000000000000000000000..2fef6f5782b5dea8921c145c55954fbd85076ff8 --- /dev/null +++ b/tests/storagepoolxml2argvdata/pool-netfs-cifs.argv @@ -0,0 +1 @@ +mount -t cifs //example.com/samba_share /mnt/cifs -o guest diff --git a/tests/storagepoolxml2argvdata/pool-netfs-gluster.argv b/tests/storagepoolxml2argvdata/pool-netfs-gluster.argv new file mode 100644 index 0000000000000000000000000000000000000000..4303d514ef19a43f17fceaa8724c5326d8ba04e5 --- /dev/null +++ b/tests/storagepoolxml2argvdata/pool-netfs-gluster.argv @@ -0,0 +1 @@ +mount -t glusterfs example.com:/volume -o direct-io-mode=1 /mnt/gluster diff --git a/tests/storagepoolxml2argvdata/pool-netfs.argv b/tests/storagepoolxml2argvdata/pool-netfs.argv new file mode 100644 index 0000000000000000000000000000000000000000..04127c50877b61ac32727da551e4640733b8c788 --- /dev/null +++ b/tests/storagepoolxml2argvdata/pool-netfs.argv @@ -0,0 +1 @@ +mount -t nfs localhost:/var/lib/libvirt/images /mnt diff --git a/tests/storagepoolxml2argvtest.c b/tests/storagepoolxml2argvtest.c new file mode 100644 index 0000000000000000000000000000000000000000..128fab2de66fe552397851becc8bb6bf65b966f0 --- /dev/null +++ b/tests/storagepoolxml2argvtest.c @@ -0,0 +1,172 @@ +#include + +#include "internal.h" +#include "testutils.h" +#include "datatypes.h" +#include "storage/storage_util.h" +#include "testutilsqemu.h" +#include "virstring.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + + +static int +testCompareXMLToArgvFiles(bool shouldFail, + const char *poolxml, + const char *cmdline) +{ + VIR_AUTOFREE(char *) actualCmdline = NULL; + VIR_AUTOFREE(char *) src = NULL; + int ret = -1; + virCommandPtr cmd = NULL; + virStoragePoolDefPtr def = NULL; + virStoragePoolObjPtr pool = NULL; + + if (!(def = virStoragePoolDefParseFile(poolxml))) + goto cleanup; + + switch ((virStoragePoolType)def->type) { + case VIR_STORAGE_POOL_FS: + case VIR_STORAGE_POOL_NETFS: + if (!(pool = virStoragePoolObjNew())) { + VIR_TEST_DEBUG("pool type %d alloc pool obj fails\n", def->type); + virStoragePoolDefFree(def); + goto cleanup; + } + virStoragePoolObjSetDef(pool, def); + + if (!(src = virStorageBackendFileSystemGetPoolSource(pool))) { + VIR_TEST_DEBUG("pool type %d has no pool source\n", def->type); + goto cleanup; + } + + cmd = virStorageBackendFileSystemMountCmd(def, src); + break; + + case VIR_STORAGE_POOL_DIR: + case VIR_STORAGE_POOL_LOGICAL: + case VIR_STORAGE_POOL_DISK: + case VIR_STORAGE_POOL_ISCSI: + case VIR_STORAGE_POOL_ISCSI_DIRECT: + case VIR_STORAGE_POOL_SCSI: + case VIR_STORAGE_POOL_MPATH: + case VIR_STORAGE_POOL_RBD: + case VIR_STORAGE_POOL_SHEEPDOG: + case VIR_STORAGE_POOL_GLUSTER: + case VIR_STORAGE_POOL_ZFS: + case VIR_STORAGE_POOL_VSTORAGE: + case VIR_STORAGE_POOL_LAST: + default: + VIR_TEST_DEBUG("pool type %d has no xml2argv test\n", def->type); + goto cleanup; + }; + + if (!(actualCmdline = virCommandToString(cmd))) { + VIR_TEST_DEBUG("pool type %d failed to get commandline\n", def->type); + goto cleanup; + } + + virTestClearCommandPath(actualCmdline); + if (virTestCompareToFile(actualCmdline, cmdline) < 0) + goto cleanup; + + ret = 0; + + cleanup: + virCommandFree(cmd); + VIR_FREE(actualCmdline); + virStoragePoolObjEndAPI(&pool); + if (shouldFail) { + virResetLastError(); + ret = 0; + } + return ret; +} + +struct testInfo { + bool shouldFail; + const char *pool; +}; + +static int +testCompareXMLToArgvHelper(const void *data) +{ + int result = -1; + const struct testInfo *info = data; + char *poolxml = NULL; + char *cmdline = NULL; + + if (virAsprintf(&poolxml, "%s/storagepoolxml2xmlin/%s.xml", + abs_srcdir, info->pool) < 0) + goto cleanup; + + if (virAsprintf(&cmdline, "%s/storagepoolxml2argvdata/%s.argv", + abs_srcdir, info->pool) < 0 && !info->shouldFail) + goto cleanup; + + result = testCompareXMLToArgvFiles(info->shouldFail, poolxml, cmdline); + + cleanup: + VIR_FREE(poolxml); + VIR_FREE(cmdline); + + return result; +} + + +static int +mymain(void) +{ + int ret = 0; + +#define DO_TEST_FULL(shouldFail, pool) \ + do { \ + struct testInfo info = { shouldFail, pool }; \ + if (virTestRun("Storage Pool XML-2-argv " pool, \ + testCompareXMLToArgvHelper, &info) < 0) \ + ret = -1; \ + } \ + while (0); + +#define DO_TEST(pool, ...) \ + DO_TEST_FULL(false, pool) + +#define DO_TEST_FAIL(pool, ...) \ + DO_TEST_FULL(true, pool) + + DO_TEST_FAIL("pool-dir"); + DO_TEST_FAIL("pool-dir-naming"); + DO_TEST("pool-fs"); + DO_TEST_FAIL("pool-logical"); + DO_TEST_FAIL("pool-logical-nopath"); + DO_TEST_FAIL("pool-logical-create"); + DO_TEST_FAIL("pool-logical-noname"); + DO_TEST_FAIL("pool-disk"); + DO_TEST_FAIL("pool-disk-device-nopartsep"); + DO_TEST_FAIL("pool-iscsi"); + DO_TEST_FAIL("pool-iscsi-auth"); + DO_TEST("pool-netfs"); + DO_TEST("pool-netfs-gluster"); + DO_TEST("pool-netfs-cifs"); + DO_TEST_FAIL("pool-scsi"); + DO_TEST_FAIL("pool-scsi-type-scsi-host"); + DO_TEST_FAIL("pool-scsi-type-fc-host"); + DO_TEST_FAIL("pool-scsi-type-fc-host-managed"); + DO_TEST_FAIL("pool-mpath"); + DO_TEST_FAIL("pool-iscsi-multiiqn"); + DO_TEST_FAIL("pool-iscsi-vendor-product"); + DO_TEST_FAIL("pool-sheepdog"); + DO_TEST_FAIL("pool-gluster"); + DO_TEST_FAIL("pool-gluster-sub"); + DO_TEST_FAIL("pool-scsi-type-scsi-host-stable"); + DO_TEST_FAIL("pool-zfs"); + DO_TEST_FAIL("pool-zfs-sourcedev"); + DO_TEST_FAIL("pool-rbd"); + DO_TEST_FAIL("pool-vstorage"); + DO_TEST_FAIL("pool-iscsi-direct-auth"); + DO_TEST_FAIL("pool-iscsi-direct"); + + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +} + +VIR_TEST_MAIN(mymain)