1 package org.opendaylight.controller.sal.restconf.impl.cnsn.to.xml.test;
3 import static org.junit.Assert.*;
5 import java.io.StringWriter;
8 import javax.activation.UnsupportedDataTypeException;
9 import javax.xml.transform.*;
10 import javax.xml.transform.dom.DOMSource;
11 import javax.xml.transform.stream.StreamResult;
13 import org.junit.BeforeClass;
14 import org.junit.Test;
15 import org.opendaylight.controller.sal.rest.impl.XmlMapper;
16 import org.opendaylight.controller.sal.restconf.impl.test.TestUtils;
17 import org.opendaylight.yangtools.yang.data.api.*;
18 import org.opendaylight.yangtools.yang.data.impl.NodeFactory;
19 import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec;
20 import org.opendaylight.yangtools.yang.model.api.*;
21 import org.w3c.dom.Document;
25 * CnSn = Composite node and Simple node data structure Class contains test of
26 * serializing simple nodes data values according data types from YANG schema to
30 public class CnSnToXmlTest {
32 private static Set<Module> modules;
33 private static DataSchemaNode dataSchemaNode;
36 public static void initialization() {
37 modules = TestUtils.resolveModules("/cnsn-to-xml/yang");
38 assertEquals(2, modules.size());
39 Module module = TestUtils.resolveModule("basic-module", modules);
40 assertNotNull(module);
41 dataSchemaNode = TestUtils.resolveDataSchemaNode(module, "cont");
42 assertNotNull(dataSchemaNode);
47 public void snAsYangIdentityrefToXMLTest() {
48 serializeToXml(prepareIdentityrefData(), "<lf11 xmlns:x=\"referenced:module\">x:iden</lf11>");
52 public void snAsYangStringToXmlTest() {
54 prepareCnStructForYangData(TypeDefinitionAwareCodec.STRING_DEFAULT_CODEC.deserialize("lfStr value"),
55 "lfStr"), "<lfStr>lfStr value</lfStr>");
59 public void snAsYangInt8ToXmlTest() {
60 String elName = "lfInt8";
62 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT8_DEFAULT_CODEC.deserialize("14"), elName), "<"
63 + elName + ">14</" + elName + ">");
67 public void snAsYangInt16ToXmlTest() {
68 String elName = "lfInt16";
70 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT16_DEFAULT_CODEC.deserialize("3000"), elName),
71 "<" + elName + ">3000</" + elName + ">");
75 public void snAsYangInt32ToXmlTest() {
76 String elName = "lfInt32";
78 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT32_DEFAULT_CODEC.deserialize("201234"), elName),
79 "<" + elName + ">201234</" + elName + ">");
83 public void snAsYangInt64ToXmlTest() {
84 String elName = "lfInt64";
86 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT64_DEFAULT_CODEC.deserialize("5123456789"),
87 elName), "<" + elName + ">5123456789</" + elName + ">");
91 public void snAsYangUint8ToXmlTest() {
92 String elName = "lfUint8";
94 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT8_DEFAULT_CODEC.deserialize("200"), elName),
95 "<" + elName + ">200</" + elName + ">");
99 public void snAsYangUint16ToXmlTest() {
100 String elName = "lfUint16";
102 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT16_DEFAULT_CODEC.deserialize("4000"), elName),
103 "<" + elName + ">4000</" + elName + ">");
107 public void snAsYangUint32ToXmlTest() {
108 String elName = "lfUint32";
110 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT32_DEFAULT_CODEC.deserialize("4123456789"),
111 elName), "<" + elName + ">4123456789</" + elName + ">");
115 public void snAsYangUint64ToXmlTest() {
116 String elName = "lfUint64";
118 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT64_DEFAULT_CODEC.deserialize("5123456789"),
119 elName), "<" + elName + ">5123456789</" + elName + ">");
123 public void snAsYangBinaryToXmlTest() {
124 String elName = "lfBinary";
126 prepareCnStructForYangData(
127 TypeDefinitionAwareCodec.BINARY_DEFAULT_CODEC
128 .deserialize("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567"),
129 elName), "<" + elName + ">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567</"
134 public void snAsYangBitsToXmlTest() {
135 String elName = "lfBits";
137 prepareCnStructForYangData(TypeDefinitionAwareCodec.BITS_DEFAULT_CODEC.deserialize("one two"), elName),
138 "<" + elName + ">one two</" + elName + ">", "<" + elName + ">two one</" + elName + ">");
142 public void snAsYangEnumerationToXmlTest() {
143 String elName = "lfEnumeration";
145 prepareCnStructForYangData(TypeDefinitionAwareCodec.ENUMERATION_DEFAULT_CODEC.deserialize("enum2"),
146 elName), "<" + elName + ">enum2</" + elName + ">");
150 public void snAsYangEmptyToXmlTest() {
151 String elName = "lfEmpty";
153 prepareCnStructForYangData(TypeDefinitionAwareCodec.EMPTY_DEFAULT_CODEC.deserialize(null), elName), "<"
158 public void snAsYangBooleanToXmlTest() {
159 String elName = "lfBoolean";
161 prepareCnStructForYangData(TypeDefinitionAwareCodec.BOOLEAN_DEFAULT_CODEC.deserialize("str"), elName),
162 "<" + elName + ">false</" + elName + ">");
164 prepareCnStructForYangData(TypeDefinitionAwareCodec.BOOLEAN_DEFAULT_CODEC.deserialize("true"), elName),
165 "<" + elName + ">true</" + elName + ">");
169 public void snAsYangUnionToXmlTest() {
170 String elName = "lfUnion";
173 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(int8), elName), "<"
174 + elName + ">15</" + elName + ">");
176 String bits = "first second";
178 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(bits), elName), "<"
179 + elName + ">first second</" + elName + ">");
183 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(bool), elName), "<"
184 + elName + ">str</" + elName + ">");
187 private void serializeToXml(CompositeNode compositeNode, String... xmlRepresentation)
188 throws TransformerFactoryConfigurationError {
189 XmlMapper xmlMapper = new XmlMapper();
190 String xmlString = null;
191 if (dataSchemaNode instanceof DataNodeContainer) {
193 Document doc = xmlMapper.write(compositeNode, (DataNodeContainer) dataSchemaNode);
194 DOMSource domSource = new DOMSource(doc);
195 StringWriter writer = new StringWriter();
196 StreamResult result = new StreamResult(writer);
197 TransformerFactory tf = TransformerFactory.newInstance();
198 Transformer transformer = tf.newTransformer();
199 transformer.transform(domSource, result);
200 xmlString = writer.toString();
201 } catch (UnsupportedDataTypeException | TransformerException e) {
204 assertNotNull(xmlMapper);
205 boolean containSearchedStr = false;
206 String strRepresentation = "";
207 for (String searchedStr : xmlRepresentation) {
208 if (xmlString.contains(searchedStr)) {
209 containSearchedStr = true;
212 strRepresentation = strRepresentation + "[" + searchedStr + "]";
214 assertTrue("At least one of specified strings " + strRepresentation + " wasn't found.", containSearchedStr);
218 private CompositeNode prepareIdentityrefData() {
219 MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(
220 TestUtils.buildQName("cont", "basic:module", "2013-12-2"), null, null, ModifyAction.CREATE, null);
221 MutableCompositeNode cont1 = NodeFactory.createMutableCompositeNode(
222 TestUtils.buildQName("cont1", "basic:module", "2013-12-2"), cont, null, ModifyAction.CREATE, null);
223 cont.getChildren().add(cont1);
225 MutableSimpleNode<Object> lf11 = NodeFactory.createMutableSimpleNode(
226 TestUtils.buildQName("lf11", "basic:module", "2013-12-2"), cont1,
227 TestUtils.buildQName("iden", "referenced:module", "2013-12-2"), ModifyAction.CREATE, null);
228 cont1.getChildren().add(lf11);
235 private CompositeNode prepareCnStructForYangData(Object data, String leafName) {
236 MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(TestUtils.buildQName("cont"), null, null,
237 ModifyAction.CREATE, null);
239 MutableSimpleNode<Object> lf1 = NodeFactory.createMutableSimpleNode(TestUtils.buildQName(leafName), cont, data,
240 ModifyAction.CREATE, null);
241 cont.getChildren().add(lf1);