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.cnsn.to.xml.test;
10 import static org.junit.Assert.assertNotNull;
11 import static org.junit.Assert.assertTrue;
13 import java.io.IOException;
15 import javax.ws.rs.WebApplicationException;
16 import javax.xml.transform.TransformerFactoryConfigurationError;
18 import org.junit.BeforeClass;
19 import org.junit.Test;
20 import org.opendaylight.controller.sal.rest.impl.StructuredDataToXmlProvider;
21 import org.opendaylight.controller.sal.restconf.impl.test.TestUtils;
22 import org.opendaylight.controller.sal.restconf.impl.test.YangAndXmlAndDataSchemaLoader;
23 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
24 import org.opendaylight.yangtools.yang.data.api.ModifyAction;
25 import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode;
26 import org.opendaylight.yangtools.yang.data.api.MutableSimpleNode;
27 import org.opendaylight.yangtools.yang.data.impl.NodeFactory;
28 import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec;
32 * CnSn = Composite node and Simple node data structure Class contains test of
33 * serializing simple nodes data values according data types from YANG schema to
37 public class CnSnToXmlTest extends YangAndXmlAndDataSchemaLoader {
39 public static void initialization() {
40 dataLoad("/cnsn-to-xml/yang", 2, "basic-module", "cont");
44 public void snAsYangIdentityrefToXMLTest() {
45 serializeToXml(prepareIdentityrefData(null, true), "<lf11 xmlns:x=\"referenced:module\">x:iden</lf11>");
49 public void snAsYangIdentityrefWithQNamePrefixToXMLTest() {
50 serializeToXml(prepareIdentityrefData("prefix", true),
51 "<lf11 xmlns:prefix=\"referenced:module\">prefix:iden</lf11>");
55 public void snAsYangIdentityrefWithPrefixToXMLTest() {
56 serializeToXml(prepareIdentityrefData("prefix", false), "<lf11>no qname value</lf11>");
60 public void snAsYangLeafrefWithPrefixToXMLTest() {
61 serializeToXml(prepareLeafrefData(), "<lfBoolean>true</lfBoolean>", "<lfLfref>true</lfLfref>");
66 public void snAsYangStringToXmlTest() {
68 prepareCnStructForYangData(TypeDefinitionAwareCodec.STRING_DEFAULT_CODEC.deserialize("lfStr value"),
69 "lfStr"), "<lfStr>lfStr value</lfStr>");
73 public void snAsYangInt8ToXmlTest() {
74 String elName = "lfInt8";
76 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT8_DEFAULT_CODEC.deserialize("14"), elName), "<"
77 + elName + ">14</" + elName + ">");
81 public void snAsYangInt16ToXmlTest() {
82 String elName = "lfInt16";
84 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT16_DEFAULT_CODEC.deserialize("3000"), elName),
85 "<" + elName + ">3000</" + elName + ">");
89 public void snAsYangInt32ToXmlTest() {
90 String elName = "lfInt32";
92 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT32_DEFAULT_CODEC.deserialize("201234"), elName),
93 "<" + elName + ">201234</" + elName + ">");
97 public void snAsYangInt64ToXmlTest() {
98 String elName = "lfInt64";
100 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT64_DEFAULT_CODEC.deserialize("5123456789"),
101 elName), "<" + elName + ">5123456789</" + elName + ">");
105 public void snAsYangUint8ToXmlTest() {
106 String elName = "lfUint8";
108 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT8_DEFAULT_CODEC.deserialize("200"), elName),
109 "<" + elName + ">200</" + elName + ">");
113 public void snAsYangUint16ToXmlTest() {
114 String elName = "lfUint16";
116 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT16_DEFAULT_CODEC.deserialize("4000"), elName),
117 "<" + elName + ">4000</" + elName + ">");
121 public void snAsYangUint32ToXmlTest() {
122 String elName = "lfUint32";
124 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT32_DEFAULT_CODEC.deserialize("4123456789"),
125 elName), "<" + elName + ">4123456789</" + elName + ">");
129 public void snAsYangUint64ToXmlTest() {
130 String elName = "lfUint64";
132 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT64_DEFAULT_CODEC.deserialize("5123456789"),
133 elName), "<" + elName + ">5123456789</" + elName + ">");
137 public void snAsYangBinaryToXmlTest() {
138 String elName = "lfBinary";
140 prepareCnStructForYangData(
141 TypeDefinitionAwareCodec.BINARY_DEFAULT_CODEC
142 .deserialize("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567"),
143 elName), "<" + elName + ">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567</"
148 public void snAsYangBitsToXmlTest() {
149 String elName = "lfBits";
151 prepareCnStructForYangData(TypeDefinitionAwareCodec.BITS_DEFAULT_CODEC.deserialize("one two"), elName),
152 "<" + elName + ">one two</" + elName + ">", "<" + elName + ">two one</" + elName + ">");
156 public void snAsYangEnumerationToXmlTest() {
157 String elName = "lfEnumeration";
159 prepareCnStructForYangData(TypeDefinitionAwareCodec.ENUMERATION_DEFAULT_CODEC.deserialize("enum2"),
160 elName), "<" + elName + ">enum2</" + elName + ">");
164 public void snAsYangEmptyToXmlTest() {
165 String elName = "lfEmpty";
167 prepareCnStructForYangData(TypeDefinitionAwareCodec.EMPTY_DEFAULT_CODEC.deserialize(null), elName), "<"
172 public void snAsYangBooleanToXmlTest() {
173 String elName = "lfBoolean";
175 prepareCnStructForYangData(TypeDefinitionAwareCodec.BOOLEAN_DEFAULT_CODEC.deserialize("str"), elName),
176 "<" + elName + ">false</" + elName + ">");
178 prepareCnStructForYangData(TypeDefinitionAwareCodec.BOOLEAN_DEFAULT_CODEC.deserialize("true"), elName),
179 "<" + elName + ">true</" + elName + ">");
183 public void snAsYangUnionToXmlTest() {
184 String elName = "lfUnion";
187 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(int8), elName), "<"
188 + elName + ">15</" + elName + ">");
190 String bits = "first second";
192 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(bits), elName), "<"
193 + elName + ">first second</" + elName + ">");
197 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(bool), elName), "<"
198 + elName + ">str</" + elName + ">");
201 private void serializeToXml(final CompositeNode compositeNode, final String... xmlRepresentation)
202 throws TransformerFactoryConfigurationError {
203 String xmlString = "";
205 xmlString = TestUtils.writeCompNodeWithSchemaContextToOutput(compositeNode, modules, dataSchemaNode,
206 StructuredDataToXmlProvider.INSTANCE);
207 } catch (WebApplicationException | IOException e) {
209 assertNotNull(xmlString);
210 boolean containSearchedStr = false;
211 String strRepresentation = "";
212 for (String searchedStr : xmlRepresentation) {
213 if (xmlString.contains(searchedStr)) {
214 containSearchedStr = true;
217 strRepresentation = strRepresentation + "[" + searchedStr + "]";
219 assertTrue("At least one of specified strings " + strRepresentation + " wasn't found.", containSearchedStr);
223 private CompositeNode prepareIdentityrefData(final String prefix, final boolean valueAsQName) {
224 MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(
225 TestUtils.buildQName("cont", "basic:module", "2013-12-2"), null, null, ModifyAction.CREATE, null);
226 MutableCompositeNode cont1 = NodeFactory.createMutableCompositeNode(
227 TestUtils.buildQName("cont1", "basic:module", "2013-12-2"), cont, null, ModifyAction.CREATE, null);
228 cont.getValue().add(cont1);
232 value = TestUtils.buildQName("iden", "referenced:module", "2013-12-2", prefix);
234 value = "no qname value";
236 MutableSimpleNode<Object> lf11 = NodeFactory.createMutableSimpleNode(
237 TestUtils.buildQName("lf11", "basic:module", "2013-12-2"), cont1, value, ModifyAction.CREATE, null);
238 cont1.getValue().add(lf11);
245 private CompositeNode prepareCnStructForYangData(final Object data, final String leafName) {
246 MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(TestUtils.buildQName("cont"), null, null,
247 ModifyAction.CREATE, null);
249 MutableSimpleNode<Object> lf1 = NodeFactory.createMutableSimpleNode(TestUtils.buildQName(leafName), cont, data,
250 ModifyAction.CREATE, null);
251 cont.getValue().add(lf1);
257 private CompositeNode prepareLeafrefData() {
258 MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(TestUtils.buildQName("cont"), null, null,
259 ModifyAction.CREATE, null);
261 MutableSimpleNode<Object> lfBoolean = NodeFactory.createMutableSimpleNode(TestUtils.buildQName("lfBoolean"),
262 cont, Boolean.TRUE, ModifyAction.CREATE, null);
263 MutableSimpleNode<Object> lfLfref = NodeFactory.createMutableSimpleNode(TestUtils.buildQName("lfLfref"), cont,
264 "true", ModifyAction.CREATE, null);
265 cont.getValue().add(lfBoolean);
266 cont.getValue().add(lfLfref);