[libvirt] [PATCH 16/24] tests: qemumonitorjson: Simplify node name detection test

Peter Krempa pkrempa at redhat.com
Wed Jul 26 10:00:46 UTC 2017


We can now iterate the hash table and print all detected backing chains.
This simplifies calling of the test cases.
---
 .../qemumonitorjson-nodename-basic.result          |  1 +
 tests/qemumonitorjsontest.c                        | 55 +++++++++-------------
 2 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/tests/qemumonitorjsondata/qemumonitorjson-nodename-basic.result b/tests/qemumonitorjsondata/qemumonitorjson-nodename-basic.result
index 09e0b36ac..bc183f8b9 100644
--- a/tests/qemumonitorjsondata/qemumonitorjson-nodename-basic.result
+++ b/tests/qemumonitorjsondata/qemumonitorjson-nodename-basic.result
@@ -1,3 +1,4 @@
+drive-virtio-disk0
 filename    : '/var/lib/libvirt/images/rhel7.3.1483545313'
 format node : '#block187'
 storage node: '#block033'
diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
index cb7a7dbdb..88169832e 100644
--- a/tests/qemumonitorjsontest.c
+++ b/tests/qemumonitorjsontest.c
@@ -2696,23 +2696,19 @@ testQemuMonitorCPUInfo(const void *opaque)
 }


-struct testBlockNodeNameDetectData {
-    const char *name;
-    const char *nodenames;
-};
-
-
-static void
-testBlockNodeNameDetectFormat(virBufferPtr buf,
-                              const char *diskalias,
-                              virHashTablePtr nodedata)
+static int
+testBlockNodeNameDetectFormat(void *payload,
+                              const void *name,
+                              void *opaque)
 {
-    qemuBlockNodeNameBackingChainDataPtr entry = NULL;
+    qemuBlockNodeNameBackingChainDataPtr entry = payload;
+    const char *diskalias = name;
+    virBufferPtr buf = opaque;

     virBufferSetIndent(buf, 0);

-    if (!(entry = virHashLookup(nodedata, diskalias)))
-        return;
+    virBufferAdd(buf, diskalias, -1);
+    virBufferAddLit(buf, "\n");

     while (entry) {
         virBufferAsprintf(buf, "filename    : '%s'\n", entry->qemufilename);
@@ -2728,18 +2724,17 @@ testBlockNodeNameDetectFormat(virBufferPtr buf,

     virBufferSetIndent(buf, 0);
     virBufferAddLit(buf, "\n");
+    return 0;
 }


 static int
 testBlockNodeNameDetect(const void *opaque)
 {
-    const struct testBlockNodeNameDetectData *data = opaque;
+    const char *testname = opaque;
     const char *pathprefix = "qemumonitorjsondata/qemumonitorjson-nodename-";
     char *resultFile = NULL;
     char *actual = NULL;
-    char **nodenames = NULL;
-    char **next;
     virJSONValuePtr namedNodesJson = NULL;
     virJSONValuePtr blockstatsJson = NULL;
     virHashTablePtr nodedata = NULL;
@@ -2747,17 +2742,14 @@ testBlockNodeNameDetect(const void *opaque)
     int ret = -1;

     if (virAsprintf(&resultFile, "%s/%s%s.result",
-                    abs_srcdir, pathprefix, data->name) < 0)
-        goto cleanup;
-
-    if (!(nodenames = virStringSplit(data->nodenames, ",", 0)))
+                    abs_srcdir, pathprefix, testname) < 0)
         goto cleanup;

-    if (!(namedNodesJson = virTestLoadFileJSON(pathprefix, data->name,
+    if (!(namedNodesJson = virTestLoadFileJSON(pathprefix, testname,
                                                "-named-nodes.json", NULL)))
         goto cleanup;

-    if (!(blockstatsJson = virTestLoadFileJSON(pathprefix, data->name,
+    if (!(blockstatsJson = virTestLoadFileJSON(pathprefix, testname,
                                                "-blockstats.json", NULL)))
         goto cleanup;

@@ -2765,8 +2757,7 @@ testBlockNodeNameDetect(const void *opaque)
                                                       blockstatsJson)))
         goto cleanup;

-    for (next = nodenames; *next; next++)
-        testBlockNodeNameDetectFormat(&buf, *next, nodedata);
+    virHashForEach(nodedata, testBlockNodeNameDetectFormat, &buf);

     virBufferTrim(&buf, "\n", -1);

@@ -2784,7 +2775,6 @@ testBlockNodeNameDetect(const void *opaque)
     VIR_FREE(resultFile);
     VIR_FREE(actual);
     virHashFree(nodedata);
-    virStringListFree(nodenames);
     virJSONValueFree(namedNodesJson);
     virJSONValueFree(blockstatsJson);

@@ -2927,18 +2917,17 @@ mymain(void)
     DO_TEST_CPU_INFO("ppc64-hotplug-4", 24);
     DO_TEST_CPU_INFO("ppc64-no-threads", 16);

-#define DO_TEST_BLOCK_NODE_DETECT(testname, testnodes)                         \
+#define DO_TEST_BLOCK_NODE_DETECT(testname)                                    \
     do {                                                                       \
-        struct testBlockNodeNameDetectData testdata = {testname, testnodes};   \
         if (virTestRun("node-name-detect(" testname ")",                       \
-                       testBlockNodeNameDetect, &testdata) < 0)                \
+                       testBlockNodeNameDetect, testname) < 0)                 \
             ret = -1;                                                          \
     } while (0)

-    DO_TEST_BLOCK_NODE_DETECT("basic", "drive-virtio-disk0");
-/*    DO_TEST_BLOCK_NODE_DETECT("same-backing", "#block170,#block574"); */
-/*    DO_TEST_BLOCK_NODE_DETECT("relative", "#block153,#block1177"); */
-/*    DO_TEST_BLOCK_NODE_DETECT("gluster", "#block1008"); */
+    DO_TEST_BLOCK_NODE_DETECT("basic");
+/*    DO_TEST_BLOCK_NODE_DETECT("same-backing"); */
+/*    DO_TEST_BLOCK_NODE_DETECT("relative"); */
+/*    DO_TEST_BLOCK_NODE_DETECT("gluster"); */

 #undef DO_TEST_BLOCK_NODE_DETECT

@@ -2947,4 +2936,4 @@ mymain(void)
     return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
 }

-VIR_TEST_MAIN(mymain)
+VIR_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/virdeterministichashmock.so")
-- 
2.13.2




More information about the libvir-list mailing list