X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2Fnn%2Fto%2Fxml%2Ftest%2FNnToXmlWithDataFromSeveralModulesTest.java;fp=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2Fnn%2Fto%2Fxml%2Ftest%2FNnToXmlWithDataFromSeveralModulesTest.java;h=05d3a55bb9e7d62f1ef6abc6f337017c7ccc7fa3;hb=08cfdb406e1aa0078906bd4a25b717b1a4bc2953;hp=0000000000000000000000000000000000000000;hpb=59e32540ae454d8428c25ba9594c5e18f16c81d7;p=controller.git diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithDataFromSeveralModulesTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithDataFromSeveralModulesTest.java new file mode 100644 index 0000000000..05d3a55bb9 --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/nn/to/xml/test/NnToXmlWithDataFromSeveralModulesTest.java @@ -0,0 +1,155 @@ +/* + * 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.nn.to.xml.test; + +import static org.junit.Assert.assertTrue; +import com.google.common.base.Preconditions; +import com.google.common.collect.Iterables; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.URISyntaxException; +import java.util.List; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; +import org.junit.BeforeClass; +import org.junit.Test; +import org.opendaylight.controller.sal.rest.impl.NormalizedNodeXmlBodyWriter; +import org.opendaylight.controller.sal.rest.impl.test.providers.AbstractBodyReaderTest; +import org.opendaylight.controller.sal.restconf.impl.ControllerContext; +import org.opendaylight.controller.sal.restconf.impl.InstanceIdentifierContext; +import org.opendaylight.controller.sal.restconf.impl.NormalizedNodeContext; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; +import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; + +public class NnToXmlWithDataFromSeveralModulesTest extends + AbstractBodyReaderTest { + + private final NormalizedNodeXmlBodyWriter xmlBodyWriter; + private static SchemaContext schemaContext; + + public NnToXmlWithDataFromSeveralModulesTest() throws NoSuchFieldException, + SecurityException { + super(); + xmlBodyWriter = new NormalizedNodeXmlBodyWriter(); + } + + @BeforeClass + public static void initialize() { + schemaContext = schemaContextLoader( + "/nn-to-xml/data-of-several-modules/yang", schemaContext); + controllerContext.setSchemas(schemaContext); + } + + @Test + public void dataFromSeveralModulesToXmlTest() + throws WebApplicationException, IOException, URISyntaxException { + final NormalizedNodeContext normalizedNodeContext = prepareNormalizedNodeContext(); + final OutputStream output = new ByteArrayOutputStream(); + xmlBodyWriter.writeTo(normalizedNodeContext, null, null, null, + mediaType, null, output); + + final String outputString = output.toString(); + // data + assertTrue(outputString + .contains( + "')); + // cont m2 + assertTrue(outputString.contains( + "')); + assertTrue(outputString.contains("lf1 m2 value")); + assertTrue(outputString.contains("")); + assertTrue(outputString.contains("")); + + // cont m1 + assertTrue(outputString.contains( + "')); + assertTrue(outputString.contains("")); + assertTrue(outputString.contains("lf1 m1 value")); + assertTrue(outputString.contains("")); + + // end + assertTrue(output.toString().contains("")); + } + + @Override + protected MediaType getMediaType() { + // TODO Auto-generated method stub + return null; + } + + private NormalizedNodeContext prepareNormalizedNodeContext() { + final String rev = "2014-01-17"; + + final DataSchemaNode schemaContNode = schemaContext; + + assertTrue(schemaContNode instanceof ContainerSchemaNode); + + final DataContainerNodeAttrBuilder dataContSchemaContNode = Builders + .containerBuilder((ContainerSchemaNode) schemaContNode); + + final DataContainerNodeAttrBuilder modul1 = buildContBuilderMod1( + "module:one", rev, "cont_m1", "contB_m1", "lf1_m1", + "lf1 m1 value"); + dataContSchemaContNode.withChild(modul1.build()); + + final DataContainerNodeAttrBuilder modul2 = buildContBuilderMod1( + "module:two", rev, "cont_m2", "contB_m2", "lf1_m2", + "lf1 m2 value"); + dataContSchemaContNode.withChild(modul2.build()); + + final NormalizedNodeContext testNormalizedNodeContext = new NormalizedNodeContext( + new InstanceIdentifierContext(null, + schemaContNode, null, schemaContext), + dataContSchemaContNode.build()); + + return testNormalizedNodeContext; + } + + private DataContainerNodeAttrBuilder buildContBuilderMod1( + final String uri, final String rev, final String cont, final String contB, final String lf1, + final String lf1_value) { + final QName contQname = QName.create(uri, rev, cont); + final QName contBQname = QName.create(uri, rev, contB); + final QName lf1Qname = QName.create(contQname, lf1); + + final DataSchemaNode contSchemaNode = schemaContext + .getDataChildByName(contQname); + final DataContainerNodeAttrBuilder dataContainerNodeAttrBuilder = Builders + .containerBuilder((ContainerSchemaNode) contSchemaNode); + + Preconditions.checkState(contSchemaNode instanceof ContainerSchemaNode); + final List instanceLf1_m1 = ControllerContext + .findInstanceDataChildrenByName( + (DataNodeContainer) contSchemaNode, + lf1Qname.getLocalName()); + final DataSchemaNode schemaLf1_m1 = Iterables.getFirst(instanceLf1_m1, null); + + dataContainerNodeAttrBuilder.withChild(Builders + .leafBuilder((LeafSchemaNode) schemaLf1_m1) + .withValue(lf1_value).build()); + + final DataSchemaNode contBSchemaNode = ((ContainerSchemaNode) contSchemaNode) + .getDataChildByName(contBQname); + + final DataContainerNodeAttrBuilder dataContainerB = Builders + .containerBuilder((ContainerSchemaNode) contBSchemaNode); + + return dataContainerNodeAttrBuilder.withChild(dataContainerB.build()); + } +}