2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\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
8 package org.opendaylight.yangtools.yang.data.impl;
\r
10 import java.net.URI;
\r
11 import java.util.Date;
\r
13 import junit.framework.Assert;
\r
15 import org.junit.Before;
\r
16 import org.junit.Test;
\r
17 import org.opendaylight.yangtools.yang.common.QName;
\r
18 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
\r
19 import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode;
\r
20 import org.opendaylight.yangtools.yang.data.api.MutableSimpleNode;
\r
21 import org.opendaylight.yangtools.yang.data.api.Node;
\r
22 import org.opendaylight.yangtools.yang.data.api.SimpleNode;
\r
23 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
\r
24 import org.slf4j.Logger;
\r
25 import org.slf4j.LoggerFactory;
\r
26 import org.w3c.dom.Document;
\r
29 * @author michal.rehak
\r
32 public class NodeModificationBuilderImplTest {
\r
34 private static final Logger LOG = LoggerFactory
\r
35 .getLogger(NodeModificationBuilderImplTest.class);
\r
37 private SchemaContext schemaCtx;
\r
38 private QName qName;
\r
39 private CompositeNode network;
\r
40 private NodeModificationBuilderImpl nodeModificationBuilder;
\r
47 private void dumpResult() throws Exception {
\r
48 CompositeNode diffTree = nodeModificationBuilder.buildDiffTree();
\r
49 CompositeNode diffTreeImmutable = NodeFactory.copyDeepAsImmutable(diffTree, null);
\r
51 Document diffShadow = NodeUtils.buildShadowDomTree(diffTreeImmutable);
\r
52 NodeHelper.dumpDoc(diffShadow, System.out);
\r
56 * prepare schemaContext
\r
60 public void setUp() throws Exception {
\r
61 schemaCtx = NodeHelper.loadSchemaContext();
\r
63 ns = "urn:opendaylight:controller:network";
\r
66 new Date(1369000800000L), "topos");
\r
67 network = NodeHelper.buildTestConfigTree(qName);
\r
69 nodeModificationBuilder = new NodeModificationBuilderImpl(network, schemaCtx);
\r
74 * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#getMutableEquivalent(org.opendaylight.controller.yang.data.api.Node)}
\r
78 public void testGetMutableEquivalent() {
\r
79 MutableCompositeNode rootMutable = (MutableCompositeNode)
\r
80 nodeModificationBuilder.getMutableEquivalent(network);
\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
86 Assert.assertSame(topologiesMutable, mutableEquivalent);
\r
91 * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
\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
103 MutableCompositeNode mutableParent = (MutableCompositeNode)
\r
104 nodeModificationBuilder.getMutableEquivalent(needle);
\r
106 MutableSimpleNode<String> newMutable = NodeFactory.createMutableSimpleNode(
\r
107 new QName(needle.getNodeType(), "anySubNode"), mutableParent, "42", null, null);
\r
109 nodeModificationBuilder.addNode(newMutable);
\r
115 * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
\r
117 * @throws Exception
\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
127 MutableCompositeNode mutableParent = (MutableCompositeNode)
\r
128 nodeModificationBuilder.getMutableEquivalent(needle);
\r
130 MutableSimpleNode<String> newMutable = NodeFactory.createMutableSimpleNode(
\r
131 new QName(needle.getNodeType(), "anySubNode"), null, "42", null, null);
\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
139 nodeModificationBuilder.addNode(newMutableCom);
\r
145 * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
\r
147 * @throws Exception
\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
157 @SuppressWarnings("unchecked")
\r
158 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>)
\r
159 nodeModificationBuilder.getMutableEquivalent(needle);
\r
161 nodeModificationBuilder.deleteNode(mutableNeedle.getParent().asMutable());
\r
167 * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
\r
169 * @throws Exception
\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
179 @SuppressWarnings("unchecked")
\r
180 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>)
\r
181 nodeModificationBuilder.getMutableEquivalent(needle);
\r
183 nodeModificationBuilder.deleteNode(mutableNeedle);
\r
189 * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
\r
191 * @throws Exception
\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
201 @SuppressWarnings("unchecked")
\r
202 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>)
\r
203 nodeModificationBuilder.getMutableEquivalent(needle);
\r
205 mutableNeedle.setValue("tpId_18x");
\r
206 nodeModificationBuilder.mergeNode(mutableNeedle.getParent().asMutable());
\r
212 * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
\r
214 * @throws Exception
\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
224 @SuppressWarnings("unchecked")
\r
225 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>)
\r
226 nodeModificationBuilder.getMutableEquivalent(needle);
\r
228 nodeModificationBuilder.removeNode(mutableNeedle.getParent().asMutable());
\r
234 * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
\r
236 * @throws Exception
\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
246 @SuppressWarnings("unchecked")
\r
247 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>)
\r
248 nodeModificationBuilder.getMutableEquivalent(needle);
\r
250 nodeModificationBuilder.removeNode(mutableNeedle);
\r
256 * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
\r
258 * @throws Exception
\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
268 @SuppressWarnings("unchecked")
\r
269 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>)
\r
270 nodeModificationBuilder.getMutableEquivalent(needle);
\r
272 mutableNeedle.setValue("tpId_18x");
\r
273 nodeModificationBuilder.replaceNode(mutableNeedle.getParent().asMutable());
\r
279 * {@link org.opendaylight.controller.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
\r
281 * @throws Exception
\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
291 @SuppressWarnings("unchecked")
\r
292 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>)
\r
293 nodeModificationBuilder.getMutableEquivalent(needle);
\r
295 mutableNeedle.setValue("tpId_18x");
\r
296 nodeModificationBuilder.replaceNode(mutableNeedle);
\r