Add a new test for the storage pool capabilities. There will be one test mocked with every backend available (full) and one where only the file system pool is available. Signed-off-by: John Ferlan <jferlan@xxxxxxxxxx> --- tests/Makefile.am | 6 + .../storagepoolcapsschemadata/poolcaps-fs.xml | 268 ++++++++++++++++++ tests/storagepoolcapstest.c | 124 ++++++++ 3 files changed, 398 insertions(+) create mode 100644 tests/storagepoolcapsschemadata/poolcaps-fs.xml create mode 100644 tests/storagepoolcapstest.c diff --git a/tests/Makefile.am b/tests/Makefile.am index 760f600bf2..72f0420bab 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -369,6 +369,7 @@ test_programs += storagevolxml2argvtest test_programs += storagepoolxml2argvtest test_programs += virstorageutiltest test_programs += storagepoolxml2xmltest +test_programs += storagepoolcapstest endif WITH_STORAGE if WITH_STORAGE_FS @@ -936,11 +937,16 @@ storagepoolxml2xmltest_LDADD = $(LDADDS) \ ../src/libvirt_driver_storage_impl.la \ $(GNULIB_LIBS) +storagepoolcapstest_SOURCES = \ + storagepoolcapstest.c testutils.h testutils.c +storagepoolcapstest_LDADD = $(LDADDS) + else ! WITH_STORAGE EXTRA_DIST += storagevolxml2argvtest.c EXTRA_DIST += virstorageutiltest.c EXTRA_DIST += storagepoolxml2argvtest.c EXTRA_DIST += storagepoolxml2xmltest.c +EXTRA_DIST += storagepoolcapstest.c endif ! WITH_STORAGE storagevolxml2xmltest_SOURCES = \ diff --git a/tests/storagepoolcapsschemadata/poolcaps-fs.xml b/tests/storagepoolcapsschemadata/poolcaps-fs.xml new file mode 100644 index 0000000000..0e15af0607 --- /dev/null +++ b/tests/storagepoolcapsschemadata/poolcaps-fs.xml @@ -0,0 +1,268 @@ +<storagepoolCapabilities> + <pool type='dir' supported='no'> + <volOptions> + <defaultFormat type='raw'/> + <enum name='targetFormatType'> + <value>none</value> + <value>raw</value> + <value>dir</value> + <value>bochs</value> + <value>cloop</value> + <value>dmg</value> + <value>iso</value> + <value>vpc</value> + <value>vdi</value> + <value>fat</value> + <value>vhd</value> + <value>ploop</value> + <value>cow</value> + <value>qcow</value> + <value>qcow2</value> + <value>qed</value> + <value>vmdk</value> + </enum> + </volOptions> + </pool> + <pool type='fs' supported='yes'> + <poolOptions> + <defaultFormat type='auto'/> + <enum name='sourceFormatType'> + <value>auto</value> + <value>ext2</value> + <value>ext3</value> + <value>ext4</value> + <value>ufs</value> + <value>iso9660</value> + <value>udf</value> + <value>gfs</value> + <value>gfs2</value> + <value>vfat</value> + <value>hfs+</value> + <value>xfs</value> + <value>ocfs2</value> + </enum> + <enum name='requiredSourceElements'> + <value>device</value> + </enum> + </poolOptions> + <volOptions> + <defaultFormat type='raw'/> + <enum name='targetFormatType'> + <value>none</value> + <value>raw</value> + <value>dir</value> + <value>bochs</value> + <value>cloop</value> + <value>dmg</value> + <value>iso</value> + <value>vpc</value> + <value>vdi</value> + <value>fat</value> + <value>vhd</value> + <value>ploop</value> + <value>cow</value> + <value>qcow</value> + <value>qcow2</value> + <value>qed</value> + <value>vmdk</value> + </enum> + </volOptions> + </pool> + <pool type='netfs' supported='no'> + <poolOptions> + <defaultFormat type='auto'/> + <enum name='sourceFormatType'> + <value>auto</value> + <value>nfs</value> + <value>glusterfs</value> + <value>cifs</value> + </enum> + <enum name='requiredSourceElements'> + <value>host</value> + <value>dir</value> + </enum> + </poolOptions> + <volOptions> + <defaultFormat type='raw'/> + <enum name='targetFormatType'> + <value>none</value> + <value>raw</value> + <value>dir</value> + <value>bochs</value> + <value>cloop</value> + <value>dmg</value> + <value>iso</value> + <value>vpc</value> + <value>vdi</value> + <value>fat</value> + <value>vhd</value> + <value>ploop</value> + <value>cow</value> + <value>qcow</value> + <value>qcow2</value> + <value>qed</value> + <value>vmdk</value> + </enum> + </volOptions> + </pool> + <pool type='logical' supported='no'> + <poolOptions> + <defaultFormat type='lvm2'/> + <enum name='sourceFormatType'> + <value>unknown</value> + <value>lvm2</value> + </enum> + <enum name='requiredSourceElements'> + <value>device</value> + <value>name</value> + </enum> + </poolOptions> + </pool> + <pool type='disk' supported='no'> + <poolOptions> + <defaultFormat type='unknown'/> + <enum name='sourceFormatType'> + <value>unknown</value> + <value>dos</value> + <value>dvh</value> + <value>gpt</value> + <value>mac</value> + <value>bsd</value> + <value>pc98</value> + <value>sun</value> + <value>lvm2</value> + </enum> + <enum name='requiredSourceElements'> + <value>device</value> + </enum> + </poolOptions> + <volOptions> + <defaultFormat type='none'/> + <enum name='targetFormatType'> + <value>none</value> + <value>linux</value> + <value>fat16</value> + <value>fat32</value> + <value>linux-swap</value> + <value>linux-lvm</value> + <value>linux-raid</value> + <value>extended</value> + </enum> + </volOptions> + </pool> + <pool type='iscsi' supported='no'> + <poolOptions> + <enum name='requiredSourceElements'> + <value>host</value> + <value>device</value> + <value>initiator</value> + </enum> + </poolOptions> + </pool> + <pool type='iscsi-direct' supported='no'> + <poolOptions> + <enum name='requiredSourceElements'> + <value>host</value> + <value>device</value> + <value>initiator</value> + <value>network</value> + </enum> + </poolOptions> + </pool> + <pool type='scsi' supported='no'> + <poolOptions> + <enum name='requiredSourceElements'> + <value>adapter</value> + </enum> + </poolOptions> + </pool> + <pool type='mpath' supported='no'> + </pool> + <pool type='rbd' supported='no'> + <poolOptions> + <enum name='requiredSourceElements'> + <value>host</value> + <value>name</value> + <value>network</value> + </enum> + </poolOptions> + </pool> + <pool type='sheepdog' supported='no'> + <poolOptions> + <enum name='requiredSourceElements'> + <value>host</value> + <value>name</value> + <value>network</value> + </enum> + </poolOptions> + </pool> + <pool type='gluster' supported='no'> + <poolOptions> + <enum name='requiredSourceElements'> + <value>host</value> + <value>dir</value> + <value>name</value> + <value>network</value> + </enum> + </poolOptions> + <volOptions> + <defaultFormat type='raw'/> + <enum name='targetFormatType'> + <value>none</value> + <value>raw</value> + <value>dir</value> + <value>bochs</value> + <value>cloop</value> + <value>dmg</value> + <value>iso</value> + <value>vpc</value> + <value>vdi</value> + <value>fat</value> + <value>vhd</value> + <value>ploop</value> + <value>cow</value> + <value>qcow</value> + <value>qcow2</value> + <value>qed</value> + <value>vmdk</value> + </enum> + </volOptions> + </pool> + <pool type='zfs' supported='no'> + <poolOptions> + <enum name='requiredSourceElements'> + <value>device</value> + <value>name</value> + </enum> + </poolOptions> + </pool> + <pool type='vstorage' supported='no'> + <poolOptions> + <enum name='requiredSourceElements'> + <value>name</value> + </enum> + </poolOptions> + <volOptions> + <defaultFormat type='raw'/> + <enum name='targetFormatType'> + <value>none</value> + <value>raw</value> + <value>dir</value> + <value>bochs</value> + <value>cloop</value> + <value>dmg</value> + <value>iso</value> + <value>vpc</value> + <value>vdi</value> + <value>fat</value> + <value>vhd</value> + <value>ploop</value> + <value>cow</value> + <value>qcow</value> + <value>qcow2</value> + <value>qed</value> + <value>vmdk</value> + </enum> + </volOptions> + </pool> +</storagepoolCapabilities> diff --git a/tests/storagepoolcapstest.c b/tests/storagepoolcapstest.c new file mode 100644 index 0000000000..d31f50c957 --- /dev/null +++ b/tests/storagepoolcapstest.c @@ -0,0 +1,124 @@ +/* + * Copyright (C) Red Hat, Inc. 2019 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include "testutils.h" +#include "storage_conf.h" +#include "storage_capabilities.h" + + +#define VIR_FROM_THIS VIR_FROM_NONE + + +struct test_virStoragePoolCapsFormatData { + const char *filename; + virCapsPtr driverCaps; +}; + +static void +test_virCapabilitiesAddFullStoragePool(virCapsPtr caps) +{ + size_t i; + + for (i = 0; i < VIR_STORAGE_POOL_LAST; i++) + virCapabilitiesAddStoragePool(caps, i); +} + + +static void +test_virCapabilitiesAddFSStoragePool(virCapsPtr caps) +{ + virCapabilitiesAddStoragePool(caps, VIR_STORAGE_POOL_FS); +} + + +static int +test_virStoragePoolCapsFormat(const void *opaque) +{ + struct test_virStoragePoolCapsFormatData *data = + (struct test_virStoragePoolCapsFormatData *) opaque; + virCapsPtr driverCaps = data->driverCaps; + virStoragePoolCapsPtr poolCaps = NULL; + int ret = -1; + VIR_AUTOFREE(char *) path = NULL; + VIR_AUTOFREE(char *) poolCapsFromFile = NULL; + VIR_AUTOFREE(char *) poolCapsXML = NULL; + + + if (!(poolCaps = virStoragePoolCapsNew(driverCaps))) + goto cleanup; + + if (virAsprintf(&path, "%s/storagepoolcapsschemadata/poolcaps-%s.xml", + abs_srcdir, data->filename) < 0) + goto cleanup; + + if (virFileReadAll(path, 8192, &poolCapsFromFile) < 0) + goto cleanup; + + if (!(poolCapsXML = virStoragePoolCapsFormat(poolCaps))) + goto cleanup; + + if (STRNEQ(poolCapsFromFile, poolCapsXML)) { + virTestDifference(stderr, poolCapsFromFile, poolCapsXML); + goto cleanup; + } + + ret = 0; + + cleanup: + virObjectUnref(poolCaps); + return ret; +} + + +static int +mymain(void) +{ + int ret = -1; + virCapsPtr fullCaps = NULL; + virCapsPtr fsCaps = NULL; + +#define DO_TEST(Filename, DriverCaps) \ + do { \ + struct test_virStoragePoolCapsFormatData data = \ + {.filename = Filename, .driverCaps = DriverCaps }; \ + if (virTestRun(Filename, test_virStoragePoolCapsFormat, &data) < 0) \ + goto cleanup; \ + } while (0) + + if (!(fullCaps = virCapabilitiesNew(VIR_ARCH_NONE, false, false)) || + !(fsCaps = virCapabilitiesNew(VIR_ARCH_NONE, false, false))) + goto cleanup; + + test_virCapabilitiesAddFullStoragePool(fullCaps); + test_virCapabilitiesAddFSStoragePool(fsCaps); + + DO_TEST("full", fullCaps); + DO_TEST("fs", fsCaps); + + ret = 0; + + cleanup: + virObjectUnref(fullCaps); + virObjectUnref(fsCaps); + + return ret; +} + +VIR_TEST_MAIN(mymain) -- 2.20.1