Add a test program called virstorageutiltest and test the gluster pool
detection code.
---
tests/Makefile.am | 16 ++-
.../gluster-parse-basic-native.xml | 6 ++
.../gluster-parse-basic-netfs.xml | 7 ++
.../virstorageutildata/gluster-parse-basic-src.xml | 47 +++++++++
tests/virstorageutiltest.c | 112 +++++++++++++++++++++
5 files changed, 187 insertions(+), 1 deletion(-)
create mode 100644 tests/virstorageutildata/gluster-parse-basic-native.xml
create mode 100644 tests/virstorageutildata/gluster-parse-basic-netfs.xml
create mode 100644 tests/virstorageutildata/gluster-parse-basic-src.xml
create mode 100644 tests/virstorageutiltest.c
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a6f189b8b..aa9d2eb3a 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 000000000..fbde06f3b
--- /dev/null
+++ b/tests/virstorageutildata/gluster-parse-basic-native.xml
@@ -0,0 +1,6 @@
+<sources>
+ <source>
+ <host name='testhost'/>
+ <dir path='vol0'/>
+ </source>
+</sources>
diff --git a/tests/virstorageutildata/gluster-parse-basic-netfs.xml
b/tests/virstorageutildata/gluster-parse-basic-netfs.xml
new file mode 100644
index 000000000..8aadd50a1
--- /dev/null
+++ b/tests/virstorageutildata/gluster-parse-basic-netfs.xml
@@ -0,0 +1,7 @@
+<sources>
+ <source>
+ <host name='testhost'/>
+ <dir path='vol0'/>
+ <format type='glusterfs'/>
+ </source>
+</sources>
diff --git a/tests/virstorageutildata/gluster-parse-basic-src.xml
b/tests/virstorageutildata/gluster-parse-basic-src.xml
new file mode 100644
index 000000000..08f97cb72
--- /dev/null
+++ b/tests/virstorageutildata/gluster-parse-basic-src.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"
standalone="yes"?>
+<cliOutput>
+ <opRet>0</opRet>
+ <opErrno>0</opErrno>
+ <opErrstr/>
+ <volInfo>
+ <volumes>
+ <volume>
+ <name>vol0</name>
+ <id>ac14dfa5-0b98-4593-a2aa-9fe2bb9b9ce3</id>
+ <status>1</status>
+ <statusStr>Started</statusStr>
+ <snapshotCount>0</snapshotCount>
+ <brickCount>2</brickCount>
+ <distCount>2</distCount>
+ <stripeCount>1</stripeCount>
+ <replicaCount>2</replicaCount>
+ <arbiterCount>0</arbiterCount>
+ <disperseCount>0</disperseCount>
+ <redundancyCount>0</redundancyCount>
+ <type>2</type>
+ <typeStr>Replicate</typeStr>
+ <transport>0</transport>
+ <bricks>
+ <brick
uuid="a6f5ddea-bc6a-44db-ae1d-5aa1db743490">virt-gluster-node1:/bricks/brick1/brick<name>virt-gluster-node1:/bricks/brick1/brick</name><hostUuid>a6f5ddea-bc6a-44db-ae1d-5aa1db743490</hostUuid><isArbiter>0</isArbiter></brick>
+ <brick
uuid="f4ab9fb1-44ec-443b-8783-e5f70ed78da3">virt-gluster-node2:/bricks/brick1/brick<name>virt-gluster-node2:/bricks/brick1/brick</name><hostUuid>f4ab9fb1-44ec-443b-8783-e5f70ed78da3</hostUuid><isArbiter>0</isArbiter></brick>
+ </bricks>
+ <optCount>3</optCount>
+ <options>
+ <option>
+ <name>nfs.disable</name>
+ <value>on</value>
+ </option>
+ <option>
+ <name>performance.readdir-ahead</name>
+ <value>on</value>
+ </option>
+ <option>
+ <name>transport.address-family</name>
+ <value>inet</value>
+ </option>
+ </options>
+ </volume>
+ <count>1</count>
+ </volumes>
+ </volInfo>
+</cliOutput>
diff --git a/tests/virstorageutiltest.c b/tests/virstorageutiltest.c
new file mode 100644
index 000000000..12597a014
--- /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
+ * <
http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#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 testGlusterLookupParseData {
+ const char *srcxml;
+ const char *dstxml;
+ int type;
+};
+
+static int
+testGlusterExtractPoolSources(const void *opaque)
+{
+ const struct testGlusterLookupParseData *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 testGlusterLookupParseData 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 lookup " sffx " " testname,
\
+ 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)
--
2.12.2