X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2Fjson%2Fto%2Fcnsn%2Ftest%2FJsonToCnSnTest.java;h=d65cb1bdbfe48bc02d132faab0e2cf82756cb785;hp=47e329cc3ef11a4cdfc8842c9a1285a445989517;hb=73e969cf365dd78772596c71e940ae44fe2f22d3;hpb=81bbe76bd26399118d028663d08e464ce6b7d040 diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/cnsn/test/JsonToCnSnTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/cnsn/test/JsonToCnSnTest.java index 47e329cc3e..d65cb1bdbf 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/cnsn/test/JsonToCnSnTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/json/to/cnsn/test/JsonToCnSnTest.java @@ -11,13 +11,13 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.HashSet; import java.util.List; import java.util.Set; - import org.junit.Ignore; import org.junit.Test; import org.opendaylight.controller.sal.rest.impl.JsonToCompositeNodeProvider; @@ -53,19 +53,21 @@ public class JsonToCnSnTest { */ @Test public void multipleItemsInLeafList() { - CompositeNode compositeNode = TestUtils.readInputToCnSn("/json-to-cnsn/multiple-leaflist-items.json", true, + Node node = TestUtils.readInputToCnSn("/json-to-cnsn/multiple-leaflist-items.json", true, JsonToCompositeNodeProvider.INSTANCE); - assertNotNull(compositeNode); + assertNotNull(node); + assertTrue(node instanceof CompositeNode); + CompositeNode compositeNode = (CompositeNode)node; assertEquals(3, compositeNode.getValue().size()); boolean lflst1_1 = false; boolean lflst1_2 = false; boolean lflst1_3 = false; - for (Node node : compositeNode.getValue()) { - assertEquals("lflst1", node.getNodeType().getLocalName()); - assertTrue(node instanceof SimpleNode); - SimpleNode simpleNode = (SimpleNode) node; + for (Node nd : compositeNode.getValue()) { + assertEquals("lflst1", nd.getNodeType().getLocalName()); + assertTrue(nd instanceof SimpleNode); + SimpleNode simpleNode = (SimpleNode) nd; if (simpleNode.getValue().equals("45")) { lflst1_1 = true; } else if (simpleNode.getValue().equals("55")) { @@ -82,14 +84,17 @@ public class JsonToCnSnTest { } /** - * List contains 4 items and in every item are other elements. It is - * supposed that there should be: lf11, lflst11, cont11, lst11 + * List contains 4 items and in every item are other elements. It is supposed that there should be: lf11, lflst11, + * cont11, lst11 */ @Test public void multipleItemsInListTest() { - CompositeNode compositeNode = TestUtils.readInputToCnSn("/json-to-cnsn/multiple-items-in-list.json", true, + Node node = TestUtils.readInputToCnSn("/json-to-cnsn/multiple-items-in-list.json", true, JsonToCompositeNodeProvider.INSTANCE); + assertTrue(node instanceof CompositeNode); + CompositeNode compositeNode = (CompositeNode)node; + assertNotNull(compositeNode); assertEquals("lst", compositeNode.getNodeType().getLocalName()); @@ -98,9 +103,10 @@ public class JsonToCnSnTest { @Test public void nullArrayToSimpleNodeWithNullValueTest() { - CompositeNode compositeNode = TestUtils.readInputToCnSn("/json-to-cnsn/array-with-null.json", true, + Node node = TestUtils.readInputToCnSn("/json-to-cnsn/array-with-null.json", true, JsonToCompositeNodeProvider.INSTANCE); - assertNotNull(compositeNode); + assertTrue(node instanceof CompositeNode); + CompositeNode compositeNode = (CompositeNode)node; assertEquals("cont", compositeNode.getNodeType().getLocalName()); assertNotNull(compositeNode.getValue()); @@ -116,14 +122,19 @@ public class JsonToCnSnTest { public void incorrectTopLevelElementsTest() { RestconfDocumentedException cause1 = null; try { - TestUtils.readInputToCnSn("/json-to-cnsn/wrong-top-level1.json", true, JsonToCompositeNodeProvider.INSTANCE); + TestUtils + .readInputToCnSn("/json-to-cnsn/wrong-top-level1.json", true, JsonToCompositeNodeProvider.INSTANCE); } catch (RestconfDocumentedException e) { cause1 = e; } assertNotNull(cause1); - assertTrue(cause1.getErrors().get( 0 ).getErrorMessage().contains( - "First element in Json Object has to be \"Object\" or \"Array with one Object element\". Other scenarios are not supported yet.")); + assertTrue(cause1 + .getErrors() + .get(0) + .getErrorMessage() + .contains( + "First element in Json Object has to be \"Object\" or \"Array with one Object element\". Other scenarios are not supported yet.")); RestconfDocumentedException cause2 = null; try { @@ -133,33 +144,36 @@ public class JsonToCnSnTest { cause2 = e; } assertNotNull(cause2); - assertTrue(cause2.getErrors().get( 0 ).getErrorMessage().contains( - "Json Object should contain one element")); + assertTrue(cause2.getErrors().get(0).getErrorMessage().contains("Json Object should contain one element")); RestconfDocumentedException cause3 = null; try { TestUtils - .readInputToCnSn("/json-to-cnsn/wrong-top-level3.json", true, JsonToCompositeNodeProvider.INSTANCE); + .readInputToCnSn("/json-to-cnsn/wrong-top-level3.json", true, JsonToCompositeNodeProvider.INSTANCE); } catch (RestconfDocumentedException e) { cause3 = e; } assertNotNull(cause3); - assertTrue(cause3.getErrors().get( 0 ).getErrorMessage().contains( - "First element in Json Object has to be \"Object\" or \"Array with one Object element\". Other scenarios are not supported yet.")); + assertTrue(cause3 + .getErrors() + .get(0) + .getErrorMessage() + .contains( + "First element in Json Object has to be \"Object\" or \"Array with one Object element\". Other scenarios are not supported yet.")); } /** - * if leaf list with no data is in json then no corresponding data is - * created in composite node. if leaf with no data then exception is raised + * if leaf list with no data is in json then no corresponding data is created in composite node. if leaf with no + * data then exception is raised */ @Test public void emptyDataReadTest() { - CompositeNode compositeNode = TestUtils.readInputToCnSn("/json-to-cnsn/empty-data.json", true, + Node node = TestUtils.readInputToCnSn("/json-to-cnsn/empty-data.json", true, JsonToCompositeNodeProvider.INSTANCE); - - assertNotNull(compositeNode); + assertTrue(node instanceof CompositeNode); + CompositeNode compositeNode = (CompositeNode)node; assertEquals("cont", compositeNode.getNodeType().getLocalName()); assertTrue(compositeNode instanceof CompositeNode); @@ -172,7 +186,7 @@ public class JsonToCnSnTest { try { TestUtils.readInputToCnSn("/json-to-cnsn/empty-data1.json", true, JsonToCompositeNodeProvider.INSTANCE); } catch (RestconfDocumentedException e) { - reason = e.getErrors().get( 0 ).getErrorMessage(); + reason = e.getErrors().get(0).getErrorMessage(); } assertTrue(reason.contains("Expected value at line")); @@ -180,25 +194,25 @@ public class JsonToCnSnTest { } @Test - public void testJsonBlankInput() throws Exception{ - InputStream inputStream = new ByteArrayInputStream( "".getBytes() ); - CompositeNode compositeNode = + public void testJsonBlankInput() throws Exception { + InputStream inputStream = new ByteArrayInputStream("".getBytes()); + Node node = JsonToCompositeNodeProvider.INSTANCE.readFrom(null, null, null, null, null, inputStream); - assertNull( compositeNode ); + assertNull( node ); } /** - * Tests whether namespace stay unchanged if concrete values are - * present in composite or simple node and if the method for update is - * called. + * Tests whether namespace stay unchanged if concrete values are present in composite or simple node and if + * the method for update is called. * */ @Test public void notSupplyNamespaceIfAlreadySupplied() { - CompositeNode compositeNode = TestUtils.readInputToCnSn("/json-to-cnsn/simple-list.json", false, + Node node = TestUtils.readInputToCnSn("/json-to-cnsn/simple-list.json", false, JsonToCompositeNodeProvider.INSTANCE); - assertNotNull(compositeNode); + assertTrue(node instanceof CompositeNode); + CompositeNode compositeNode = (CompositeNode)node; // supplement namespaces according to first data schema - // "simple:data:types1" @@ -217,15 +231,21 @@ public class JsonToCnSnTest { assertEquals("lst", compNode.getNodeType().getLocalName()); verifyCompositeNode(compNode, "simple:list:yang1"); - TestUtils.normalizeCompositeNode(compositeNode, modules2, "simple-list-yang2:lst"); + try { + TestUtils.normalizeCompositeNode(compositeNode, modules2, "simple-list-yang2:lst"); + fail("Conversion to normalized node shouldn't be successfull because of different namespaces"); + } catch (IllegalStateException e) { + } +// veryfing has still meaning. despite exception, first phase where normalization of NodeWrappers is called passed successfuly. verifyCompositeNode(compNode, "simple:list:yang1"); } @Test public void jsonIdentityrefToCompositeNode() { - CompositeNode compositeNode = TestUtils.readInputToCnSn("/json-to-cnsn/identityref/json/data.json", false, + Node node = TestUtils.readInputToCnSn("/json-to-cnsn/identityref/json/data.json", false, JsonToCompositeNodeProvider.INSTANCE); - assertNotNull(compositeNode); + assertTrue(node instanceof CompositeNode); + CompositeNode compositeNode = (CompositeNode)node; Set modules = TestUtils.loadModulesFrom("/json-to-cnsn/identityref"); assertEquals(2, modules.size()); @@ -284,15 +304,17 @@ public class JsonToCnSnTest { } - private void simpleTest(final String jsonPath, final String yangPath, final String topLevelElementName, final String namespace, - final String moduleName) { + private void simpleTest(final String jsonPath, final String yangPath, final String topLevelElementName, + final String namespace, final String moduleName) { CompositeNode compNode = loadAndNormalizeData(jsonPath, yangPath, topLevelElementName, moduleName); verifyCompositeNode(compNode, namespace); } - private CompositeNode loadAndNormalizeData(final String jsonPath, final String yangPath, final String topLevelElementName, final String moduleName) { - CompositeNode compositeNode = TestUtils.readInputToCnSn(jsonPath, false, JsonToCompositeNodeProvider.INSTANCE); - assertNotNull(compositeNode); + private CompositeNode loadAndNormalizeData(final String jsonPath, final String yangPath, + final String topLevelElementName, final String moduleName) { + Node node = TestUtils.readInputToCnSn(jsonPath, false, JsonToCompositeNodeProvider.INSTANCE); + assertTrue(node instanceof CompositeNode); + CompositeNode compositeNode = (CompositeNode)node; Set modules = null; modules = TestUtils.loadModulesFrom(yangPath); @@ -395,9 +417,41 @@ public class JsonToCnSnTest { TestUtils.readInputToCnSn("/json-to-cnsn/unsupported-json-format.json", true, JsonToCompositeNodeProvider.INSTANCE); } catch (RestconfDocumentedException e) { - exceptionMessage = e.getErrors().get( 0 ).getErrorMessage(); + exceptionMessage = e.getErrors().get(0).getErrorMessage(); } assertTrue(exceptionMessage.contains("Root element of Json has to be Object")); } + /** + * Tests case when JSON input data value is in format string1:string2 and first string contain characters "<" or ">" (invalid URI characters). + * + * During loading data it is also interpreting as data value in moduleName:localName (potential leafref value). + * ModuleName part is transformed to URI which causes exception which is caught and URI value is null which cause that potential value in simple node is + * simple string (value from JSON input) and not IdentityValueDTO instance which is used for leaf-ref candidates. + */ + @Test + public void invalidUriCharacterInValue() { + final Node rootNode = TestUtils.readInputToCnSn("/json-to-cnsn/invalid-uri-character-in-value.json", true, + JsonToCompositeNodeProvider.INSTANCE); + + assertTrue(rootNode instanceof CompositeNode); + Node lf1 = null; + Node lf2 = null; + for(Node child : ((CompositeNode)rootNode).getChildren()) { + if (child.getNodeType().getLocalName().equals("lf1")) { + lf1 = child; + } else if (child.getNodeType().getLocalName().equals("lf2")) { + lf2 = child; + } + } + + assertNotNull(lf1); + assertNotNull(lf2); + assertTrue(lf1 instanceof SimpleNode); + assertTrue(lf2 instanceof SimpleNode); + + assertEquals("module) lf1).getValue()); + assertEquals("module>Name:value lf2", ((SimpleNode) lf2).getValue()); + } + }