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;
12 import org.opendaylight.controller.sal.rest.impl.StructuredDataToXmlProvider;
13 import org.opendaylight.controller.sal.restconf.impl.test.TestUtils;
14 import org.opendaylight.controller.sal.restconf.impl.test.YangAndXmlAndDataSchemaLoader;
15 import org.opendaylight.yangtools.yang.data.api.*;
16 import org.opendaylight.yangtools.yang.data.impl.NodeFactory;
17 import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec;
21 * CnSn = Composite node and Simple node data structure Class contains test of
22 * serializing simple nodes data values according data types from YANG schema to
26 public class CnSnToXmlTest extends YangAndXmlAndDataSchemaLoader {
28 public static void initialization() {
29 dataLoad("/cnsn-to-xml/yang", 2, "basic-module", "cont");
33 public void snAsYangIdentityrefToXMLTest() {
34 serializeToXml(prepareIdentityrefData(null, true), "<lf11 xmlns:x=\"referenced:module\">x:iden</lf11>");
38 public void snAsYangIdentityrefWithQNamePrefixToXMLTest() {
39 serializeToXml(prepareIdentityrefData("prefix", true),
40 "<lf11 xmlns:prefix=\"referenced:module\">prefix:iden</lf11>");
45 public void snAsYangIdentityrefWithPrefixToXMLTest() {
46 serializeToXml(prepareIdentityrefData("prefix", false), "<lf11>no qname value</lf11>");
51 public void snAsYangLeafrefWithPrefixToXMLTest() {
52 serializeToXml(prepareLeafrefData(), "<lfBoolean>true</lfBoolean>", "<lfLfref>true</lfLfref>");
56 public void snAsYangStringToXmlTest() {
58 prepareCnStructForYangData(TypeDefinitionAwareCodec.STRING_DEFAULT_CODEC.deserialize("lfStr value"),
59 "lfStr"), "<lfStr>lfStr value</lfStr>");
63 public void snAsYangInt8ToXmlTest() {
64 String elName = "lfInt8";
66 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT8_DEFAULT_CODEC.deserialize("14"), elName), "<"
67 + elName + ">14</" + elName + ">");
71 public void snAsYangInt16ToXmlTest() {
72 String elName = "lfInt16";
74 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT16_DEFAULT_CODEC.deserialize("3000"), elName),
75 "<" + elName + ">3000</" + elName + ">");
79 public void snAsYangInt32ToXmlTest() {
80 String elName = "lfInt32";
82 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT32_DEFAULT_CODEC.deserialize("201234"), elName),
83 "<" + elName + ">201234</" + elName + ">");
87 public void snAsYangInt64ToXmlTest() {
88 String elName = "lfInt64";
90 prepareCnStructForYangData(TypeDefinitionAwareCodec.INT64_DEFAULT_CODEC.deserialize("5123456789"),
91 elName), "<" + elName + ">5123456789</" + elName + ">");
95 public void snAsYangUint8ToXmlTest() {
96 String elName = "lfUint8";
98 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT8_DEFAULT_CODEC.deserialize("200"), elName),
99 "<" + elName + ">200</" + elName + ">");
103 public void snAsYangUint16ToXmlTest() {
104 String elName = "lfUint16";
106 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT16_DEFAULT_CODEC.deserialize("4000"), elName),
107 "<" + elName + ">4000</" + elName + ">");
111 public void snAsYangUint32ToXmlTest() {
112 String elName = "lfUint32";
114 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT32_DEFAULT_CODEC.deserialize("4123456789"),
115 elName), "<" + elName + ">4123456789</" + elName + ">");
119 public void snAsYangUint64ToXmlTest() {
120 String elName = "lfUint64";
122 prepareCnStructForYangData(TypeDefinitionAwareCodec.UINT64_DEFAULT_CODEC.deserialize("5123456789"),
123 elName), "<" + elName + ">5123456789</" + elName + ">");
127 public void snAsYangBinaryToXmlTest() {
128 String elName = "lfBinary";
130 prepareCnStructForYangData(
131 TypeDefinitionAwareCodec.BINARY_DEFAULT_CODEC
132 .deserialize("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567"),
133 elName), "<" + elName + ">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567</"
138 public void snAsYangBitsToXmlTest() {
139 String elName = "lfBits";
141 prepareCnStructForYangData(TypeDefinitionAwareCodec.BITS_DEFAULT_CODEC.deserialize("one two"), elName),
142 "<" + elName + ">one two</" + elName + ">", "<" + elName + ">two one</" + elName + ">");
146 public void snAsYangEnumerationToXmlTest() {
147 String elName = "lfEnumeration";
149 prepareCnStructForYangData(TypeDefinitionAwareCodec.ENUMERATION_DEFAULT_CODEC.deserialize("enum2"),
150 elName), "<" + elName + ">enum2</" + elName + ">");
154 public void snAsYangEmptyToXmlTest() {
155 String elName = "lfEmpty";
157 prepareCnStructForYangData(TypeDefinitionAwareCodec.EMPTY_DEFAULT_CODEC.deserialize(null), elName), "<"
162 public void snAsYangBooleanToXmlTest() {
163 String elName = "lfBoolean";
165 prepareCnStructForYangData(TypeDefinitionAwareCodec.BOOLEAN_DEFAULT_CODEC.deserialize("str"), elName),
166 "<" + elName + ">false</" + elName + ">");
168 prepareCnStructForYangData(TypeDefinitionAwareCodec.BOOLEAN_DEFAULT_CODEC.deserialize("true"), elName),
169 "<" + elName + ">true</" + elName + ">");
173 public void snAsYangUnionToXmlTest() {
174 String elName = "lfUnion";
177 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(int8), elName), "<"
178 + elName + ">15</" + elName + ">");
180 String bits = "first second";
182 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(bits), elName), "<"
183 + elName + ">first second</" + elName + ">");
187 prepareCnStructForYangData(TypeDefinitionAwareCodec.UNION_DEFAULT_CODEC.deserialize(bool), elName), "<"
188 + elName + ">str</" + elName + ">");
191 private void serializeToXml(CompositeNode compositeNode, String... xmlRepresentation)
192 throws TransformerFactoryConfigurationError {
193 String xmlString = "";
195 xmlString = TestUtils.writeCompNodeWithSchemaContextToOutput(compositeNode, modules, dataSchemaNode,
196 StructuredDataToXmlProvider.INSTANCE);
197 } catch (WebApplicationException | IOException e) {
199 assertNotNull(xmlString);
200 boolean containSearchedStr = false;
201 String strRepresentation = "";
202 for (String searchedStr : xmlRepresentation) {
203 if (xmlString.contains(searchedStr)) {
204 containSearchedStr = true;
207 strRepresentation = strRepresentation + "[" + searchedStr + "]";
209 assertTrue("At least one of specified strings " + strRepresentation + " wasn't found.", containSearchedStr);
213 private CompositeNode prepareIdentityrefData(String prefix, boolean valueAsQName) {
214 MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(
215 TestUtils.buildQName("cont", "basic:module", "2013-12-2"), null, null, ModifyAction.CREATE, null);
216 MutableCompositeNode cont1 = NodeFactory.createMutableCompositeNode(
217 TestUtils.buildQName("cont1", "basic:module", "2013-12-2"), cont, null, ModifyAction.CREATE, null);
218 cont.getChildren().add(cont1);
222 value = TestUtils.buildQName("iden", "referenced:module", "2013-12-2", prefix);
224 value = "no qname value";
226 MutableSimpleNode<Object> lf11 = NodeFactory.createMutableSimpleNode(
227 TestUtils.buildQName("lf11", "basic:module", "2013-12-2"), cont1, value, 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);
247 private CompositeNode prepareLeafrefData() {
248 MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(TestUtils.buildQName("cont"), null, null,
249 ModifyAction.CREATE, null);
251 MutableSimpleNode<Object> lfBoolean = NodeFactory.createMutableSimpleNode(TestUtils.buildQName("lfBoolean"),
252 cont, Boolean.TRUE, ModifyAction.CREATE, null);
253 MutableSimpleNode<Object> lfLfref = NodeFactory.createMutableSimpleNode(TestUtils.buildQName("lfLfref"), cont,
254 "true", ModifyAction.CREATE, null);
255 cont.getChildren().add(lfBoolean);
256 cont.getChildren().add(lfLfref);