Similar to qemuxml2argv and storagevolxml2argv, let's create some
tests to ensure that the XML generates a consistent command line.
Using the same list of pools as storagepoolxml2xmltest, start with
the file system tests (fs, netfs, netfs-cifs, netfs-gluster).
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
tests/Makefile.am | 12 ++
tests/storagepoolxml2argvdata/pool-fs.argv | 1 +
.../pool-netfs-cifs.argv | 1 +
.../pool-netfs-gluster.argv | 1 +
tests/storagepoolxml2argvdata/pool-netfs.argv | 1 +
tests/storagepoolxml2argvtest.c | 171 ++++++++++++++++++
6 files changed, 187 insertions(+)
create mode 100644 tests/storagepoolxml2argvdata/pool-fs.argv
create mode 100644 tests/storagepoolxml2argvdata/pool-netfs-cifs.argv
create mode 100644 tests/storagepoolxml2argvdata/pool-netfs-gluster.argv
create mode 100644 tests/storagepoolxml2argvdata/pool-netfs.argv
create mode 100644 tests/storagepoolxml2argvtest.c
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d7ec7e3a6f..bec0930c11 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 0000000000..4a94148114
--- /dev/null
+++ b/tests/storagepoolxml2argvdata/pool-fs.argv
@@ -0,0 +1 @@
+/usr/bin/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 0000000000..7a06f86f66
--- /dev/null
+++ b/tests/storagepoolxml2argvdata/pool-netfs-cifs.argv
@@ -0,0 +1 @@
+/usr/bin/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 0000000000..90e94f6f13
--- /dev/null
+++ b/tests/storagepoolxml2argvdata/pool-netfs-gluster.argv
@@ -0,0 +1 @@
+/usr/bin/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 0000000000..f890a03f7e
--- /dev/null
+++ b/tests/storagepoolxml2argvdata/pool-netfs.argv
@@ -0,0 +1 @@
+/usr/bin/mount -t nfs localhost:/var/lib/libvirt/images /mnt
diff --git a/tests/storagepoolxml2argvtest.c b/tests/storagepoolxml2argvtest.c
new file mode 100644
index 0000000000..74f8561379
--- /dev/null
+++ b/tests/storagepoolxml2argvtest.c
@@ -0,0 +1,171 @@
+#include <config.h>
+
+#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;
+ }
+
+ 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)
--
2.17.2