groovy node-tree integration
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-data-impl / src / test / java / org / opendaylight / controller / yang / data / impl / NodeModificationBuilderImplTest.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.net.URI;\r
11 import java.util.Date;\r
12 \r
13 import junit.framework.Assert;\r
14 \r
15 import org.junit.Before;\r
16 import org.junit.Test;\r
17 import org.opendaylight.controller.yang.common.QName;\r
18 import org.opendaylight.controller.yang.data.api.CompositeNode;\r
19 import org.opendaylight.controller.yang.data.api.MutableCompositeNode;\r
20 import org.opendaylight.controller.yang.data.api.MutableSimpleNode;\r
21 import org.opendaylight.controller.yang.data.api.Node;\r
22 import org.opendaylight.controller.yang.data.api.SimpleNode;\r
23 import org.opendaylight.controller.yang.model.api.SchemaContext;\r
24 import org.slf4j.Logger;\r
25 import org.slf4j.LoggerFactory;\r
26 import org.w3c.dom.Document;\r
27 \r
28 /**\r
29  * @author michal.rehak\r
30  * \r
31  */\r
32 public class NodeModificationBuilderImplTest {\r
33     \r
34     private static final Logger LOG = LoggerFactory\r
35             .getLogger(NodeModificationBuilderImplTest.class);\r
36 \r
37     private SchemaContext schemaCtx;\r
38     private QName qName;\r
39     private CompositeNode network;\r
40     private NodeModificationBuilderImpl nodeModificationBuilder;\r
41 \r
42     private String ns;\r
43 \r
44     /**\r
45      * @throws Exception\r
46      */\r
47     private void dumpResult() throws Exception {\r
48         CompositeNode diffTree = nodeModificationBuilder.buildDiffTree();\r
49         CompositeNode diffTreeImmutable = NodeFactory.copyDeepAsImmutable(diffTree, null);\r
50         \r
51         Document diffShadow = NodeUtils.buildShadowDomTree(diffTreeImmutable);\r
52         NodeHelper.dumpDoc(diffShadow, System.out);\r
53     }\r
54 \r
55     /**\r
56      * prepare schemaContext\r
57      * @throws Exception \r
58      */\r
59     @Before\r
60     public void setUp() throws Exception {\r
61         schemaCtx = NodeHelper.loadSchemaContext();\r
62 \r
63         ns = "urn:opendaylight:controller:network";\r
64         qName = new QName(\r
65                 new URI(ns), \r
66                 new Date(1369000800000L), "topos");\r
67         network = NodeHelper.buildTestConfigTree(qName);\r
68         \r
69         nodeModificationBuilder = new NodeModificationBuilderImpl(network, schemaCtx);\r
70     }\r
71 \r
72     /**\r
73      * Test method for\r
74      * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#getMutableEquivalent(org.opendaylight.controller.yang.data.api.Node)}\r
75      * .\r
76      */\r
77     @Test\r
78     public void testGetMutableEquivalent() {\r
79         MutableCompositeNode rootMutable = (MutableCompositeNode) \r
80                 nodeModificationBuilder.getMutableEquivalent(network);\r
81         \r
82         CompositeNode topologies = network.getCompositesByName("topologies").iterator().next();\r
83         Node<?> mutableEquivalent = nodeModificationBuilder.getMutableEquivalent(topologies);\r
84         CompositeNode topologiesMutable = rootMutable.getCompositesByName("topologies").iterator().next();\r
85         \r
86         Assert.assertSame(topologiesMutable, mutableEquivalent);\r
87     }\r
88 \r
89     /**\r
90      * Test method for\r
91      * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}\r
92      * .\r
93      * @throws Exception \r
94      */\r
95     @Test\r
96     public void testBuildDiffTreeAddSimple() throws Exception {\r
97         LOG.debug("testBuildDiffTreeAddSimple");\r
98         Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
99         CompositeNode needle = NodeUtils.findNodeByXpath(networkShadow, \r
100                 NodeHelper.AddNamespaceToPattern(\r
101                 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]", ns));\r
102         \r
103         MutableCompositeNode mutableParent = (MutableCompositeNode) \r
104                 nodeModificationBuilder.getMutableEquivalent(needle);\r
105         \r
106         MutableSimpleNode<String> newMutable = NodeFactory.createMutableSimpleNode(\r
107                 new QName(needle.getNodeType(), "anySubNode"), mutableParent, "42", null, null);\r
108         \r
109         nodeModificationBuilder.addNode(newMutable);\r
110         dumpResult();\r
111     }\r
112     \r
113     /**\r
114      * Test method for\r
115      * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}\r
116      * .\r
117      * @throws Exception \r
118      */\r
119     @Test\r
120     public void testBuildDiffTreeAddComposite() throws Exception {\r
121         LOG.debug("testBuildDiffTreeAddComposite");\r
122         Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
123         CompositeNode needle = NodeUtils.findNodeByXpath(networkShadow, \r
124                 NodeHelper.AddNamespaceToPattern(\r
125                 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]", ns));\r
126         \r
127         MutableCompositeNode mutableParent = (MutableCompositeNode) \r
128                 nodeModificationBuilder.getMutableEquivalent(needle);\r
129         \r
130         MutableSimpleNode<String> newMutable = NodeFactory.createMutableSimpleNode(\r
131                 new QName(needle.getNodeType(), "anySubNode"), null, "42", null, null);\r
132         \r
133         MutableCompositeNode newMutableCom = NodeFactory.createMutableCompositeNode(\r
134                 new QName(needle.getNodeType(), "anySubNode"), mutableParent, \r
135                 NodeUtils.buildChildrenList(newMutable), null, null);\r
136         NodeUtils.fixChildrenRelation(newMutableCom);\r
137         newMutableCom.init();\r
138         \r
139         nodeModificationBuilder.addNode(newMutableCom);\r
140         dumpResult();\r
141     }\r
142 \r
143     /**\r
144      * Test method for\r
145      * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}\r
146      * .\r
147      * @throws Exception \r
148      */\r
149     @Test\r
150     public void testBuildDiffTreeDeleteComposite() throws Exception {\r
151         LOG.debug("testBuildDiffTreeDeleteComposite");\r
152         Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
153         SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, \r
154                 NodeHelper.AddNamespaceToPattern(\r
155                 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));\r
156 \r
157         @SuppressWarnings("unchecked")\r
158         MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) \r
159                 nodeModificationBuilder.getMutableEquivalent(needle);\r
160         \r
161         nodeModificationBuilder.deleteNode(mutableNeedle.getParent().asMutable());\r
162         dumpResult();\r
163     }\r
164 \r
165     /**\r
166      * Test method for\r
167      * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}\r
168      * .\r
169      * @throws Exception \r
170      */\r
171     @Test\r
172     public void testBuildDiffTreeDeleteSimple() throws Exception {\r
173         LOG.debug("testBuildDiffTreeDeleteSimple");\r
174         Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
175         SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, \r
176                 NodeHelper.AddNamespaceToPattern(\r
177                 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));\r
178         \r
179         @SuppressWarnings("unchecked")\r
180         MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) \r
181                 nodeModificationBuilder.getMutableEquivalent(needle);\r
182         \r
183         nodeModificationBuilder.deleteNode(mutableNeedle);\r
184         dumpResult();\r
185     }\r
186 \r
187     /**\r
188      * Test method for\r
189      * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}\r
190      * .\r
191      * @throws Exception \r
192      */\r
193     @Test\r
194     public void testBuildDiffTreeMerge() throws Exception {\r
195         LOG.debug("testBuildDiffTreeMerge");\r
196         Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
197         SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, \r
198                 NodeHelper.AddNamespaceToPattern(\r
199                 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));\r
200         \r
201         @SuppressWarnings("unchecked")\r
202         MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) \r
203                 nodeModificationBuilder.getMutableEquivalent(needle);\r
204         \r
205         mutableNeedle.setValue("tpId_18x");\r
206         nodeModificationBuilder.mergeNode(mutableNeedle.getParent().asMutable());\r
207         dumpResult();\r
208     }\r
209 \r
210     /**\r
211      * Test method for\r
212      * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}\r
213      * .\r
214      * @throws Exception \r
215      */\r
216     @Test\r
217     public void testBuildDiffTreeRemoveComposite() throws Exception {\r
218         LOG.debug("testBuildDiffTreeRemoveComposite");\r
219         Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
220         SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, \r
221                 NodeHelper.AddNamespaceToPattern(\r
222                 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));\r
223         \r
224         @SuppressWarnings("unchecked")\r
225         MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) \r
226                 nodeModificationBuilder.getMutableEquivalent(needle);\r
227         \r
228         nodeModificationBuilder.removeNode(mutableNeedle.getParent().asMutable());\r
229         dumpResult();\r
230     }\r
231 \r
232     /**\r
233      * Test method for\r
234      * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}\r
235      * .\r
236      * @throws Exception \r
237      */\r
238     @Test\r
239     public void testBuildDiffTreeRemoveSimple() throws Exception {\r
240         LOG.debug("testBuildDiffTreeRemoveSimple");\r
241         Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
242         SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, \r
243                 NodeHelper.AddNamespaceToPattern(\r
244                 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));\r
245         \r
246         @SuppressWarnings("unchecked")\r
247         MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) \r
248                 nodeModificationBuilder.getMutableEquivalent(needle);\r
249         \r
250         nodeModificationBuilder.removeNode(mutableNeedle);\r
251         dumpResult();\r
252     }\r
253 \r
254     /**\r
255      * Test method for\r
256      * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}\r
257      * .\r
258      * @throws Exception \r
259      */\r
260     @Test\r
261     public void testBuildDiffTreeReplaceComposite() throws Exception {\r
262         LOG.debug("testBuildDiffTreeReplaceComposite");\r
263         Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
264         SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, \r
265                 NodeHelper.AddNamespaceToPattern(\r
266                 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));\r
267         \r
268         @SuppressWarnings("unchecked")\r
269         MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) \r
270                 nodeModificationBuilder.getMutableEquivalent(needle);\r
271         \r
272         mutableNeedle.setValue("tpId_18x");\r
273         nodeModificationBuilder.replaceNode(mutableNeedle.getParent().asMutable());\r
274         dumpResult();\r
275     }\r
276 \r
277     /**\r
278      * Test method for\r
279      * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}\r
280      * .\r
281      * @throws Exception \r
282      */\r
283     @Test\r
284     public void testBuildDiffTreeReplaceSimple() throws Exception {\r
285         LOG.debug("testBuildDiffTreeReplaceSimple");\r
286         Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
287         SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, \r
288                 NodeHelper.AddNamespaceToPattern(\r
289                 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));\r
290         \r
291         @SuppressWarnings("unchecked")\r
292         MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) \r
293                 nodeModificationBuilder.getMutableEquivalent(needle);\r
294         \r
295         mutableNeedle.setValue("tpId_18x");\r
296         nodeModificationBuilder.replaceNode(mutableNeedle);\r
297         dumpResult();\r
298     }\r
299 \r
300 \r
301 }\r