2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.data.impl;
11 import java.util.Date;
13 import junit.framework.Assert;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
19 import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode;
20 import org.opendaylight.yangtools.yang.data.api.MutableSimpleNode;
21 import org.opendaylight.yangtools.yang.data.api.Node;
22 import org.opendaylight.yangtools.yang.data.api.SimpleNode;
23 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26 import org.w3c.dom.Document;
29 * @author michal.rehak
32 public class NodeModificationBuilderImplTest {
34 private static final Logger LOG = LoggerFactory.getLogger(NodeModificationBuilderImplTest.class);
36 private SchemaContext schemaCtx;
38 private CompositeNode network;
39 private NodeModificationBuilderImpl nodeModificationBuilder;
46 private void dumpResult() throws Exception {
47 CompositeNode diffTree = nodeModificationBuilder.buildDiffTree();
48 CompositeNode diffTreeImmutable = NodeFactory.copyDeepAsImmutable(diffTree, null);
50 Document diffShadow = NodeUtils.buildShadowDomTree(diffTreeImmutable);
51 NodeHelper.dumpDoc(diffShadow, System.out);
55 * prepare schemaContext
60 public void setUp() throws Exception {
61 schemaCtx = NodeHelper.loadSchemaContext();
63 ns = "urn:opendaylight:controller:network";
64 qName = new QName(new URI(ns), new Date(1369000800000L), "topos");
65 network = NodeHelper.buildTestConfigTree(qName);
67 nodeModificationBuilder = new NodeModificationBuilderImpl(schemaCtx);
72 * {@link org.opendaylight.yangtools.yang.data.impl.NodeModificationBuilderImpl#getMutableEquivalent(org.opendaylight.yangtools.yang.data.api.Node)}
76 public void testGetMutableEquivalent() {
77 MutableCompositeNode rootMutable = (MutableCompositeNode) nodeModificationBuilder.getMutableEquivalent(network);
79 CompositeNode topologies = network.getCompositesByName("topologies").iterator().next();
80 Node<?> mutableEquivalent = nodeModificationBuilder.getMutableEquivalent(topologies);
81 CompositeNode topologiesMutable = rootMutable.getCompositesByName("topologies").iterator().next();
83 Assert.assertSame(topologiesMutable, mutableEquivalent);
88 * {@link org.opendaylight.yangtools.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
94 public void testBuildDiffTreeAddSimple() throws Exception {
95 LOG.debug("testBuildDiffTreeAddSimple");
96 Document networkShadow = NodeUtils.buildShadowDomTree(network);
97 CompositeNode needle = NodeUtils.findNodeByXpath(networkShadow,
98 NodeHelper.AddNamespaceToPattern("//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]", ns));
100 MutableCompositeNode mutableParent = (MutableCompositeNode) nodeModificationBuilder
101 .getMutableEquivalent(needle);
103 MutableSimpleNode<String> newMutable = NodeFactory.createMutableSimpleNode(new QName(needle.getNodeType(),
104 "anySubNode"), mutableParent, "42", null, null);
106 nodeModificationBuilder.addNode(newMutable);
112 * {@link org.opendaylight.yangtools.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
118 public void testBuildDiffTreeAddComposite() throws Exception {
119 LOG.debug("testBuildDiffTreeAddComposite");
120 Document networkShadow = NodeUtils.buildShadowDomTree(network);
121 CompositeNode needle = NodeUtils.findNodeByXpath(networkShadow,
122 NodeHelper.AddNamespaceToPattern("//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]", ns));
124 MutableCompositeNode mutableParent = (MutableCompositeNode) nodeModificationBuilder
125 .getMutableEquivalent(needle);
127 MutableSimpleNode<String> newMutable = NodeFactory.createMutableSimpleNode(new QName(needle.getNodeType(),
128 "anySubNode"), null, "42", null, null);
130 MutableCompositeNode newMutableCom = NodeFactory.createMutableCompositeNode(new QName(needle.getNodeType(),
131 "anySubNode"), mutableParent, NodeUtils.buildChildrenList(newMutable), null, null);
132 NodeUtils.fixChildrenRelation(newMutableCom);
133 newMutableCom.init();
135 nodeModificationBuilder.addNode(newMutableCom);
141 * {@link org.opendaylight.yangtools.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
147 public void testBuildDiffTreeDeleteComposite() throws Exception {
148 LOG.debug("testBuildDiffTreeDeleteComposite");
149 Document networkShadow = NodeUtils.buildShadowDomTree(network);
150 SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, NodeHelper.AddNamespaceToPattern(
151 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));
153 @SuppressWarnings("unchecked")
154 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) nodeModificationBuilder
155 .getMutableEquivalent(needle);
157 nodeModificationBuilder.deleteNode(mutableNeedle.getParent().asMutable());
163 * {@link org.opendaylight.yangtools.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
169 public void testBuildDiffTreeDeleteSimple() throws Exception {
170 LOG.debug("testBuildDiffTreeDeleteSimple");
171 Document networkShadow = NodeUtils.buildShadowDomTree(network);
172 SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, NodeHelper.AddNamespaceToPattern(
173 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));
175 @SuppressWarnings("unchecked")
176 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) nodeModificationBuilder
177 .getMutableEquivalent(needle);
179 nodeModificationBuilder.deleteNode(mutableNeedle);
185 * {@link org.opendaylight.yangtools.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
191 public void testBuildDiffTreeMerge() throws Exception {
192 LOG.debug("testBuildDiffTreeMerge");
193 Document networkShadow = NodeUtils.buildShadowDomTree(network);
194 SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, NodeHelper.AddNamespaceToPattern(
195 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));
197 @SuppressWarnings("unchecked")
198 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) nodeModificationBuilder
199 .getMutableEquivalent(needle);
201 mutableNeedle.setValue("tpId_18x");
202 nodeModificationBuilder.mergeNode(mutableNeedle.getParent().asMutable());
208 * {@link org.opendaylight.yangtools.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
214 public void testBuildDiffTreeRemoveComposite() throws Exception {
215 LOG.debug("testBuildDiffTreeRemoveComposite");
216 Document networkShadow = NodeUtils.buildShadowDomTree(network);
217 SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, NodeHelper.AddNamespaceToPattern(
218 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));
220 @SuppressWarnings("unchecked")
221 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) nodeModificationBuilder
222 .getMutableEquivalent(needle);
224 nodeModificationBuilder.removeNode(mutableNeedle.getParent().asMutable());
230 * {@link org.opendaylight.yangtools.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
236 public void testBuildDiffTreeRemoveSimple() throws Exception {
237 LOG.debug("testBuildDiffTreeRemoveSimple");
238 Document networkShadow = NodeUtils.buildShadowDomTree(network);
239 SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, NodeHelper.AddNamespaceToPattern(
240 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));
242 @SuppressWarnings("unchecked")
243 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) nodeModificationBuilder
244 .getMutableEquivalent(needle);
246 nodeModificationBuilder.removeNode(mutableNeedle);
252 * {@link org.opendaylight.yangtools.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
258 public void testBuildDiffTreeReplaceComposite() throws Exception {
259 LOG.debug("testBuildDiffTreeReplaceComposite");
260 Document networkShadow = NodeUtils.buildShadowDomTree(network);
261 SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, NodeHelper.AddNamespaceToPattern(
262 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));
264 @SuppressWarnings("unchecked")
265 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) nodeModificationBuilder
266 .getMutableEquivalent(needle);
268 mutableNeedle.setValue("tpId_18x");
269 nodeModificationBuilder.replaceNode(mutableNeedle.getParent().asMutable());
275 * {@link org.opendaylight.yangtools.yang.data.impl.NodeModificationBuilderImpl#buildDiffTree()}
281 public void testBuildDiffTreeReplaceSimple() throws Exception {
282 LOG.debug("testBuildDiffTreeReplaceSimple");
283 Document networkShadow = NodeUtils.buildShadowDomTree(network);
284 SimpleNode<?> needle = NodeUtils.findNodeByXpath(networkShadow, NodeHelper.AddNamespaceToPattern(
285 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));
287 @SuppressWarnings("unchecked")
288 MutableSimpleNode<String> mutableNeedle = (MutableSimpleNode<String>) nodeModificationBuilder
289 .getMutableEquivalent(needle);
291 mutableNeedle.setValue("tpId_18x");
292 nodeModificationBuilder.replaceNode(mutableNeedle);