2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.sal.restconf.impl.nn.to.xml.test;
10 import static org.junit.Assert.assertTrue;
12 import com.google.common.base.Preconditions;
13 import java.io.ByteArrayOutputStream;
14 import java.io.IOException;
15 import java.io.OutputStream;
16 import java.net.URISyntaxException;
17 import javax.ws.rs.WebApplicationException;
18 import javax.ws.rs.core.MediaType;
19 import org.junit.BeforeClass;
20 import org.junit.Test;
21 import org.opendaylight.controller.sal.rest.impl.test.providers.AbstractBodyReaderTest;
22 import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeContext;
23 import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeXmlBodyWriter;
24 import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
25 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
26 import org.opendaylight.yangtools.yang.common.QName;
27 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
28 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
29 import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder;
30 import org.opendaylight.yangtools.yang.data.impl.schema.SchemaAwareBuilders;
31 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
32 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
33 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
34 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
35 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
37 public class NnToXmlWithDataFromSeveralModulesTest extends
38 AbstractBodyReaderTest {
40 private final NormalizedNodeXmlBodyWriter xmlBodyWriter;
41 private static EffectiveModelContext schemaContext;
43 public NnToXmlWithDataFromSeveralModulesTest() {
44 super(schemaContext, null);
45 xmlBodyWriter = new NormalizedNodeXmlBodyWriter();
49 public static void initialize() {
50 schemaContext = schemaContextLoader("/nn-to-xml/data-of-several-modules/yang", schemaContext);
54 public void dataFromSeveralModulesToXmlTest()
55 throws WebApplicationException, IOException, URISyntaxException {
56 final NormalizedNodeContext normalizedNodeContext = prepareNormalizedNodeContext();
57 final OutputStream output = new ByteArrayOutputStream();
58 xmlBodyWriter.writeTo(normalizedNodeContext, null, null, null,
59 mediaType, null, output);
61 final String outputString = output.toString();
63 assertTrue(outputString
66 + "urn:ietf:params:xml:ns:netconf:base:1.0"
69 assertTrue(outputString.contains(
70 "<cont_m2 xmlns=" + '"' + "module:two" + '"' + '>'));
71 assertTrue(outputString.contains("<lf1_m2>lf1 m2 value</lf1_m2>"));
72 assertTrue(outputString.contains("<contB_m2/>"));
73 assertTrue(outputString.contains("</cont_m2>"));
76 assertTrue(outputString.contains(
77 "<cont_m1 xmlns=" + '"' + "module:one" + '"' + '>'));
78 assertTrue(outputString.contains("<contB_m1/>"));
79 assertTrue(outputString.contains("<lf1_m1>lf1 m1 value</lf1_m1>"));
80 assertTrue(outputString.contains("</cont_m1>"));
83 assertTrue(output.toString().contains("</data>"));
87 protected MediaType getMediaType() {
88 // TODO Auto-generated method stub
92 private static NormalizedNodeContext prepareNormalizedNodeContext() {
93 final String rev = "2014-01-17";
95 final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> dataContSchemaContNode = SchemaAwareBuilders
96 .containerBuilder(schemaContext);
98 final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> modul1 = buildContBuilderMod1(
99 "module:one", rev, "cont_m1", "contB_m1", "lf1_m1",
101 dataContSchemaContNode.withChild(modul1.build());
103 final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> modul2 = buildContBuilderMod1(
104 "module:two", rev, "cont_m2", "contB_m2", "lf1_m2",
106 dataContSchemaContNode.withChild(modul2.build());
108 final NormalizedNodeContext testNormalizedNodeContext = new NormalizedNodeContext(
109 InstanceIdentifierContext.ofLocalRoot(schemaContext),
110 dataContSchemaContNode.build());
112 return testNormalizedNodeContext;
115 private static DataContainerNodeBuilder<NodeIdentifier, ContainerNode> buildContBuilderMod1(
116 final String uri, final String rev, final String cont, final String contB, final String lf1,
117 final String lf1Value) {
118 final QName contQname = QName.create(uri, rev, cont);
119 final QName contBQname = QName.create(uri, rev, contB);
120 final QName lf1Qname = QName.create(contQname, lf1);
122 final DataSchemaNode contSchemaNode = schemaContext
123 .getDataChildByName(contQname);
124 final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> dataContainerNodeAttrBuilder = SchemaAwareBuilders
125 .containerBuilder((ContainerSchemaNode) contSchemaNode);
127 Preconditions.checkState(contSchemaNode instanceof ContainerSchemaNode);
128 final var instanceLf1_m1 = ControllerContext.findInstanceDataChildrenByName(
129 (DataNodeContainer) contSchemaNode, lf1Qname.getLocalName());
130 final DataSchemaNode schemaLf1_m1 = instanceLf1_m1.get(0).child;
132 dataContainerNodeAttrBuilder.withChild(SchemaAwareBuilders
133 .leafBuilder((LeafSchemaNode) schemaLf1_m1)
134 .withValue(lf1Value).build());
136 final DataSchemaNode contBSchemaNode = ((ContainerSchemaNode) contSchemaNode)
137 .getDataChildByName(contBQname);
139 final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> dataContainerB = SchemaAwareBuilders
140 .containerBuilder((ContainerSchemaNode) contBSchemaNode);
142 return dataContainerNodeAttrBuilder.withChild(dataContainerB.build());