[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [libvirt RFC PATCH 01/10] tests: Add testing of backing sto
From: |
Peter Krempa |
Subject: |
[Qemu-block] [libvirt RFC PATCH 01/10] tests: Add testing of backing store string parser |
Date: |
Fri, 15 Jul 2016 15:46:34 +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 | 1 +
src/util/virstoragefile.c | 2 +-
src/util/virstoragefile.h | 3 ++
tests/virstoragetest.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 83 insertions(+), 1 deletion(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index ba718b8..100841c 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2351,6 +2351,7 @@ virStorageSourceIsBlockLocal;
virStorageSourceIsEmpty;
virStorageSourceIsLocalStorage;
virStorageSourceNewFromBacking;
+virStorageSourceNewFromBackingAbsolute;
virStorageSourceParseRBDColonString;
virStorageSourcePoolDefFree;
virStorageSourcePoolModeTypeFromString;
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 16de603..0fa9681 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2514,7 +2514,7 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src,
}
-static virStorageSourcePtr
+virStorageSourcePtr
virStorageSourceNewFromBackingAbsolute(const char *path)
{
virStorageSourcePtr ret;
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index 78beaf4..1a76fad 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -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__ */
diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
index 580065e..e2ca0b6 100644
--- a/tests/virstoragetest.c
+++ b/tests/virstoragetest.c
@@ -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,31 @@ mymain(void)
TEST_RELATIVE_BACKING(21, backingchain[10], backingchain[11],
"../../../../blah/image4");
TEST_RELATIVE_BACKING(22, backingchain[11], backingchain[11],
"../blah/image4");
+
+#define TEST_BACKING_PARSE(id, bck, xml)
\
+ do {
\
+ data5.backing = bck;
\
+ data5.expect = xml;
\
+ if (virTestRun("Backing store parse " #id,
\
+ testBackingParse, &data5) < 0)
\
+ ret = -1;
\
+ } while (0)
+
+ TEST_BACKING_PARSE(1, "path", "<source file='path'/>\n");
+ TEST_BACKING_PARSE(2, "://", NULL);
+ TEST_BACKING_PARSE(3, "http://example.com/file",
+ "<source protocol='http' name='file'>\n"
+ " <host name='example.com'/>\n"
+ "</source>\n");
+ TEST_BACKING_PARSE(3, "rbd:testshare:id=asdf:mon_host=example.com",
+ "<source protocol='rbd' name='testshare'>\n"
+ " <host name='example.com'/>\n"
+ "</source>\n");
+ TEST_BACKING_PARSE(4, "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);
--
2.8.2
- [Qemu-block] [libvirt RFC PATCH 00/10] Add support for qemu's JSON pseudo'protocol for backing store, Peter Krempa, 2016/07/15
- [Qemu-block] [libvirt RFC PATCH 03/10] util: storage: Add support for host device backing specified via JSON, Peter Krempa, 2016/07/15
- [Qemu-block] [libvirt RFC PATCH 01/10] tests: Add testing of backing store string parser,
Peter Krempa <=
- [Qemu-block] [libvirt RFC PATCH 04/10] util: storage: Add support for URI based backing volumes in qemu's JSON pseudo-protocol, Peter Krempa, 2016/07/15
- [Qemu-block] [libvirt RFC PATCH 05/10] util: storage: Add json pseudo protocol support for gluster volumes, Peter Krempa, 2016/07/15
- [Qemu-block] [libvirt RFC PATCH 02/10] util: storage: Add parser for qemu's "json" backing pseudo-protocol, Peter Krempa, 2016/07/15
- [Qemu-block] [libvirt RFC PATCH 06/10] util: storage: Add json pseudo protocol support for iSCSI volumes, Peter Krempa, 2016/07/15
- [Qemu-block] [libvirt RFC PATCH 07/10] Add JSON backing volume parser for 'nbd' protocol, Peter Krempa, 2016/07/15
- [Qemu-block] [libvirt RFC PATCH 09/10] util: storage: Add 'ssh' network storage protocol, Peter Krempa, 2016/07/15