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%2Ftest%2FCnSnToXmlAndJsonInstanceIdentifierTest.java;h=07d781028b99feaa03cd8dc610f499f63a0ca1dc;hp=80cfb1702654eee9c1a227f5364e2c5179ef7551;hb=c6ab5fdef3d0cc6fac96cb960839168ed7906b3a;hpb=5047025853d5c5cc950c9cd5c53f50fb7fae8f4d diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CnSnToXmlAndJsonInstanceIdentifierTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CnSnToXmlAndJsonInstanceIdentifierTest.java index 80cfb17026..07d781028b 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CnSnToXmlAndJsonInstanceIdentifierTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CnSnToXmlAndJsonInstanceIdentifierTest.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ package org.opendaylight.controller.sal.restconf.impl.test; import static org.junit.Assert.assertNotNull; @@ -21,46 +28,90 @@ import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import org.opendaylight.controller.sal.rest.impl.StructuredDataToJsonProvider; import org.opendaylight.controller.sal.rest.impl.StructuredDataToXmlProvider; -import org.opendaylight.controller.sal.restconf.impl.CompositeNodeWrapper; -import org.opendaylight.controller.sal.restconf.impl.SimpleNodeWrapper; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.CompositeNode; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode; +import org.opendaylight.yangtools.yang.data.api.MutableSimpleNode; +import org.opendaylight.yangtools.yang.data.impl.NodeFactory; public class CnSnToXmlAndJsonInstanceIdentifierTest extends YangAndXmlAndDataSchemaLoader { @BeforeClass public static void initialize() { - dataLoad("/instanceidentifier/yang", 3, "instance-identifier-module", "cont"); + dataLoad("/instanceidentifier/yang", 4, "instance-identifier-module", "cont"); } @Test - public void saveCnSnToXml() throws WebApplicationException, IOException, URISyntaxException, XMLStreamException { - CompositeNode cnSn = prepareCnSn(); + public void saveCnSnToXmlTest() throws WebApplicationException, IOException, URISyntaxException, XMLStreamException { + CompositeNode cnSn = prepareCnSn(createInstanceIdentifier()); String output = TestUtils.writeCompNodeWithSchemaContextToOutput(cnSn, modules, dataSchemaNode, StructuredDataToXmlProvider.INSTANCE); + //uncomment for debug + // System.out.println(output); validateXmlOutput(output); + + } + + @Ignore + @Test + public void saveCnSnWithLeafListInstIdentifierToXmlTest() throws WebApplicationException, IOException, + URISyntaxException, XMLStreamException { + CompositeNode cnSn = prepareCnSn(createInstanceIdentifierWithLeafList()); + String output = TestUtils.writeCompNodeWithSchemaContextToOutput(cnSn, modules, dataSchemaNode, + StructuredDataToXmlProvider.INSTANCE); + //uncomment for debug // System.out.println(output); + validateXmlOutputWithLeafList(output); + } + @Test + public void saveCnSnToJsonTest() throws WebApplicationException, IOException, URISyntaxException { + CompositeNode cnSn = prepareCnSn(createInstanceIdentifier()); + String output = TestUtils.writeCompNodeWithSchemaContextToOutput(cnSn, modules, dataSchemaNode, + StructuredDataToJsonProvider.INSTANCE); + boolean strInOutput = false; + strInOutput = output + .contains("\"augment-augment-module:lf111\": \"/instance-identifier-module:cont/instance-identifier-module:cont1/augment-module:lst11[augment-module:keyvalue111=\\\"value1\\\"][augment-module:keyvalue112=\\\"value2\\\"]/augment-augment-module:lf112\""); + + if (!strInOutput) { + strInOutput = output + .contains("\"augment-augment-module:lf111\": \"/instance-identifier-module:cont/instance-identifier-module:cont1/augment-module:lst11[augment-module:keyvalue111='value1'][augment-module:keyvalue112='value2']/augment-augment-module:lf112\""); + } + //uncomment for debug + // System.out.println(output); + assertTrue(strInOutput); } + @Test - public void saveCnSnToJson() throws WebApplicationException, IOException, URISyntaxException { - CompositeNode cnSn = prepareCnSn(); + public void saveCnSnWithLeafListInstIdentifierToJsonTest() throws WebApplicationException, IOException, + URISyntaxException { + CompositeNode cnSn = prepareCnSn(createInstanceIdentifierWithLeafList()); String output = TestUtils.writeCompNodeWithSchemaContextToOutput(cnSn, modules, dataSchemaNode, StructuredDataToJsonProvider.INSTANCE); - assertTrue(output - .contains("\"augment-augment-module:lf111\": \"/instance-identifier-module:cont/instance-identifier-module:cont1/augment-module:lst11[augment-module:keyvalue111=\\\"value1\\\"][augment-module:keyvalue112=\\\"value2\\\"]/augment-augment-module:lf112\"")); + //uncomment for debug // System.out.println(output); + boolean strInOutput = false; + strInOutput = output + .contains("\"augment-augment-module:lf111\": \"/instance-identifier-module:cont/instance-identifier-module:cont1/augment-module-leaf-list:lflst11[.='lflst11_1']\""); + if (!strInOutput) { + strInOutput = output + .contains("\"augment-augment-module:lf111\": \"/instance-identifier-module:cont/instance-identifier-module:cont1/augment-module-leaf-list:lflst11[.=\\\"lflst11_1\\\"]\""); + } + + assertTrue(strInOutput); } - private void validateXmlOutput(String xml) throws XMLStreamException { + private void validateXmlOutput(final String xml) throws XMLStreamException { XMLInputFactory xmlInFactory = XMLInputFactory.newInstance(); XMLEventReader eventReader; @@ -73,7 +124,7 @@ public class CnSnToXmlAndJsonInstanceIdentifierTest extends YangAndXmlAndDataSch if (nextEvent.isStartElement()) { StartElement startElement = (StartElement) nextEvent; if (startElement.getName().getLocalPart().equals("lf111")) { - Iterator prefixes = startElement.getNamespaceContext().getPrefixes("augment:augment:module"); + Iterator prefixes = startElement.getNamespaceContext().getPrefixes("augment:augment:module"); while (prefixes.hasNext() && aaModulePrefix == null) { String prefix = (String) prefixes.next(); @@ -97,21 +148,66 @@ public class CnSnToXmlAndJsonInstanceIdentifierTest extends YangAndXmlAndDataSch + ":lst11[" + aModulePrefix + ":keyvalue111='value1'][" + aModulePrefix + ":keyvalue112='value2']/" + aaModulePrefix + ":lf112"; -// System.out.println(xml); assertTrue(xml.contains(instanceIdentifierValue)); } - private CompositeNode prepareCnSn() throws URISyntaxException { - CompositeNodeWrapper cont = new CompositeNodeWrapper(new URI("instance:identifier:module"), "cont"); - CompositeNodeWrapper cont1 = new CompositeNodeWrapper(new URI("instance:identifier:module"), "cont1"); - CompositeNodeWrapper lst11 = new CompositeNodeWrapper(new URI("augment:module"), "lst11"); - InstanceIdentifier instanceIdentifier = createInstanceIdentifier(); - SimpleNodeWrapper lf111 = new SimpleNodeWrapper(new URI("augment:augment:module"), "lf111", instanceIdentifier); + private void validateXmlOutputWithLeafList(final String xml) throws XMLStreamException { + XMLInputFactory xmlInFactory = XMLInputFactory.newInstance(); + XMLEventReader eventReader; + + eventReader = xmlInFactory.createXMLEventReader(new ByteArrayInputStream(xml.getBytes())); + String aModuleLfLstPrefix = null; + String iiModulePrefix = null; + while (eventReader.hasNext()) { + XMLEvent nextEvent = eventReader.nextEvent(); + if (nextEvent.isStartElement()) { + StartElement startElement = (StartElement) nextEvent; + if (startElement.getName().getLocalPart().equals("lf111")) { + Iterator prefixes = startElement.getNamespaceContext().getPrefixes("augment:module:leaf:list"); + + while (prefixes.hasNext() && aModuleLfLstPrefix == null) { + String prefix = (String) prefixes.next(); + if (!prefix.isEmpty()) { + aModuleLfLstPrefix = prefix; + } + } + iiModulePrefix = startElement.getNamespaceContext().getPrefix("instance:identifier:module"); + break; + } + } + } + + assertNotNull(aModuleLfLstPrefix); + assertNotNull(iiModulePrefix); + + String instanceIdentifierValue = "/" + iiModulePrefix + ":cont/" + iiModulePrefix + ":cont1/" + + aModuleLfLstPrefix + ":lflst11[.='lflst11_1']"; + + assertTrue(xml.contains(instanceIdentifierValue)); + + } + + private CompositeNode prepareCnSn(final InstanceIdentifier instanceIdentifier) throws URISyntaxException { + MutableCompositeNode cont = NodeFactory.createMutableCompositeNode( + TestUtils.buildQName("cont", "instance:identifier:module", "2014-01-17"), null, null,null,null); + MutableCompositeNode cont1 = NodeFactory.createMutableCompositeNode( + TestUtils.buildQName("cont1", "instance:identifier:module", "2014-01-17"), cont, null,null,null); + MutableCompositeNode lst11 = NodeFactory.createMutableCompositeNode( + TestUtils.buildQName("lst11", "augment:module", "2014-01-17"), cont1, null,null,null); + + MutableSimpleNode lf111 = NodeFactory.createMutableSimpleNode(TestUtils.buildQName("lf111", "augment:augment:module", "2014-01-17"), + lst11, instanceIdentifier,null,null); + + + lst11.getValue().add(lf111); + lst11.init(); + + cont1.getValue().add(lst11); + cont1.init(); - lst11.addValue(lf111); - cont1.addValue(lst11); - cont.addValue(cont1); + cont.getValue().add(cont1); + cont.init(); return cont; } @@ -133,4 +229,13 @@ public class CnSnToXmlAndJsonInstanceIdentifierTest extends YangAndXmlAndDataSch return new InstanceIdentifier(pathArguments); } + private InstanceIdentifier createInstanceIdentifierWithLeafList() throws URISyntaxException { + List pathArguments = new ArrayList<>(); + pathArguments.add(new NodeIdentifier(new QName(new URI("instance:identifier:module"), "cont"))); + pathArguments.add(new NodeIdentifier(new QName(new URI("instance:identifier:module"), "cont1"))); + pathArguments.add(new NodeWithValue(new QName(new URI("augment:module:leaf:list"), "lflst11"), "lflst11_1")); + + return new InstanceIdentifier(pathArguments); + } + }