first implementation of yang-data-api
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-data-impl / src / test / java / org / opendaylight / controller / yang / data / impl / NodeFactoryTest.java
1 /*\r
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.controller.yang.data.impl;\r
9 \r
10 import java.io.ByteArrayOutputStream;\r
11 import java.io.PrintStream;\r
12 import java.net.URI;\r
13 import java.util.ArrayList;\r
14 import java.util.Date;\r
15 import java.util.HashMap;\r
16 import java.util.List;\r
17 import java.util.Map;\r
18 \r
19 import org.junit.Assert;\r
20 import org.junit.Test;\r
21 import org.opendaylight.controller.yang.common.QName;\r
22 import org.opendaylight.controller.yang.data.api.CompositeNode;\r
23 import org.opendaylight.controller.yang.data.api.ModifyAction;\r
24 import org.opendaylight.controller.yang.data.api.MutableCompositeNode;\r
25 import org.opendaylight.controller.yang.data.api.Node;\r
26 import org.opendaylight.controller.yang.data.api.NodeModification;\r
27 import org.w3c.dom.Document;\r
28 \r
29 /**\r
30  * @author michal.rehak\r
31  * \r
32  */\r
33 public class NodeFactoryTest {\r
34 \r
35     /**\r
36      * Test method for methods creating immutable nodes in\r
37      * {@link org.opendaylight.controller.yang.data.impl.NodeFactory}.\r
38      * @throws Exception \r
39      */\r
40     @Test\r
41     public void testImmutableNodes() throws Exception {\r
42         QName qName = new QName(\r
43                 new URI("urn:opendaylight:controller:network"), \r
44                 new Date(42), "yang-data-impl-immutableTest_", null);\r
45         \r
46         CompositeNode network = NodeHelper.buildTestConfigTree(qName);\r
47         \r
48         \r
49         Assert.assertEquals(1, network.getChildren().size());\r
50         Document domTree = NodeUtils.buildShadowDomTree(network);\r
51         NodeHelper.dumpDoc(domTree, System.out);\r
52         \r
53         CompositeNode tpList = NodeUtils.findNodeByXpath(domTree, \r
54                 "//node[node-id/text()='nodeId_19']/termination-points");\r
55         \r
56         \r
57         Assert.assertEquals(2, tpList.getCompositesByName("termination-point").size());\r
58 //        Assert.assertEquals(1, topologies.getCompositesByName("topology").size());\r
59 //        Assert.assertEquals(2, destination.getChildren().size());\r
60     }\r
61 \r
62     /**\r
63      * Test method for methods creating immutable nodes in\r
64      * {@link org.opendaylight.controller.yang.data.impl.NodeFactory}.\r
65      * @throws Exception \r
66      */\r
67     @Test\r
68     public void testMutableNodes() throws Exception {\r
69         // <config>\r
70         //   <top xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\r
71         //     <interface xc:operation="delete">\r
72         //       <name>Ethernet0/0</name>\r
73         //       <mtu>1500</mtu>\r
74         //     </interface>\r
75         //     <interface>\r
76         //       <name>Ethernet0/1</name>\r
77         //       <mtu>1501</mtu>\r
78         //     </interface>\r
79         //   </top>\r
80         // </config>\r
81         \r
82         QName qName = new QName(\r
83                 new URI("urn:ietf:params:xml:ns:netconf:base:1.0"), \r
84                 new Date(42), "yang-data-impl-mutableTest");\r
85         \r
86         List<Node<?>> value = new ArrayList<Node<?>>(); \r
87         value.add(NodeFactory.createSimpleNode(new QName(qName, "name"), null, "Ethernet0/0"));\r
88         value.add(NodeFactory.createSimpleNode(new QName(qName, "mtu"), null, 1500));\r
89         \r
90         CompositeNodeModificationTOImpl ifNode = NodeFactory.createCompositeNodeModification(\r
91                 new QName(qName, "interface"), null, value, ModifyAction.DELETE);\r
92         NodeHelper.assignParentToChildren(ifNode);\r
93         \r
94         value = new ArrayList<Node<?>>(); \r
95         value.add(NodeFactory.createSimpleNode(new QName(qName, "name"), null, "Ethernet1/0"));\r
96         value.add(NodeFactory.createSimpleNode(new QName(qName, "mtu"), null, 1501));\r
97         \r
98         CompositeNode ifNode2 = NodeFactory.createCompositeNode(new QName(qName, "interface"), null, value);\r
99         NodeHelper.assignParentToChildren(ifNode2);\r
100 \r
101         value = new ArrayList<Node<?>>(); \r
102         value.add(ifNode);\r
103         value.add(ifNode2);\r
104         \r
105         CompositeNode topNode = NodeFactory.createCompositeNode(new QName(qName, "top"), null, value);\r
106         NodeHelper.assignParentToChildren(topNode);\r
107         value = new ArrayList<Node<?>>(); \r
108         value.add(topNode);\r
109         \r
110         CompositeNode root = NodeFactory.createCompositeNode(new QName(qName, "config"), null, value);\r
111         \r
112         \r
113         Assert.assertEquals(1, root.getChildren().size());\r
114         Assert.assertEquals(1, ifNode.getSimpleNodesByName("name").size());\r
115         Assert.assertEquals(1, ifNode.getSimpleNodesByName("mtu").size());\r
116         Assert.assertEquals(2, topNode.getCompositesByName("interface").size());\r
117         NodeModification interfaceMod = (NodeModification) \r
118                 topNode.getCompositesByName("interface").get(0);\r
119         Assert.assertEquals(ModifyAction.DELETE, interfaceMod.getModificationAction());\r
120     }\r
121 \r
122     /**\r
123      * test modifications builder\r
124      * @throws Exception \r
125      */\r
126     @Test\r
127     public void testCopyDeepNode() throws Exception {\r
128         QName qName = new QName(\r
129                 new URI("urn:opendaylight:controller:network"), \r
130                 new Date(42), "yang-data-impl-immutableTest_", null);\r
131         \r
132         CompositeNode network = NodeHelper.buildTestConfigTree(qName);\r
133         Map<Node<?>, Node<?>> mutableToOrig = new HashMap<>();\r
134         MutableCompositeNode mutableNetwork = NodeFactory.copyDeepNode(network, mutableToOrig );\r
135 \r
136         Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
137         ByteArrayOutputStream expected = new ByteArrayOutputStream();\r
138         NodeHelper.dumpDoc(networkShadow, new PrintStream(expected));\r
139         \r
140         Document mutableNetworkShadow = NodeUtils.buildShadowDomTree(mutableNetwork);\r
141         ByteArrayOutputStream actual = new ByteArrayOutputStream();\r
142         NodeHelper.dumpDoc(mutableNetworkShadow, new PrintStream(actual));\r
143         \r
144         Assert.assertEquals(new String(expected.toByteArray()), new String(actual.toByteArray()));\r
145     }\r
146 \r
147 }\r