[libvirt] [PATCH V4 2/3] tests: add tests for virJSONStringCompare

Jim Fehlig jfehlig at suse.com
Thu Sep 11 23:09:57 UTC 2014


Signed-off-by: Jim Fehlig <jfehlig at suse.com>
---

This patch is new to V4.

 tests/jsontest.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 58 insertions(+), 5 deletions(-)

diff --git a/tests/jsontest.c b/tests/jsontest.c
index a2a42e3..5d5f619 100644
--- a/tests/jsontest.c
+++ b/tests/jsontest.c
@@ -12,6 +12,7 @@
 struct testInfo {
     const char *doc;
     const char *expect;
+    const char **ignore_contexts;
     bool pass;
 };
 
@@ -131,22 +132,45 @@ testJSONAddRemove(const void *data)
 
 
 static int
+testJSONCompare(const void *data)
+{
+    const struct testInfo *info = data;
+    bool ret;
+
+    ret = virJSONStringCompare(info->expect,
+                               info->doc,
+                               info->ignore_contexts,
+                               0);
+
+    if (ret == info->pass)
+        return 0;
+    else
+        return -1;
+}
+
+
+static int
 mymain(void)
 {
     int ret = 0;
+    const char *ignore_paths[] = {
+        "/dict1/key3",
+        "/key4",
+        NULL
+    };
 
-#define DO_TEST_FULL(name, cmd, doc, expect, pass)                  \
+#define DO_TEST_FULL(name, cmd, doc, expect, ignore_ctx, pass)      \
     do {                                                            \
-        struct testInfo info = { doc, expect, pass };               \
+        struct testInfo info = { doc, expect, ignore_ctx, pass };   \
         if (virtTestRun(name, testJSON ## cmd, &info) < 0)          \
             ret = -1;                                               \
     } while (0)
 
 #define DO_TEST_PARSE(name, doc)                \
-    DO_TEST_FULL(name, FromString, doc, NULL, true)
+    DO_TEST_FULL(name, FromString, doc, NULL, NULL, true)
 
 #define DO_TEST_PARSE_FAIL(name, doc)           \
-    DO_TEST_FULL(name, FromString, doc, NULL, false)
+    DO_TEST_FULL(name, FromString, doc, NULL, NULL, false)
 
 
     DO_TEST_PARSE("Simple", "{\"return\": {}, \"id\": \"libvirt-1\"}");
@@ -188,9 +212,10 @@ mymain(void)
     DO_TEST_FULL("add and remove", AddRemove,
                  "{\"name\": \"sample\", \"value\": true}",
                  "{\"value\":true,\"newname\":\"foo\"}",
+                 NULL,
                  true);
     DO_TEST_FULL("add and remove", AddRemove,
-                 "[ 1 ]", NULL, false);
+                 "[ 1 ]", NULL, NULL, false);
 
 
     DO_TEST_PARSE("almost nothing", "[]");
@@ -214,6 +239,34 @@ mymain(void)
                        "[ {[\"key1\", \"key2\"]: \"value\"} ]");
     DO_TEST_PARSE_FAIL("object with unterminated key", "{ \"key:7 }");
 
+    DO_TEST_FULL("Compare identical docs", Compare,
+                 "{ \"key1\" : \"value1\", \"key2\" : \"value2\"}",
+                 "{ \"key1\" : \"value1\", \"key2\" : \"value2\"}",
+                 NULL, true);
+
+    DO_TEST_FULL("Compare different docs", Compare,
+                 "{\"dict1\" : { \"key1\" : \"value1\", \"key2\" : \"value2\", "
+                 "\"key3\" : [\"elem1\", \"elemfoo\"]}}",
+                 "{\"dict1\" : { \"key1\" : \"value1\", \"key2\" : \"value2\", "
+                 "\"key3\" : [\"elem1\", \"elem2\"]}}",
+                 NULL, false);
+
+    DO_TEST_FULL("Compare docs and ignore differing contexts", Compare,
+                 "{\"dict1\" : { \"key1\" : \"value1\", \"key2\" : \"value2\", "
+                 "\"key3\" : \"valuefoo\"}, \"key4\" : \"valuebar\"}",
+                 "{\"dict1\" : { \"key1\" : \"value1\", \"key2\" : \"value2\", "
+                 "\"key3\" : \"value3\"}, \"key4\" : \"value4\"}",
+                 ignore_paths, true);
+
+    DO_TEST_FULL("Compare docs with insufficient ignored contexts", Compare,
+                 "{\"dict1\" : { \"key1\" : \"value1\", \"key2\" : \"value2\", "
+                 "\"key3\" : \"valuefoo\"}, \"key4\" : \"valuebar\", "
+                 "\"key5\" : \"valuebaz\"}",
+                 "{\"dict1\" : { \"key1\" : \"value1\", \"key2\" : \"value2\", "
+                 "\"key3\" : \"value3\"}, \"key4\" : \"value4\", "
+                 "\"key5\" : \"value5\"}",
+                 ignore_paths, false);
+
     return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
 }
 
-- 
1.8.4.5




More information about the libvir-list mailing list