BUG-1472: deprecated CompositeNode and friends
[yangtools.git] / yang / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / impl / NodeUtilsTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.data.impl;
9
10 import java.io.IOException;
11 import java.net.URI;
12 import java.util.Date;
13 import java.util.Deque;
14 import java.util.LinkedList;
15 import java.util.List;
16 import java.util.Map;
17
18 import org.junit.Assert;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.opendaylight.yangtools.yang.common.QName;
22 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
23 import org.opendaylight.yangtools.yang.data.api.Node;
24 import org.opendaylight.yangtools.yang.data.api.SimpleNode;
25 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29 import org.w3c.dom.Document;
30
31 /**
32  * @author michal.rehak
33  *
34  */
35 @Deprecated
36 public class NodeUtilsTest {
37
38     private static final Logger LOG = LoggerFactory
39             .getLogger(NodeUtilsTest.class);
40
41     private QName qName;
42     private CompositeNode network;
43
44     private String ns;
45
46
47     /**
48      * @throws Exception
49      */
50     @Before
51     public void setUp() throws Exception {
52         ns = "urn:ietf:params:xml:ns:netconf:base:1.0";
53         qName = QName.create(
54                 new URI(ns),
55                 new Date(42), "yang-data-impl-mutableTest");
56         network = NodeHelper.buildTestConfigTree(qName);
57     }
58
59     /**
60      * Test method for {@link org.opendaylight.yangtools.yang.data.impl.NodeUtils#buildPath(org.opendaylight.yangtools.yang.data.api.Node)}.
61      * @throws Exception
62      */
63     @Test
64     public void testBuildPath() throws Exception {
65         SimpleNode<?> needle = network.getCompositesByName("topologies").iterator().next()
66                 .getCompositesByName("topology").iterator().next()
67                 .getSimpleNodesByName("topology-id").iterator().next();
68         String breadCrumbs = NodeUtils.buildPath(needle);
69
70         Assert.assertEquals("network.topologies.topology.topology-id", breadCrumbs);
71     }
72
73     /**
74      * Test method for {@link org.opendaylight.yangtools.yang.data.impl.NodeUtils#buildShadowDomTree(org.opendaylight.yangtools.yang.data.api.CompositeNode)}.
75      * @throws Exception
76      */
77     @Test
78     public void testBuildShadowDomTree() throws Exception {
79         MemoryConsumption mc = new MemoryConsumption();
80         mc.startObserving();
81
82         Document networkShadow = NodeUtils.buildShadowDomTree(network);
83
84         LOG.debug("After dom built: "+mc.finishObserving());
85         NodeHelper.compareXmlTree(networkShadow, "./config02-shadow.xml", getClass());
86     }
87
88     /**
89      * Test method for {@link org.opendaylight.yangtools.yang.data.impl.NodeUtils#findNodeByXpath(org.w3c.dom.Document, java.lang.String)}.
90      * @throws Exception
91      */
92     @Test
93     public void testFindNodeByXpath() throws Exception {
94         Document networkShadow = NodeUtils.buildShadowDomTree(network);
95         MemoryConsumption mc = new MemoryConsumption();
96         mc.startObserving();
97
98         SimpleNode<String> needle = NodeUtils.findNodeByXpath(networkShadow,
99                 NodeHelper.AddNamespaceToPattern(
100                         "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));
101
102         LOG.debug("After xpath executed: "+mc.finishObserving());
103
104         Assert.assertNotNull(needle);
105         Assert.assertEquals("tpId_18", needle.getValue());
106     }
107
108     /**
109      * Test method for {@link org.opendaylight.yangtools.yang.data.impl.NodeUtils#buildNodeMap(java.util.List)}.
110      */
111     @Test
112     public void testBuildNodeMap() {
113         CompositeNode topology = network.getCompositesByName("topologies").iterator().next()
114                 .getCompositesByName("topology").iterator().next();
115
116         Map<QName, List<Node<?>>> nodeMap = NodeUtils.buildNodeMap(topology.getValue());
117         Assert.assertEquals(3, nodeMap.size());
118     }
119
120     /**
121      * Test method for {@link org.opendaylight.yangtools.yang.data.impl.NodeUtils#buildMapOfListNodes(org.opendaylight.yangtools.yang.model.api.SchemaContext)}.
122      */
123     @Test
124     public void testBuildMapOfListNodes() {
125         SchemaContext schemaCtx = NodeHelper.loadSchemaContext();
126         Map<String, ListSchemaNode> mapOfLists = NodeUtils.buildMapOfListNodes(schemaCtx);
127         Assert.assertEquals(5, mapOfLists.size());
128     }
129
130     /**
131      * Test method for {@link org.opendaylight.yangtools.yang.data.impl.NodeUtils#buildMapOfListNodes(org.opendaylight.yangtools.yang.model.api.SchemaContext)}.
132      * @throws Exception
133      * @throws IOException
134      */
135     @Test
136     public void testLoadConfigByGroovy() throws IOException, Exception {
137         CompositeNode treeRoot = NodeHelper.loadConfigByGroovy("./config02.groovy");
138         Document shadowTree = NodeUtils.buildShadowDomTree(treeRoot);
139         try {
140             checkFamilyBinding(treeRoot);
141         } catch (Exception e) {
142             LOG.error(e.getMessage());
143             throw e;
144         }
145
146         NodeHelper.compareXmlTree(shadowTree, "./config02g-shadow.xml", getClass());
147     }
148
149     private static void checkFamilyBinding(final CompositeNode treeRoot) throws Exception {
150         Deque<CompositeNode> jobQueue = new LinkedList<>();
151         jobQueue.push(treeRoot);
152
153         while (!jobQueue.isEmpty()) {
154             CompositeNode job = jobQueue.pop();
155             for (Node<?> child : job.getValue()) {
156                 if (child instanceof CompositeNode) {
157                     jobQueue.push((CompositeNode) child);
158                 }
159
160                 if (job != child.getParent()) {
161                     throw new Exception("binding mismatch occured: \nPARENT["+job+"]\n CHILD[" + child+"]\n  +->  "+child.getParent());
162                 }
163             }
164         }
165     }
166
167 }