]> xenbits.xensource.com Git - libvirt.git/commitdiff
tests: Add testing of backing store string parser
authorPeter Krempa <pkrempa@redhat.com>
Tue, 12 Jul 2016 15:04:16 +0000 (17:04 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 27 Jul 2016 07:39:33 +0000 (09:39 +0200)
As we already test that the extraction of the backing store string works
well additional tests for the backing store string parser can be made
simpler.

Export virStorageSourceNewFromBackingAbsolute and use it to parse the
backing store strings, format them using virDomainDiskSourceFormat and
match them against expected XMLs.

src/libvirt_private.syms
src/util/virstoragefile.c
src/util/virstoragefile.h
tests/virstoragetest.c

index cbc408f78405f0e8ea3409fdbbd5243ab6a363d9..1c170b6ded797e4b12c33efb0edba80effba0805 100644 (file)
@@ -2364,6 +2364,7 @@ virStorageSourceIsBlockLocal;
 virStorageSourceIsEmpty;
 virStorageSourceIsLocalStorage;
 virStorageSourceNewFromBacking;
+virStorageSourceNewFromBackingAbsolute;
 virStorageSourceParseRBDColonString;
 virStorageSourcePoolDefFree;
 virStorageSourcePoolModeTypeFromString;
index 16de6035887075fca6b42cd699916a7aec613d1b..0fa96815b69bde38023832eaba17957a954cb8cc 100644 (file)
@@ -2514,7 +2514,7 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src,
 }
 
 
-static virStorageSourcePtr
+virStorageSourcePtr
 virStorageSourceNewFromBackingAbsolute(const char *path)
 {
     virStorageSourcePtr ret;
index 78beaf4def38840c0c316537cddfdd1b089fd662..1a76fad0f6f8692b74d1e86f2f751fbf2391d731 100644 (file)
@@ -380,4 +380,7 @@ int virStorageFileGetRelativeBackingPath(virStorageSourcePtr from,
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
 
 int virStorageFileCheckCompat(const char *compat);
+
+virStorageSourcePtr virStorageSourceNewFromBackingAbsolute(const char *path);
+
 #endif /* __VIR_STORAGE_FILE_H__ */
index 580065e04d1cfe4a59257edb90bff6a727a4f4df..6016a3beb8631becb625c2cb5f0aa6d723096ac7 100644 (file)
@@ -665,6 +665,58 @@ testPathRelative(const void *args)
 }
 
 
+struct testBackingParseData {
+    const char *backing;
+    const char *expect;
+};
+
+static int
+testBackingParse(const void *args)
+{
+    const struct testBackingParseData *data = args;
+    virBuffer buf = VIR_BUFFER_INITIALIZER;
+    virStorageSourcePtr src = NULL;
+    char *xml = NULL;
+    int ret = -1;
+
+    if (!(src = virStorageSourceNewFromBackingAbsolute(data->backing))) {
+        if (!data->expect)
+            ret = 0;
+
+        goto cleanup;
+    }
+
+    if (src && !data->expect) {
+        fprintf(stderr, "parsing of backing store string '%s' should "
+                        "have failed\n", data->backing);
+        goto cleanup;
+    }
+
+    if (virDomainDiskSourceFormat(&buf, src, 0, 0) < 0 ||
+        !(xml = virBufferContentAndReset(&buf))) {
+        fprintf(stderr, "failed to format disk source xml\n");
+        goto cleanup;
+    }
+
+    if (!STREQ(xml, data->expect)) {
+        fprintf(stderr, "\n backing store string '%s'\n"
+                        "expected storage source xml:\n%s\n"
+                        "actual storage source xml:\n%s\n",
+                        data->backing, data->expect, xml);
+        goto cleanup;
+    }
+
+    ret = 0;
+
+ cleanup:
+    virStorageSourceFree(src);
+    virBufferFreeAndReset(&buf);
+    VIR_FREE(xml);
+
+    return ret;
+}
+
+
 static int
 mymain(void)
 {
@@ -674,6 +726,7 @@ mymain(void)
     struct testLookupData data2;
     struct testPathCanonicalizeData data3;
     struct testPathRelativeBacking data4;
+    struct testBackingParseData data5;
     virStorageSourcePtr chain = NULL;
     virStorageSourcePtr chain2; /* short for chain->backingStore */
     virStorageSourcePtr chain3; /* short for chain2->backingStore */
@@ -1276,6 +1329,33 @@ mymain(void)
     TEST_RELATIVE_BACKING(21, backingchain[10], backingchain[11], "../../../../blah/image4");
     TEST_RELATIVE_BACKING(22, backingchain[11], backingchain[11], "../blah/image4");
 
+
+    virTestCounterReset("Backing store parse ");
+
+#define TEST_BACKING_PARSE(bck, xml)                                           \
+    do {                                                                       \
+        data5.backing = bck;                                                   \
+        data5.expect = xml;                                                    \
+        if (virTestRun(virTestCounterNext(),                                   \
+                       testBackingParse, &data5) < 0)                          \
+            ret = -1;                                                          \
+    } while (0)
+
+    TEST_BACKING_PARSE("path", "<source file='path'/>\n");
+    TEST_BACKING_PARSE("://", NULL);
+    TEST_BACKING_PARSE("http://example.com/file",
+                       "<source protocol='http' name='file'>\n"
+                       "  <host name='example.com'/>\n"
+                       "</source>\n");
+    TEST_BACKING_PARSE("rbd:testshare:id=asdf:mon_host=example.com",
+                       "<source protocol='rbd' name='testshare'>\n"
+                       "  <host name='example.com'/>\n"
+                       "</source>\n");
+    TEST_BACKING_PARSE("nbd:example.org:6000:exportname=blah",
+                       "<source protocol='nbd' name='blah'>\n"
+                       "  <host name='example.org' port='6000'/>\n"
+                       "</source>\n");
+
  cleanup:
     /* Final cleanup */
     virStorageSourceFree(chain);