[libvirt] [PATCH 5/9] tests: json: Add test for the deflattening function

Peter Krempa pkrempa at redhat.com
Tue Jun 27 12:46:46 UTC 2017


Add a few test cases to verify that the old behaviour does not break and
that new one behaves sanely.
---
 tests/virjsondata/deflatten-basic-file-in.json     |  8 +++
 tests/virjsondata/deflatten-basic-file-out.json    | 10 +++
 tests/virjsondata/deflatten-basic-generic-in.json  | 14 ++++
 .../deflatten-concat-double-key-in.json            |  7 ++
 .../deflatten-concat-double-key-out.json           |  9 +++
 tests/virjsondata/deflatten-concat-in.json         |  5 ++
 tests/virjsondata/deflatten-concat-out.json        |  9 +++
 tests/virjsondata/deflatten-deep-file-in.json      |  9 +++
 tests/virjsondata/deflatten-deep-file-out.json     | 11 ++++
 tests/virjsondata/deflatten-deep-generic-in.json   |  9 +++
 tests/virjsondata/deflatten-double-key-in.json     |  4 ++
 tests/virjsondata/deflatten-double-key-out.json    |  6 ++
 tests/virjsondata/deflatten-nested-in.json         | 16 +++++
 tests/virjsondata/deflatten-nested-out.json        | 18 ++++++
 tests/virjsondata/deflatten-unflattened-in.json    | 12 ++++
 tests/virjsondata/deflatten-unflattened-out.json   | 14 ++++
 tests/virjsontest.c                                | 74 ++++++++++++++++++++++
 17 files changed, 235 insertions(+)
 create mode 100644 tests/virjsondata/deflatten-basic-file-in.json
 create mode 100644 tests/virjsondata/deflatten-basic-file-out.json
 create mode 100644 tests/virjsondata/deflatten-basic-generic-in.json
 create mode 100644 tests/virjsondata/deflatten-concat-double-key-in.json
 create mode 100644 tests/virjsondata/deflatten-concat-double-key-out.json
 create mode 100644 tests/virjsondata/deflatten-concat-in.json
 create mode 100644 tests/virjsondata/deflatten-concat-out.json
 create mode 100644 tests/virjsondata/deflatten-deep-file-in.json
 create mode 100644 tests/virjsondata/deflatten-deep-file-out.json
 create mode 100644 tests/virjsondata/deflatten-deep-generic-in.json
 create mode 100644 tests/virjsondata/deflatten-double-key-in.json
 create mode 100644 tests/virjsondata/deflatten-double-key-out.json
 create mode 100644 tests/virjsondata/deflatten-nested-in.json
 create mode 100644 tests/virjsondata/deflatten-nested-out.json
 create mode 100644 tests/virjsondata/deflatten-unflattened-in.json
 create mode 100644 tests/virjsondata/deflatten-unflattened-out.json

diff --git a/tests/virjsondata/deflatten-basic-file-in.json b/tests/virjsondata/deflatten-basic-file-in.json
new file mode 100644
index 000000000..54f8bcd88
--- /dev/null
+++ b/tests/virjsondata/deflatten-basic-file-in.json
@@ -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
index 000000000..1a48eda54
--- /dev/null
+++ b/tests/virjsondata/deflatten-basic-file-out.json
@@ -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
index 000000000..08304287d
--- /dev/null
+++ b/tests/virjsondata/deflatten-basic-generic-in.json
@@ -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
index 000000000..5bb020ca9
--- /dev/null
+++ b/tests/virjsondata/deflatten-concat-double-key-in.json
@@ -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
index 000000000..5624ef123
--- /dev/null
+++ b/tests/virjsondata/deflatten-concat-double-key-out.json
@@ -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
index 000000000..91a824375
--- /dev/null
+++ b/tests/virjsondata/deflatten-concat-in.json
@@ -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
index 000000000..539d2cc30
--- /dev/null
+++ b/tests/virjsondata/deflatten-concat-out.json
@@ -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
index 000000000..f1b1586c0
--- /dev/null
+++ b/tests/virjsondata/deflatten-deep-file-in.json
@@ -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
index 000000000..a5910c9f7
--- /dev/null
+++ b/tests/virjsondata/deflatten-deep-file-out.json
@@ -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
index 000000000..6a4edfb9b
--- /dev/null
+++ b/tests/virjsondata/deflatten-deep-generic-in.json
@@ -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
index 000000000..7bca2921b
--- /dev/null
+++ b/tests/virjsondata/deflatten-double-key-in.json
@@ -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
index 000000000..ca6766e5b
--- /dev/null
+++ b/tests/virjsondata/deflatten-double-key-out.json
@@ -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
index 000000000..38e69683e
--- /dev/null
+++ b/tests/virjsondata/deflatten-nested-in.json
@@ -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
index 000000000..acdcd1fc8
--- /dev/null
+++ b/tests/virjsondata/deflatten-nested-out.json
@@ -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
index 000000000..e8a68fe17
--- /dev/null
+++ b/tests/virjsondata/deflatten-unflattened-in.json
@@ -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
index 000000000..c02cb4864
--- /dev/null
+++ b/tests/virjsondata/deflatten-unflattened-out.json
@@ -0,0 +1,14 @@
+{
+  "file": {
+    "blah": {
+      "any": "possible",
+      "combination": {
+        "of": "json",
+        "nested": {
+          "objects": "should",
+          "be": "possible"
+        }
+      }
+    }
+  }
+}
diff --git a/tests/virjsontest.c b/tests/virjsontest.c
index b67f68ccb..d69b22bf3 100644
--- a/tests/virjsontest.c
+++ b/tests/virjsontest.c
@@ -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;
@@ -312,6 +314,65 @@ 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) {
+            if (virTestGetVerbose())
+                fprintf(stderr, "deflattening should have failed\n");
+
+            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(outfile);
+    VIR_FREE(outfile);
+    VIR_FREE(actual);
+
+    return ret;
+
+}
+
+
+static int
 mymain(void)
 {
     int ret = 0;
@@ -448,6 +509,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;
 }

-- 
2.12.2




More information about the libvir-list mailing list