1 package org.opendaylight.controller.sal.restconf.impl.cnsn.to.xml.test;
3 import static org.junit.Assert.assertNotNull;
4 import static org.junit.Assert.assertTrue;
6 import java.io.IOException;
8 import javax.ws.rs.WebApplicationException;
9 import javax.xml.transform.TransformerFactoryConfigurationError;
11 import org.junit.BeforeClass;
12 import org.junit.Test;
13 import org.opendaylight.controller.sal.rest.impl.StructuredDataToXmlProvider;
14 import org.opendaylight.controller.sal.restconf.impl.test.TestUtils;
15 import org.opendaylight.controller.sal.restconf.impl.test.YangAndXmlAndDataSchemaLoader;
16 import org.opendaylight.yangtools.yang.data.api.*;
17 import org.opendaylight.yangtools.yang.data.impl.NodeFactory;
18 import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec;
22 * CnSn = Composite node and Simple node data structure Class contains test of
23 * serializing simple nodes data values according data types from YANG schema to
27 public class CnSnToXmlTest extends YangAndXmlAndDataSchemaLoader {
29 public static void initialization() {
30 dataLoad("/cnsn-to-xml/yang", 2, "basic-module", "cont");
34 public void snAsYangIdentityrefToXMLTest() {
35 serializeToXml(prepareIdentityrefData(null, true), "<lf11 xmlns:x=\"referenced:module\">x:iden</lf11>");
39 public void snAsYangIdentityrefWithQNamePrefixToXMLTest() {
40 serializeToXml(prepareIdentityrefData("prefix", true),
41 "<lf11 xmlns:prefix=\"referenced:module\">prefix:iden</lf11>");
45 public void snAsYangIdentityrefWithPrefixToXMLTest() {
46 serializeToXml(prepareIdentityrefData("prefix", false), "<lf11>no qname value</lf11>");
50 public void snAsYangLeafrefWithPrefixToXMLTest() {
51 serializeToXml(prepareLeafrefData(), "<lfBoolean>true</lfBoolean>", "<lfLfref>true</lfLfref>");
55 public void snAsYangStringToXmlTest() {
57 prepareCnStructForYangData(TypeDefinitionAwareCodec.STRING_DEFAULT_CODEC.deserialize("lfStr value"),
58 "lfStr"), "<lfStr>lfStr value</lfStr>");
62 public void snAsYangInt8ToXmlTest() {
63 String elName = "lfInt8";
65 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT8_DEFAULT_CODEC.deserialize("14"), elName), "<"
66 + elName + ">14</" + elName + ">");
70 public void snAsYangInt16ToXmlTest() {
71 String elName = "lfInt16";
73 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT16_DEFAULT_CODEC.deserialize("3000"), elName),
74 "<" + elName + ">3000</" + elName + ">");
78 public void snAsYangInt32ToXmlTest() {
79 String elName = "lfInt32";
81 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT32_DEFAULT_CODEC.deserialize("201234"), elName),
82 "<" + elName + ">201234</" + elName + ">");
86 public void snAsYangInt64ToXmlTest() {
87 String elName = "lfInt64";
89 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT64_DEFAULT_CODEC.deserialize("5123456789"),
90 elName), "<" + elName + ">5123456789</" + elName + ">");
94 public void snAsYangUint8ToXmlTest() {
95 String elName = "lfUint8";
97 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT8_DEFAULT_CODEC.deserialize("200"), elName),
98 "<" + elName + ">200</" + elName + ">");
102 public void snAsYangUint16ToXmlTest() {
103 String elName = "lfUint16";
105 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT16_DEFAULT_CODEC.deserialize("4000"), elName),
106 "<" + elName + ">4000</" + elName + ">");
110 public void snAsYangUint32ToXmlTest() {
111 String elName = "lfUint32";
113 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT32_DEFAULT_CODEC.deserialize("4123456789"),
114 elName), "<" + elName + ">4123456789</" + elName + ">");
118 public void snAsYangUint64ToXmlTest() {
119 String elName = "lfUint64";
121 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT64_DEFAULT_CODEC.deserialize("5123456789"),
122 elName), "<" + elName + ">5123456789</" + elName + ">");
126 public void snAsYangBinaryToXmlTest() {
127 String elName = "lfBinary";
129 prepareCnStructForYangData(
130 TypeDefinitionAwareCodec.BINARY_DEFAULT_CODEC
131 .deserialize("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567"),
132 elName), "<" + elName + ">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567</"
137 public void snAsYangBitsToXmlTest() {
138 String elName = "lfBits";
140 prepareCnStructForYangData(TypeDefinitionAwareCodec.BITS_DEFAULT_CODEC.deserialize("one two"), elName),
141 "<" + elName + ">one two</" + elName + ">", "<" + elName + ">two one</" + elName + ">");
145 public void snAsYangEnumerationToXmlTest() {
146 String elName = "lfEnumeration";
148 prepareCnStructForYangData(TypeDefinitionAwareCodec.ENUMERATION_DEFAULT_CODEC.deserialize("enum2"),
149 elName), "<" + elName + ">enum2</" + elName + ">");
153 public void snAsYangEmptyToXmlTest() {
154 String elName = "lfEmpty";
156 prepareCnStructForYangData(TypeDefinitionAwareCodec.EMPTY_DEFAULT_CODEC.deserialize(null), elName), "<"
161 public void snAsYangBooleanToXmlTest() {
162 String elName = "lfBoolean";
164 prepareCnStructForYangData(TypeDefinitionAwareCodec.BOOLEAN_DEFAULT_CODEC.deserialize("str"), elName),
165 "<" + elName + ">false</" + elName + ">");
167 prepareCnStructForYangData(TypeDefinitionAwareCodec.BOOLEAN_DEFAULT_CODEC.deserialize("true"), elName),
168 "<" + elName + ">true</" + elName + ">");
172 public void snAsYangUnionToXmlTest() {
173 String elName = "lfUnion";
176 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(int8), elName), "<"
177 + elName + ">15</" + elName + ">");
179 String bits = "first second";
181 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(bits), elName), "<"
182 + elName + ">first second</" + elName + ">");
186 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(bool), elName), "<"
187 + elName + ">str</" + elName + ">");
190 private void serializeToXml(CompositeNode compositeNode, String... xmlRepresentation)
191 throws TransformerFactoryConfigurationError {
192 String xmlString = "";
194 xmlString = TestUtils.writeCompNodeWithSchemaContextToOutput(compositeNode, modules, dataSchemaNode,
195 StructuredDataToXmlProvider.INSTANCE);
196 } catch (WebApplicationException | IOException e) {
198 assertNotNull(xmlString);
199 boolean containSearchedStr = false;
200 String strRepresentation = "";
201 for (String searchedStr : xmlRepresentation) {
202 if (xmlString.contains(searchedStr)) {
203 containSearchedStr = true;
206 strRepresentation = strRepresentation + "[" + searchedStr + "]";
208 assertTrue("At least one of specified strings " + strRepresentation + " wasn't found.", containSearchedStr);
212 private CompositeNode prepareIdentityrefData(String prefix, boolean valueAsQName) {
213 MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(
214 TestUtils.buildQName("cont", "basic:module", "2013-12-2"), null, null, ModifyAction.CREATE, null);
215 MutableCompositeNode cont1 = NodeFactory.createMutableCompositeNode(
216 TestUtils.buildQName("cont1", "basic:module", "2013-12-2"), cont, null, ModifyAction.CREATE, null);
217 cont.getChildren().add(cont1);
221 value = TestUtils.buildQName("iden", "referenced:module", "2013-12-2", prefix);
223 value = "no qname value";
225 MutableSimpleNode<Object> lf11 = NodeFactory.createMutableSimpleNode(
226 TestUtils.buildQName("lf11", "basic:module", "2013-12-2"), cont1, value, ModifyAction.CREATE, null);
227 cont1.getChildren().add(lf11);
234 private CompositeNode prepareCnStructForYangData(Object data, String leafName) {
235 MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(TestUtils.buildQName("cont"), null, null,
236 ModifyAction.CREATE, null);
238 MutableSimpleNode<Object> lf1 = NodeFactory.createMutableSimpleNode(TestUtils.buildQName(leafName), cont, data,
239 ModifyAction.CREATE, null);
240 cont.getChildren().add(lf1);
246 private CompositeNode prepareLeafrefData() {
247 MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(TestUtils.buildQName("cont"), null, null,
248 ModifyAction.CREATE, null);
250 MutableSimpleNode<Object> lfBoolean = NodeFactory.createMutableSimpleNode(TestUtils.buildQName("lfBoolean"),
251 cont, Boolean.TRUE, ModifyAction.CREATE, null);
252 MutableSimpleNode<Object> lfLfref = NodeFactory.createMutableSimpleNode(TestUtils.buildQName("lfLfref"), cont,
253 "true", ModifyAction.CREATE, null);
254 cont.getChildren().add(lfBoolean);
255 cont.getChildren().add(lfLfref);