mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 21:34:54 +03:00
tests: Introduce tests for storage pool xml to argv checks
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@redhat.com> ACKed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
1f6ca26d72
commit
f2f84b4d4a
@ -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
|
||||
|
1
tests/storagepoolxml2argvdata/pool-fs.argv
Normal file
1
tests/storagepoolxml2argvdata/pool-fs.argv
Normal file
@ -0,0 +1 @@
|
||||
mount -t ext3 /dev/sda6 /mnt
|
1
tests/storagepoolxml2argvdata/pool-netfs-cifs.argv
Normal file
1
tests/storagepoolxml2argvdata/pool-netfs-cifs.argv
Normal file
@ -0,0 +1 @@
|
||||
mount -t cifs //example.com/samba_share /mnt/cifs -o guest
|
1
tests/storagepoolxml2argvdata/pool-netfs-gluster.argv
Normal file
1
tests/storagepoolxml2argvdata/pool-netfs-gluster.argv
Normal file
@ -0,0 +1 @@
|
||||
mount -t glusterfs example.com:/volume -o direct-io-mode=1 /mnt/gluster
|
1
tests/storagepoolxml2argvdata/pool-netfs.argv
Normal file
1
tests/storagepoolxml2argvdata/pool-netfs.argv
Normal file
@ -0,0 +1 @@
|
||||
mount -t nfs localhost:/var/lib/libvirt/images /mnt
|
172
tests/storagepoolxml2argvtest.c
Normal file
172
tests/storagepoolxml2argvtest.c
Normal file
@ -0,0 +1,172 @@
|
||||
#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;
|
||||
}
|
||||
|
||||
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)
|
Loading…
Reference in New Issue
Block a user