From 65656852dc3dd472e6b47667bd0ef7686253737d Mon Sep 17 00:00:00 2001 From: Jozef Gloncak Date: Mon, 18 Nov 2013 10:12:32 +0100 Subject: [PATCH] Json to composite node test contains tests for: - elements leaf, leaf list, list, container under list or container - json top level elements check - check of read empty simple data like leaf, leaf list Change-Id: I6826cb32415fc135eb7f966f7325c5d15e21ac1a Signed-off-by: Jozef Gloncak --- .../impl/JsonToCompositeNodeProvider.java | 2 +- .../impl/test/FromJsonToCompositeNode.java | 234 ++++++++++++++++++ .../impl/test/ToJsonBasicDataTypesTest.java | 8 +- .../json-to-composite-node/empty-data.json | 6 + .../json-to-composite-node/empty-data1.json | 5 + .../multiple-items-in-list.json | 26 ++ .../simple-container.json | 15 ++ .../json-to-composite-node/simple-list.json | 17 ++ .../wrong-top-level1.json | 9 + .../wrong-top-level2.json | 9 + .../wrong-top-level3.json | 3 + .../simple-data-types/simple-data-types.yang | 3 + .../simple-data-types/xml/data.xml | 1 + 13 files changed, 336 insertions(+), 2 deletions(-) create mode 100644 opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/FromJsonToCompositeNode.java create mode 100644 opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/empty-data.json create mode 100644 opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/empty-data1.json create mode 100644 opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/multiple-items-in-list.json create mode 100644 opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/simple-container.json create mode 100644 opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/simple-list.json create mode 100644 opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level1.json create mode 100644 opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level2.json create mode 100644 opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level3.json diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonToCompositeNodeProvider.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonToCompositeNodeProvider.java index 27ebebabd7..dea4a73cd1 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonToCompositeNodeProvider.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonToCompositeNodeProvider.java @@ -36,7 +36,7 @@ public enum JsonToCompositeNodeProvider implements MessageBodyReader> children = ((CompositeNode) compositeNode).getChildren(); + assertEquals(1, children.size()); + assertEquals("lflst2", children.get(0).getNodeType().getLocalName()); + assertEquals("45", children.get(0).getValue()); + + String reason = null; + try { + compositeContainerFromJson("/json-to-composite-node/empty-data1.json"); + } catch (JsonSyntaxException e) { + reason = e.getMessage(); + } + + assertTrue(reason.contains("Expected value at line")); + + } + + private void verityMultipleItemsInList(CompositeNode compositeNode) { + List> childrenNodes = compositeNode.getChildren(); + assertEquals(4, childrenNodes.size()); + boolean lf11Found = false; + boolean cont11Found = false; + boolean lst11Found = false; + for (Node lst1Item : childrenNodes) { + assertEquals("lst1", lst1Item.getNodeType().getLocalName()); + assertTrue(lst1Item instanceof CompositeNode); + + List> childrenLst1 = ((CompositeNode) lst1Item).getChildren(); + assertEquals(1, childrenLst1.size()); + String localName = childrenLst1.get(0).getNodeType().getLocalName(); + if (localName.equals("lf11")) { + assertTrue(childrenLst1.get(0) instanceof SimpleNode); + lf11Found = true; + } else if (localName.equals("lflst11")) { + assertTrue(childrenLst1.get(0) instanceof SimpleNode); + assertEquals("45", ((SimpleNode) childrenLst1.get(0)).getValue()); + lf11Found = true; + } else if (localName.equals("cont11")) { + assertTrue(childrenLst1.get(0) instanceof CompositeNode); + cont11Found = true; + } else if (localName.equals("lst11")) { + lst11Found = true; + assertTrue(childrenLst1.get(0) instanceof CompositeNode); + assertEquals(0, ((CompositeNode) childrenLst1.get(0)).getChildren().size()); + } + + } + + assertTrue(lf11Found); + assertTrue(cont11Found); + assertTrue(lst11Found); + + } + + private void verifyCompositeNode(CompositeNode compositeNode) { + boolean cont1Found = false; + boolean lst1Found = false; + boolean lflst1_1Found = false; + boolean lflst1_2Found = false; + boolean lf1Found = false; + + for (Node node : compositeNode.getChildren()) { + if (node.getNodeType().getLocalName().equals("cont1")) { + if (node instanceof CompositeNode) { + cont1Found = true; + assertEquals(0, ((CompositeNode) node).getChildren().size()); + } + } else if (node.getNodeType().getLocalName().equals("lst1")) { + if (node instanceof CompositeNode) { + lst1Found = true; + assertEquals(0, ((CompositeNode) node).getChildren().size()); + } + } else if (node.getNodeType().getLocalName().equals("lflst1")) { + if (node instanceof SimpleNode) { + if (((SimpleNode) node).getValue().equals("lflst1_1")) { + lflst1_1Found = true; + } else if (((SimpleNode) node).getValue().equals("lflst1_2")) { + lflst1_2Found = true; + } + } + + } else if (node.getNodeType().getLocalName().equals("lf1")) { + if (node instanceof SimpleNode) { + if (((SimpleNode) node).getValue().equals("lf1")) { + lf1Found = true; + } + } + } + } + assertTrue(cont1Found); + assertTrue(lst1Found); + assertTrue(lflst1_1Found); + assertTrue(lflst1_2Found); + assertTrue(lf1Found); + } + + private CompositeNode compositeContainerFromJson(String jsonPath) throws WebApplicationException { + + JsonToCompositeNodeProvider jsonToCompositeNodeProvider = JsonToCompositeNodeProvider.INSTANCE; + InputStream jsonStream = FromJsonToCompositeNode.class.getResourceAsStream(jsonPath); + try { + CompositeNode compositeNode = jsonToCompositeNodeProvider + .readFrom(null, null, null, null, null, jsonStream); + assertTrue(compositeNode instanceof CompositeNodeWrapper); + try { + addDummyNamespaceToAllNodes((CompositeNodeWrapper) compositeNode); + return ((CompositeNodeWrapper) compositeNode).unwrap(null); + } catch (URISyntaxException e) { + LOG.error(e.getMessage()); + assertTrue(e.getMessage(), false); + } + } catch (IOException e) { + LOG.error(e.getMessage()); + assertTrue(e.getMessage(), false); + } + return null; + } + + private void addDummyNamespaceToAllNodes(NodeWrapper wrappedNode) throws URISyntaxException { + wrappedNode.setNamespace(new URI("")); + if (wrappedNode instanceof CompositeNodeWrapper) { + for (NodeWrapper childNodeWrapper : ((CompositeNodeWrapper) wrappedNode).getValues()) { + addDummyNamespaceToAllNodes(childNodeWrapper); + } + } + } +} diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/ToJsonBasicDataTypesTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/ToJsonBasicDataTypesTest.java index 8cdbf78db9..f88a335f18 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/ToJsonBasicDataTypesTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/ToJsonBasicDataTypesTest.java @@ -72,7 +72,8 @@ public class ToJsonBasicDataTypesTest { boolean lfbinaryChecked = false; // boolean lfref1Checked = false; boolean lfemptyChecked = false; - + boolean lfstr1Checked = false; + while (jReader.hasNext()) { String keyName = jReader.nextName(); JsonToken peek = null; @@ -98,6 +99,10 @@ public class ToJsonBasicDataTypesTest { assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek); assertEquals("lfstr", jReader.nextString()); lfstrChecked = true; + } else if (keyName.equals("lfstr1")) { + assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek); + assertEquals("", jReader.nextString()); + lfstr1Checked = true; } else if (keyName.equals("lfbool1")) { assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek); assertEquals(true, jReader.nextBoolean()); @@ -167,6 +172,7 @@ public class ToJsonBasicDataTypesTest { assertTrue("lfbool1 wasn't checked", lfbool1Checked); assertTrue("lfbool2 wasn't checked", lfbool2Checked); assertTrue("lfstr wasn't checked", lfstrChecked); + assertTrue("lfstr1 wasn't checked", lfstr1Checked); assertTrue("lfbinary wasn't checked", lfbinaryChecked); assertTrue("lfempty wasn't checked", lfemptyChecked); // assertTrue("lfref1 wasn't checked", lfref1Checked); diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/empty-data.json b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/empty-data.json new file mode 100644 index 0000000000..a6ad7f6272 --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/empty-data.json @@ -0,0 +1,6 @@ +{ + "cont": { + "lflst1":[], + "lflst2":[45] + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/empty-data1.json b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/empty-data1.json new file mode 100644 index 0000000000..10d964d644 --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/empty-data1.json @@ -0,0 +1,5 @@ +{ + "cont": { + "lf": + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/multiple-items-in-list.json b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/multiple-items-in-list.json new file mode 100644 index 0000000000..8e882664cd --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/multiple-items-in-list.json @@ -0,0 +1,26 @@ +{ + "lst":[ + { + "lst1": [ + { + "lf11":"lf11_1" + }, + { + "lflst11":[ + 45 + ] + }, + { + "cont11":{ + } + }, + { + "lst11":[ + { + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/simple-container.json b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/simple-container.json new file mode 100644 index 0000000000..1be414991e --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/simple-container.json @@ -0,0 +1,15 @@ +{ + "cont":{ + "cont1":{ + }, + "lst1": [ + { + } + ], + "lflst1":[ + "lflst1_1", + "lflst1_2" + ], + "lf1":"lf1" + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/simple-list.json b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/simple-list.json new file mode 100644 index 0000000000..fee6baab1a --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/simple-list.json @@ -0,0 +1,17 @@ +{ + "lst":[ + { + "cont1":{ + }, + "lst1": [ + { + } + ], + "lflst1":[ + "lflst1_1", + "lflst1_2" + ], + "lf1":"lf1" + } + ] +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level1.json b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level1.json new file mode 100644 index 0000000000..3ae3a72f4d --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level1.json @@ -0,0 +1,9 @@ +{ + + "lst":[ + { + }, + { + } + ] +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level2.json b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level2.json new file mode 100644 index 0000000000..f0f5540cbf --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level2.json @@ -0,0 +1,9 @@ +{ + + "cont": { + }, + "lst":[ + { + } + ] +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level3.json b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level3.json new file mode 100644 index 0000000000..7288969971 --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/test/resources/json-to-composite-node/wrong-top-level3.json @@ -0,0 +1,3 @@ +{ + "lf":"hello" +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/yang-to-json-conversion/simple-data-types/simple-data-types.yang b/opendaylight/md-sal/sal-rest-connector/src/test/resources/yang-to-json-conversion/simple-data-types/simple-data-types.yang index 4ad0983e04..010d3b1c2b 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/resources/yang-to-json-conversion/simple-data-types/simple-data-types.yang +++ b/opendaylight/md-sal/sal-rest-connector/src/test/resources/yang-to-json-conversion/simple-data-types/simple-data-types.yang @@ -46,6 +46,9 @@ module simple-data-types { leaf lfstr { type string; } + leaf lfstr1 { + type string; + } leaf lfbool1 { type boolean; } diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/yang-to-json-conversion/simple-data-types/xml/data.xml b/opendaylight/md-sal/sal-rest-connector/src/test/resources/yang-to-json-conversion/simple-data-types/xml/data.xml index 1e83cb4f69..df00ca917e 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/resources/yang-to-json-conversion/simple-data-types/xml/data.xml +++ b/opendaylight/md-sal/sal-rest-connector/src/test/resources/yang-to-json-conversion/simple-data-types/xml/data.xml @@ -11,6 +11,7 @@ 65535 4294967295 lfstr + true false bla -- 2.36.6