]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
tests: json: Add test for the deflattening function
authorPeter Krempa <pkrempa@redhat.com>
Mon, 26 Jun 2017 16:02:35 +0000 (18:02 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 11 Jul 2017 12:12:55 +0000 (14:12 +0200)
Add a few test cases to verify that the old behaviour does not break and
that new one behaves sanely.

17 files changed:
tests/virjsondata/deflatten-basic-file-in.json [new file with mode: 0644]
tests/virjsondata/deflatten-basic-file-out.json [new file with mode: 0644]
tests/virjsondata/deflatten-basic-generic-in.json [new file with mode: 0644]
tests/virjsondata/deflatten-concat-double-key-in.json [new file with mode: 0644]
tests/virjsondata/deflatten-concat-double-key-out.json [new file with mode: 0644]
tests/virjsondata/deflatten-concat-in.json [new file with mode: 0644]
tests/virjsondata/deflatten-concat-out.json [new file with mode: 0644]
tests/virjsondata/deflatten-deep-file-in.json [new file with mode: 0644]
tests/virjsondata/deflatten-deep-file-out.json [new file with mode: 0644]
tests/virjsondata/deflatten-deep-generic-in.json [new file with mode: 0644]
tests/virjsondata/deflatten-double-key-in.json [new file with mode: 0644]
tests/virjsondata/deflatten-double-key-out.json [new file with mode: 0644]
tests/virjsondata/deflatten-nested-in.json [new file with mode: 0644]
tests/virjsondata/deflatten-nested-out.json [new file with mode: 0644]
tests/virjsondata/deflatten-unflattened-in.json [new file with mode: 0644]
tests/virjsondata/deflatten-unflattened-out.json [new file with mode: 0644]
tests/virjsontest.c

diff --git a/tests/virjsondata/deflatten-basic-file-in.json b/tests/virjsondata/deflatten-basic-file-in.json
new file mode 100644 (file)
index 0000000..54f8bcd
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "file.int": 1,
+    "file.string": "string",
+    "file.object": {
+        "data":"value",
+        "foo":"bar"
+    }
+}
diff --git a/tests/virjsondata/deflatten-basic-file-out.json b/tests/virjsondata/deflatten-basic-file-out.json
new file mode 100644 (file)
index 0000000..1a48eda
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "file": {
+    "int": 1,
+    "string": "string",
+    "object": {
+      "data": "value",
+      "foo": "bar"
+    }
+  }
+}
diff --git a/tests/virjsondata/deflatten-basic-generic-in.json b/tests/virjsondata/deflatten-basic-generic-in.json
new file mode 100644 (file)
index 0000000..0830428
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "foo.int": 1,
+    "bar.int": 1,
+    "foo.string": "string",
+    "foo.object": {
+        "data":"value",
+        "foo":"bar"
+    },
+    "blurb.string": "string",
+    "blurb.object": {
+        "data":"value",
+        "foo":"bar"
+    }
+}
diff --git a/tests/virjsondata/deflatten-concat-double-key-in.json b/tests/virjsondata/deflatten-concat-double-key-in.json
new file mode 100644 (file)
index 0000000..5bb020c
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "file.nest":{
+        "into":"is already here"
+    },
+    "file.nest.into":2,
+    "file.nest.there":"too"
+}
diff --git a/tests/virjsondata/deflatten-concat-double-key-out.json b/tests/virjsondata/deflatten-concat-double-key-out.json
new file mode 100644 (file)
index 0000000..5624ef1
--- /dev/null
@@ -0,0 +1,9 @@
+{
+  "file": {
+    "nest": {
+      "into": "is already here"
+    },
+    "nest.into": 2,
+    "nest.there": "too"
+  }
+}
diff --git a/tests/virjsondata/deflatten-concat-in.json b/tests/virjsondata/deflatten-concat-in.json
new file mode 100644 (file)
index 0000000..91a8243
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "file.nest":{},
+    "file.nest.into":2,
+    "file.nest.there":"too"
+}
diff --git a/tests/virjsondata/deflatten-concat-out.json b/tests/virjsondata/deflatten-concat-out.json
new file mode 100644 (file)
index 0000000..539d2cc
--- /dev/null
@@ -0,0 +1,9 @@
+{
+  "file": {
+    "nest": {
+
+    },
+    "nest.into": 2,
+    "nest.there": "too"
+  }
+}
diff --git a/tests/virjsondata/deflatten-deep-file-in.json b/tests/virjsondata/deflatten-deep-file-in.json
new file mode 100644 (file)
index 0000000..f1b1586
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "file.double.nest1":"some",
+    "file.double.nest2":"more",
+    "file.double.nest3": {
+        "even":"objects"
+    },
+    "file.very.deeply.nested.object.chains.nest1":"some",
+    "file.very.deeply.nested.object.chains.nest2":"stuff"
+}
diff --git a/tests/virjsondata/deflatten-deep-file-out.json b/tests/virjsondata/deflatten-deep-file-out.json
new file mode 100644 (file)
index 0000000..a5910c9
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "file": {
+    "double.nest1": "some",
+    "double.nest2": "more",
+    "double.nest3": {
+      "even": "objects"
+    },
+    "very.deeply.nested.object.chains.nest1": "some",
+    "very.deeply.nested.object.chains.nest2": "stuff"
+  }
+}
diff --git a/tests/virjsondata/deflatten-deep-generic-in.json b/tests/virjsondata/deflatten-deep-generic-in.json
new file mode 100644 (file)
index 0000000..6a4edfb
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "foo.double.nest1":"some",
+    "foo.double.nest2":"more",
+    "bar.double.nest3": {
+        "even":"objects"
+    },
+    "foo.very.deeply.nested.object.chains.nest1":"some",
+    "foo.very.deeply.nested.object.chains.nest2":"stuff"
+}
diff --git a/tests/virjsondata/deflatten-double-key-in.json b/tests/virjsondata/deflatten-double-key-in.json
new file mode 100644 (file)
index 0000000..7bca292
--- /dev/null
@@ -0,0 +1,4 @@
+{
+    "file.nest":1,
+    "file.nest.into":2
+}
diff --git a/tests/virjsondata/deflatten-double-key-out.json b/tests/virjsondata/deflatten-double-key-out.json
new file mode 100644 (file)
index 0000000..ca6766e
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "file": {
+    "nest": 1,
+    "nest.into": 2
+  }
+}
diff --git a/tests/virjsondata/deflatten-nested-in.json b/tests/virjsondata/deflatten-nested-in.json
new file mode 100644 (file)
index 0000000..38e6968
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "file.nest": {
+        "even.objects":"can",
+        "even.contain":"some",
+        "even.more":{
+            "deeply.nested":"objects",
+            "deeply.needing":"deflattening",
+            "deeply.some.even":"more",
+            "deeply.some.than":{
+                "others.thought.was":"even",
+                "others.thought.completely":"necessary"
+            },
+            "perhaps":"flat value"
+        }
+    }
+}
diff --git a/tests/virjsondata/deflatten-nested-out.json b/tests/virjsondata/deflatten-nested-out.json
new file mode 100644 (file)
index 0000000..acdcd1f
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "file": {
+    "nest": {
+      "even.objects": "can",
+      "even.contain": "some",
+      "even.more": {
+        "deeply.nested": "objects",
+        "deeply.needing": "deflattening",
+        "deeply.some.even": "more",
+        "deeply.some.than": {
+          "others.thought.was": "even",
+          "others.thought.completely": "necessary"
+        },
+        "perhaps": "flat value"
+      }
+    }
+  }
+}
diff --git a/tests/virjsondata/deflatten-unflattened-in.json b/tests/virjsondata/deflatten-unflattened-in.json
new file mode 100644 (file)
index 0000000..e8a68fe
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "file.blah": {
+        "any":"possible",
+        "combination":{
+            "of":"json",
+            "nested":{
+                "objects":"should",
+                "be":"possible"
+            }
+        }
+    }
+}
diff --git a/tests/virjsondata/deflatten-unflattened-out.json b/tests/virjsondata/deflatten-unflattened-out.json
new file mode 100644 (file)
index 0000000..c02cb48
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "file": {
+    "blah": {
+      "any": "possible",
+      "combination": {
+        "of": "json",
+        "nested": {
+          "objects": "should",
+          "be": "possible"
+        }
+      }
+    }
+  }
+}
index b67f68ccb274ab36f9bee35d93b69d8a6f560769..e8c4e75f4ad6888401426c948529c3ab4c59dd78 100644 (file)
@@ -9,6 +9,8 @@
 #include "virjson.h"
 #include "testutils.h"
 
