Fix minor bug in FRM proactive flow code path
[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.net.URI;\r
11 import java.util.ArrayList;\r
12 import java.util.Date;\r
13 import java.util.HashMap;\r
14 import java.util.List;\r
15 import java.util.Map;\r
16 \r
17 import org.junit.Assert;\r
18 import org.junit.Before;\r
19 import org.junit.Test;\r
20 import org.opendaylight.controller.yang.common.QName;\r
21 import org.opendaylight.controller.yang.data.api.CompositeNode;\r
22 import org.opendaylight.controller.yang.data.api.ModifyAction;\r
23 import org.opendaylight.controller.yang.data.api.MutableCompositeNode;\r
24 import org.opendaylight.controller.yang.data.api.Node;\r
25 import org.opendaylight.controller.yang.data.api.NodeModification;\r
26 import org.opendaylight.controller.yang.data.api.SimpleNode;\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     private QName qName;\r
36     private CompositeNode network;\r
37 \r
38     private String ns;\r
39     private Document networkShadow;\r
40 \r
41 \r
42     /**\r
43      * @throws Exception\r
44      */\r
45     @Before\r
46     public void setUp() throws Exception {\r
47         ns = "urn:ietf:params:xml:ns:netconf:base:1.0";\r
48         qName = new QName(\r
49                 new URI(ns), \r
50                 new Date(42), null);\r
51         network = NodeHelper.buildTestConfigTree(qName);\r
52         networkShadow = NodeUtils.buildShadowDomTree(network);\r
53         NodeHelper.compareXmlTree(networkShadow, "./config02-shadow.xml", getClass());\r
54     }\r
55 \r
56     /**\r
57      * Test method for methods creating immutable nodes in\r
58      * {@link org.opendaylight.controller.yang.data.impl.NodeFactory}.\r
59      * @throws Exception \r
60      */\r
61     @Test\r
62     public void testImmutableNodes() throws Exception {\r
63         Assert.assertEquals(2, network.getChildren().size());\r
64         CompositeNode tpList = NodeUtils.findNodeByXpath(networkShadow, \r
65                 NodeHelper.AddNamespaceToPattern(\r
66                         "//{0}node[{0}node-id/text()='nodeId_19']/{0}termination-points", ns));\r
67         \r
68         \r
69         Assert.assertEquals(2, tpList.getCompositesByName("termination-point").size());\r
70     }\r
71 \r
72     /**\r
73      * Test method for methods creating immutable and mutable nodes:\r
74      * {@link NodeFactory#createMutableCompositeNode(QName, CompositeNode, List, ModifyAction, CompositeNode)},\r
75      * {@link NodeFactory#createMutableSimpleNode(QName, CompositeNode, Object, ModifyAction, SimpleNode)}\r
76      * @throws Exception \r
77      */\r
78     @Test\r
79     public void testMutableNodes() throws Exception {\r
80         // <config>\r
81         //   <top xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\r
82         //     <interface xc:operation="delete">\r
83         //       <name>Ethernet0/0</name>\r
84         //       <mtu>1500</mtu>\r
85         //     </interface>\r
86         //     <interface>\r
87         //       <name>Ethernet0/1</name>\r
88         //       <mtu>1501</mtu>\r
89         //     </interface>\r
90         //   </top>\r
91         // </config>\r
92         \r
93         \r
94         List<Node<?>> value = new ArrayList<Node<?>>(); \r
95         value.add(NodeFactory.createImmutableSimpleNode(new QName(qName, "name"), null, "Ethernet0/0"));\r
96         value.add(NodeFactory.createImmutableSimpleNode(new QName(qName, "mtu"), null, 1500));\r
97         \r
98         MutableCompositeNode ifNode = NodeFactory.createMutableCompositeNode(\r
99                 new QName(qName, "interface"), null, value, ModifyAction.DELETE, null);\r
100         ifNode.init();\r
101         NodeHelper.assignParentToChildren(ifNode);\r
102         \r
103         value = new ArrayList<Node<?>>(); \r
104         value.add(NodeFactory.createImmutableSimpleNode(new QName(qName, "name"), null, "Ethernet1/0"));\r
105         value.add(NodeFactory.createMutableSimpleNode(new QName(qName, "mtu"), null, 1501, ModifyAction.REMOVE, null));\r
106         \r
107         CompositeNode ifNode2 = NodeFactory.createImmutableCompositeNode(new QName(qName, "interface"), null, value);\r
108         NodeHelper.assignParentToChildren(ifNode2);\r
109 \r
110         value = new ArrayList<Node<?>>(); \r
111         value.add(ifNode);\r
112         value.add(ifNode2);\r
113         \r
114         CompositeNode topNode = NodeFactory.createImmutableCompositeNode(new QName(qName, "top"), null, value);\r
115         NodeHelper.assignParentToChildren(topNode);\r
116         value = new ArrayList<Node<?>>(); \r
117         value.add(topNode);\r
118         \r
119         CompositeNode root = NodeFactory.createImmutableCompositeNode(new QName(qName, "config"), null, value);\r
120         Document shadowConfig = NodeUtils.buildShadowDomTree(root);\r
121         NodeHelper.compareXmlTree(shadowConfig, "./mutableNodesConfig.xml", getClass());\r
122         \r
123         Assert.assertEquals(1, root.getChildren().size());\r
124         Assert.assertEquals(1, ifNode.getSimpleNodesByName("name").size());\r
125         Assert.assertEquals(1, ifNode.getSimpleNodesByName("mtu").size());\r
126         Assert.assertEquals(2, topNode.getCompositesByName("interface").size());\r
127         NodeModification interfaceMod = topNode.getCompositesByName("interface").get(0);\r
128         Assert.assertEquals(ModifyAction.DELETE, interfaceMod.getModificationAction());\r
129     }\r
130 \r
131     /**\r
132      * test of {@link NodeFactory#copyDeepAsMutable(CompositeNode, Map)}\r
133      * @throws Exception \r
134      */\r
135     @Test\r
136     public void testCopyDeepAsMutable() throws Exception {\r
137         Map<Node<?>, Node<?>> mutableToOrig = new HashMap<>();\r
138         CompositeNode mutableNetwork = NodeFactory.copyDeepAsMutable(network, mutableToOrig);\r
139 \r
140         Document mutableNetworkShadow = NodeUtils.buildShadowDomTree(mutableNetwork);\r
141         \r
142         NodeHelper.compareXmlTree(mutableNetworkShadow, "./config02-shadow.xml", getClass());\r
143         \r
144         CompositeNode immutableNetwork = NodeFactory.copyDeepAsImmutable(mutableNetwork, null);\r
145         Assert.assertEquals(network, immutableNetwork);\r
146     }\r
147     \r
148     \r
149     /**\r
150      * test of {@link NodeFactory#copyDeepAsImmutable(CompositeNode, Map)}\r
151      * @throws Exception \r
152      */\r
153     @Test\r
154     public void testCopyDeepAsImmutable() throws Exception {\r
155         Map<Node<?>, Node<?>> mutableToOrig = new HashMap<>();\r
156         CompositeNode immutableNetwork = NodeFactory.copyDeepAsImmutable(network, mutableToOrig);\r
157         \r
158         Document mutableNetworkShadow = NodeUtils.buildShadowDomTree(immutableNetwork);\r
159         NodeHelper.compareXmlTree(mutableNetworkShadow, "./config02-shadow.xml", getClass());\r
160         \r
161         Assert.assertEquals(network, immutableNetwork);\r
162     }\r
163 \r
164 }\r