Use the relative lookup specifier rather than the global one. Otherwise
only the first name would be looked up. Add a test case to cover the
scenario.
Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1436574
---
src/storage/storage_util.c | 2 +-
.../gluster-parse-multivol-native.xml | 14 ++++++++++
.../gluster-parse-multivol-netfs.xml | 17 ++++++++++++
.../gluster-parse-multivol-src.xml | 32 ++++++++++++++++++++++
tests/virstorageutiltest.c | 2 ++
5 files changed, 66 insertions(+), 1 deletion(-)
create mode 100644 tests/virstorageutildata/gluster-parse-multivol-native.xml
create mode 100644 tests/virstorageutildata/gluster-parse-multivol-netfs.xml
create mode 100644 tests/virstorageutildata/gluster-parse-multivol-src.xml
diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
index b7c594da2..1e44a2da4 100644
--- a/src/storage/storage_util.c
+++ b/src/storage/storage_util.c
@@ -2862,7 +2862,7 @@ virStorageUtilGlusterExtractPoolSources(const char *host,
if (!(src = virStoragePoolSourceListNewSource(list)))
goto cleanup;
- if (!(src->dir = virXPathString("string(//name)", ctxt))) {
+ if (!(src->dir = virXPathString("string(./name)", ctxt))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("failed to extract gluster volume name"));
goto cleanup;
diff --git a/tests/virstorageutildata/gluster-parse-multivol-native.xml
b/tests/virstorageutildata/gluster-parse-multivol-native.xml
new file mode 100644
index 000000000..d2d8fefc6
--- /dev/null
+++ b/tests/virstorageutildata/gluster-parse-multivol-native.xml
@@ -0,0 +1,14 @@
+<sources>
+ <source>
+ <host name='testhost'/>
+ <dir path='aaa'/>
+ </source>
+ <source>
+ <host name='testhost'/>
+ <dir path='test'/>
+ </source>
+ <source>
+ <host name='testhost'/>
+ <dir path='test1'/>
+ </source>
+</sources>
diff --git a/tests/virstorageutildata/gluster-parse-multivol-netfs.xml
b/tests/virstorageutildata/gluster-parse-multivol-netfs.xml
new file mode 100644
index 000000000..3a542999d
--- /dev/null
+++ b/tests/virstorageutildata/gluster-parse-multivol-netfs.xml
@@ -0,0 +1,17 @@
+<sources>
+ <source>
+ <host name='testhost'/>
+ <dir path='aaa'/>
+ <format type='glusterfs'/>
+ </source>
+ <source>
+ <host name='testhost'/>
+ <dir path='test'/>
+ <format type='glusterfs'/>
+ </source>
+ <source>
+ <host name='testhost'/>
+ <dir path='test1'/>
+ <format type='glusterfs'/>
+ </source>
+</sources>
diff --git a/tests/virstorageutildata/gluster-parse-multivol-src.xml
b/tests/virstorageutildata/gluster-parse-multivol-src.xml
new file mode 100644
index 000000000..0c1f9d10e
--- /dev/null
+++ b/tests/virstorageutildata/gluster-parse-multivol-src.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"
standalone="yes"?>
+<!--- note that the XML file is truncated -->
+<cliOutput>
+ <opRet>0</opRet>
+ <opErrno>0</opErrno>
+ <opErrstr/>
+ <volInfo>
+ <volumes>
+ <volume>
+ <name>aaa</name>
+ <id>d0b219d4-4169-4907-8994-d2e2434854ed</id>
+ <status>0</status>
+ <statusStr>Created</statusStr>
+ <snapshotCount>0</snapshotCount>
+ </volume>
+ <volume>
+ <name>test</name>
+ <id>32826068-2320-4b62-a825-2554edb7f020</id>
+ <status>1</status>
+ <statusStr>Started</statusStr>
+ <snapshotCount>0</snapshotCount>
+ </volume>
+ <volume>
+ <name>test1</name>
+ <id>dfa070f4-b12f-4166-8d68-041b73127abc</id>
+ <status>0</status>
+ <statusStr>Created</statusStr>
+ </volume>
+ <count>3</count>
+ </volumes>
+ </volInfo>
+</cliOutput>
diff --git a/tests/virstorageutiltest.c b/tests/virstorageutiltest.c
index 12597a014..932c922f2 100644
--- a/tests/virstorageutiltest.c
+++ b/tests/virstorageutiltest.c
@@ -101,6 +101,8 @@ mymain(void)
DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NATIVE("basic");
DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NETFS("basic");
+ DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NATIVE("multivol");
+ DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NETFS("multivol");
#undef DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NATIVE
#undef DO_TEST_GLUSTER_EXTRACT_POOL_SOURCES_NETFS
--
2.12.2