[libvirt] [PATCH v3 3/5] test: Introduce testing of virStorageUtilGlusterExtractPoolSources

Peter Krempa pkrempa at redhat.com
Tue Apr 4 12:20:57 UTC 2017


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




More information about the libvir-list mailing list