diff --git a/tests/Makefile.am b/tests/Makefile.am index a6f189b8ba..aa9d2eb3a3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -160,7 +160,9 @@ EXTRA_DIST = \ xlconfigdata \ xmconfigdata \ xml2sexprdata \ - xml2vmxdata + xml2vmxdata \ + virstorageutildata \ + $(NULL) test_helpers = commandhelper ssh test_programs = virshtest sockettest \ @@ -353,6 +355,7 @@ endif WITH_NWFILTER if WITH_STORAGE test_programs += storagevolxml2argvtest +test_programs += virstorageutiltest endif WITH_STORAGE if WITH_STORAGE_FS @@ -859,6 +862,16 @@ genericxml2xmltest_LDADD = $(LDADDS) if WITH_STORAGE +virstorageutiltest_SOURCES = \ + virstorageutiltest.c \ + testutils.c \ + testutils.h \ + $(NULL) +virstorageutiltest_LDADD = \ + ../src/libvirt_driver_storage_impl.la \ + $(LDADDS) \ + $(NULL) + storagevolxml2argvtest_SOURCES = \ storagevolxml2argvtest.c \ testutils.c testutils.h @@ -868,6 +881,7 @@ storagevolxml2argvtest_LDADD = \ else ! WITH_STORAGE EXTRA_DIST += storagevolxml2argvtest.c +EXTRA_DIST += virstorageutiltest.c endif ! WITH_STORAGE storagevolxml2xmltest_SOURCES = \ diff --git a/tests/virstorageutildata/gluster-parse-basic-native.xml b/tests/virstorageutildata/gluster-parse-basic-native.xml new file mode 100644 index 0000000000..fbde06f3b3 --- /dev/null +++ b/tests/virstorageutildata/gluster-parse-basic-native.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/tests/virstorageutildata/gluster-parse-basic-netfs.xml b/tests/virstorageutildata/gluster-parse-basic-netfs.xml new file mode 100644 index 0000000000..8aadd50a14 --- /dev/null +++ b/tests/virstorageutildata/gluster-parse-basic-netfs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tests/virstorageutildata/gluster-parse-basic-src.xml b/tests/virstorageutildata/gluster-parse-basic-src.xml new file mode 100644 index 0000000000..08f97cb721 --- /dev/null +++ b/tests/virstorageutildata/gluster-parse-basic-src.xml @@ -0,0 +1,47 @@ + + + 0 + 0 + + + + + vol0 + ac14dfa5-0b98-4593-a2aa-9fe2bb9b9ce3 + 1 + Started + 0 + 2 + 2 + 1 + 2 + 0 + 0 + 0 + 2 + Replicate + 0 + + virt-gluster-node1:/bricks/brick1/brickvirt-gluster-node1:/bricks/brick1/bricka6f5ddea-bc6a-44db-ae1d-5aa1db7434900 + virt-gluster-node2:/bricks/brick1/brickvirt-gluster-node2:/bricks/brick1/brickf4ab9fb1-44ec-443b-8783-e5f70ed78da30 + + 3 + + + + + + + 1 + + + diff --git a/tests/virstorageutiltest.c b/tests/virstorageutiltest.c new file mode 100644 index 0000000000..e846ad5474 --- /dev/null +++ b/tests/virstorageutiltest.c @@ -0,0 +1,112 @@ +/* + * 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 + * . + */ + +#include + +#include + +#include "testutils.h" +#include "virerror.h" +#include "virfile.h" +#include "virlog.h" +#include "virstring.h" + +#include "storage/storage_util.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +VIR_LOG_INIT("tests.storageutiltest"); + + +struct testGlusterExtractPoolSourcesData { + const char *srcxml; + const char *dstxml; + virStoragePoolType type; +}; + +static int +testGlusterExtractPoolSources(const void *opaque) +{ + const struct testGlusterExtractPoolSourcesData *data = opaque; + virStoragePoolSourceList list = { .type = data->type, + .nsources = 0, + .sources = NULL + }; + size_t i; + char *srcxmldata = NULL; + char *actual = NULL; + int ret = -1; + + if (virTestLoadFile(data->srcxml, &srcxmldata) < 0) + goto cleanup; + + if (virStorageUtilGlusterExtractPoolSources("testhost", srcxmldata, + &list, data->type) < 0) + goto cleanup; + + if (!(actual = virStoragePoolSourceListFormat(&list))) + goto cleanup; + + ret = virTestCompareToFile(actual, data->dstxml); + + cleanup: + VIR_FREE(srcxmldata); + VIR_FREE(actual); + + for (i = 0; i < list.nsources; i++) + virStoragePoolSourceClear(&list.sources[i]); + VIR_FREE(list.sources); + + return ret; +} + + +static int +mymain(void) +{ + int ret = 0; + +#define DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_FULL(testname, sffx, pooltype) \ + do { \ + struct testGlusterExtractPoolSourcesData data; \ + data.srcxml = abs_srcdir "/virstorageutildata/" \ + "gluster-parse-" testname "-src.xml"; \ + data.dstxml = abs_srcdir "/virstorageutildata/" \ + "gluster-parse-" testname "-" sffx ".xml"; \ + data.type = pooltype; \ + if (virTestRun("gluster-parse-" testname "-" sffx, \ + testGlusterExtractPoolSources, &data) < 0) \ + ret = -1; \ + } while (0) + +#define DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NATIVE(testname) \ + DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_FULL(testname, "native", \ + VIR_STORAGE_POOL_GLUSTER) +#define DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NETFS(testname) \ + DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_FULL(testname, "netfs", \ + VIR_STORAGE_POOL_NETFS) + + DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NATIVE("basic"); + DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NETFS("basic"); + +#undef DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NATIVE +#undef DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NETFS +#undef DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_FULL + + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +} + +VIRT_TEST_MAIN(mymain)