Add a test program called virstorageutiltest and test the gluster pool
detection code.
---
tests/Makefile.am | 15 ++-
.../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, 184 insertions(+), 3 deletions(-)
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..254c4c0ad 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 \
@@ -352,7 +354,7 @@ test_programs += nwfilterxml2firewalltest
endif WITH_NWFILTER
if WITH_STORAGE
-test_programs += storagevolxml2argvtest
+test_programs += storagevolxml2argvtest virstorageutiltest
endif WITH_STORAGE
if WITH_STORAGE_FS
@@ -859,6 +861,13 @@ genericxml2xmltest_LDADD = $(LDADDS)
if WITH_STORAGE
+virstorageutiltest_SOURCES = \
+ virstorageutiltest.c testutils.c testutils.h
+virstorageutiltest_LDADD = \
+ ../src/libvirt_driver_storage_impl.la \
+ $(LDADDS) \
+ $(NULL)
+
storagevolxml2argvtest_SOURCES = \
storagevolxml2argvtest.c \
testutils.c testutils.h
@@ -867,7 +876,7 @@ storagevolxml2argvtest_LDADD = \
../src/libvirt_driver_storage_impl.la $(LDADDS)
else ! WITH_STORAGE
-EXTRA_DIST += storagevolxml2argvtest.c
+EXTRA_DIST += storagevolxml2argvtest.c 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..b13ecb5ab
--- /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;
+ bool netfs;
+ int type;
+};
+
+static int
+testGlusterLookupParse(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->netfs) < 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_LOOKUP_FULL(testname, sffx, testnetfs, 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.netfs = testnetfs; \
+ data.type = pooltype; \
+ if (virTestRun("gluster lookup " sffx " " testname, \
+ testGlusterLookupParse, &data) < 0) \
+ ret = -1; \
+ } while (0)
+
+#define DO_TEST_GLUSTER_LOOKUP_NATIVE(testname) \
+ DO_TEST_GLUSTER_LOOKUP_FULL(testname, "native", false, VIR_STORAGE_POOL_GLUSTER)
+#define DO_TEST_GLUSTER_LOOKUP_NETFS(testname) \
+ DO_TEST_GLUSTER_LOOKUP_FULL(testname, "netfs", true, VIR_STORAGE_POOL_NETFS)
+
+ DO_TEST_GLUSTER_LOOKUP_NATIVE("basic");
+ DO_TEST_GLUSTER_LOOKUP_NETFS("basic");
+
+#undef DO_TEST_GLUSTER_LOOKUP_NATIVE
+#undef DO_TEST_GLUSTER_LOOKUP_NETFS
+#undef DO_TEST_GLUSTER_LOOKUP_FULL
+
+ return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+VIRT_TEST_MAIN(mymain)
--
2.12.1
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Thu, 2017-03-30 at 17:12 +0200, Peter Krempa wrote:
[...]
> @@ -352,7 +354,7 @@ test_programs += nwfilterxml2firewalltest
> endif WITH_NWFILTER
>
> if WITH_STORAGE
> -test_programs += storagevolxml2argvtest
> +test_programs += storagevolxml2argvtest virstorageutiltest
Since you have to touch these lines regardless, please turn
this...
[...]
> @@ -859,6 +861,13 @@ genericxml2xmltest_LDADD = $(LDADDS)
>
>
> if WITH_STORAGE
> +virstorageutiltest_SOURCES = \
> + virstorageutiltest.c testutils.c testutils.h
... and this ...
> +virstorageutiltest_LDADD = \
> + ../src/libvirt_driver_storage_impl.la \
> + $(LDADDS) \
> + $(NULL)
> +
> storagevolxml2argvtest_SOURCES = \
> storagevolxml2argvtest.c \
> testutils.c testutils.h
> @@ -867,7 +876,7 @@ storagevolxml2argvtest_LDADD = \
> ../src/libvirt_driver_storage_impl.la $(LDADDS)
>
> else ! WITH_STORAGE
> -EXTRA_DIST += storagevolxml2argvtest.c
> +EXTRA_DIST += storagevolxml2argvtest.c virstorageutiltest.c
... and finally this into proper, one-file-per-line,
$(NULL)-terminated file lists as a courtesy to the next
developer :)
You should also be able to use $(qemu_LDADDS) instead of
spelling out ../src/libvirt_driver_storage_impl.la above.
[...]
> + <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>
Does Gluster's <brick> element really contain a bare text
node followed by a bunch of other elements? Ewww.
[...]
> +#define DO_TEST_GLUSTER_LOOKUP_FULL(testname, sffx, testnetfs, 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"; \
There's a spurious space between sffx and ".xml".
> + data.netfs = testnetfs; \
> + data.type = pooltype; \
> + if (virTestRun("gluster lookup " sffx " " testname, \
> + testGlusterLookupParse, &data) < 0) \
> + ret = -1; \
> + } while (0)
> +
> +#define DO_TEST_GLUSTER_LOOKUP_NATIVE(testname) \
> + DO_TEST_GLUSTER_LOOKUP_FULL(testname, "native", false, VIR_STORAGE_POOL_GLUSTER)
> +#define DO_TEST_GLUSTER_LOOKUP_NETFS(testname) \
> + DO_TEST_GLUSTER_LOOKUP_FULL(testname, "netfs", true, VIR_STORAGE_POOL_NETFS)
> +
> + DO_TEST_GLUSTER_LOOKUP_NATIVE("basic");
> + DO_TEST_GLUSTER_LOOKUP_NETFS("basic");
Between GLUSTER_LOOKUP, gluster-parse and
GlusterLookupParse the naming is a bit all over the place.
Do you think you could make it more consistent? Especially
since none of those seems to have any direct connection with
virStorageUtilGlusterExtractPoolSources(), the API being
tested.
[...]
> +#undef DO_TEST_GLUSTER_LOOKUP_NATIVE
> +#undef DO_TEST_GLUSTER_LOOKUP_NETFS
> +#undef DO_TEST_GLUSTER_LOOKUP_FULL
The #undefs are a bit unnecessary in this context, I'd leave
them out.
--
Andrea Bolognani / Red Hat / Virtualization
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Mon, Apr 03, 2017 at 17:03:43 +0200, Andrea Bolognani wrote: > On Thu, 2017-03-30 at 17:12 +0200, Peter Krempa wrote: [...] > > +virstorageutiltest_LDADD = \ > > + ../src/libvirt_driver_storage_impl.la \ > > + $(LDADDS) \ > > + $(NULL) > > + [...] > You should also be able to use $(qemu_LDADDS) instead of > spelling out ../src/libvirt_driver_storage_impl.la above. Yes, but that pulls in all the qemu driver crap, which has no place in a test testing only the storage driver. [...] > > +#undef DO_TEST_GLUSTER_LOOKUP_NATIVE > > +#undef DO_TEST_GLUSTER_LOOKUP_NETFS > > +#undef DO_TEST_GLUSTER_LOOKUP_FULL > > The #undefs are a bit unnecessary in this context, I'd leave > them out. It's true that it would be hard to use these somewhere else (since they are in a .c file) but ad-hoc macros should be undefined. Otherwise they are not ad-hoc and should bear the VIR_ prefix. -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On Tue, 2017-04-04 at 13:50 +0200, Peter Krempa wrote: > > > +#undef DO_TEST_GLUSTER_LOOKUP_NATIVE > > > +#undef DO_TEST_GLUSTER_LOOKUP_NETFS > > > +#undef DO_TEST_GLUSTER_LOOKUP_FULL > > > > The #undefs are a bit unnecessary in this context, I'd leave > > them out. > > It's true that it would be hard to use these somewhere else (since they > are in a .c file) but ad-hoc macros should be undefined. Otherwise they > are not ad-hoc and should bear the VIR_ prefix. Feel free to leave the hunk in then :) -- Andrea Bolognani / Red Hat / Virtualization -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2026 Red Hat, Inc.