+#define VIR_FROM_THIS VIR_FROM_NONE
+
 struct testInfo {
     const char *doc;
     const char *expect;
@@ -311,6 +313,63 @@ testJSONCopy(const void *data)
 }
 
 
+static int
+testJSONDeflatten(const void *data)
+{
+    const struct testInfo *info = data;
+    virJSONValuePtr injson = NULL;
+    virJSONValuePtr deflattened = NULL;
+    char *infile = NULL;
+    char *indata = NULL;
+    char *outfile = NULL;
+    char *actual = NULL;
+    int ret = -1;
+
+    if (virAsprintf(&infile, "%s/virjsondata/deflatten-%s-in.json",
+                    abs_srcdir, info->doc) < 0 ||
+        virAsprintf(&outfile, "%s/virjsondata/deflatten-%s-out.json",
+                    abs_srcdir, info->doc) < 0)
+        goto cleanup;
+
+    if (virTestLoadFile(infile, &indata) < 0)
+        goto cleanup;
+
+    if (!(injson = virJSONValueFromString(indata)))
+        goto cleanup;
+
+    if ((deflattened = virJSONValueObjectDeflatten(injson))) {
+        if (!info->pass) {
+            VIR_TEST_VERBOSE("%s: deflattening should have failed\n", info->doc);
+            goto cleanup;
+        }
+    } else {
+        if (!info->pass)
+            ret = 0;
+
+        goto cleanup;
+    }
+
+    if (!(actual = virJSONValueToString(deflattened, true)))
+        goto cleanup;
+
+    if (virTestCompareToFile(actual, outfile) < 0)
+        goto cleanup;
+
+    ret = 0;
+
+ cleanup:
+    virJSONValueFree(injson);
+    virJSONValueFree(deflattened);
+    VIR_FREE(infile);
+    VIR_FREE(indata);
+    VIR_FREE(outfile);
+    VIR_FREE(actual);
+
+    return ret;
+
+}
+
+
 static int
 mymain(void)
 {
@@ -448,6 +507,19 @@ mymain(void)
                  "{ \"a\": {}, \"b\": 1, \"c\": \"str\", \"d\": [] }",
                  NULL, true);
 
+#define DO_TEST_DEFLATTEN(name, pass) \
+    DO_TEST_FULL(name, Deflatten, name, NULL, pass)
+
+    DO_TEST_DEFLATTEN("unflattened", true);
+    DO_TEST_DEFLATTEN("basic-file", true);
+    DO_TEST_DEFLATTEN("basic-generic", false);
+    DO_TEST_DEFLATTEN("deep-file", true);
+    DO_TEST_DEFLATTEN("deep-generic", false);
+    DO_TEST_DEFLATTEN("nested", true);
+    DO_TEST_DEFLATTEN("double-key", true);
+    DO_TEST_DEFLATTEN("concat", true);
+    DO_TEST_DEFLATTEN("concat-double-key", true);
+
     return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
 }