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.controller.yang.data.impl;
\r
10 import java.io.IOException;
\r
11 import java.net.URI;
\r
12 import java.util.Date;
\r
13 import java.util.List;
\r
14 import java.util.Map;
\r
15 import java.util.Stack;
\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.Node;
\r
23 import org.opendaylight.controller.yang.data.api.SimpleNode;
\r
24 import org.opendaylight.controller.yang.model.api.ListSchemaNode;
\r
25 import org.opendaylight.controller.yang.model.api.SchemaContext;
\r
26 import org.slf4j.Logger;
\r
27 import org.slf4j.LoggerFactory;
\r
28 import org.w3c.dom.Document;
\r
31 * @author michal.rehak
\r
34 public class NodeUtilsTest {
\r
36 private static final Logger LOG = LoggerFactory
\r
37 .getLogger(NodeUtilsTest.class);
\r
39 private QName qName;
\r
40 private CompositeNode network;
\r
49 public void setUp() throws Exception {
\r
50 ns = "urn:ietf:params:xml:ns:netconf:base:1.0";
\r
53 new Date(42), "yang-data-impl-mutableTest");
\r
54 network = NodeHelper.buildTestConfigTree(qName);
\r
58 * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildPath(org.opendaylight.controller.yang.data.api.Node)}.
\r
59 * @throws Exception
\r
62 public void testBuildPath() throws Exception {
\r
63 SimpleNode<?> needle = network.getCompositesByName("topologies").iterator().next()
\r
64 .getCompositesByName("topology").iterator().next()
\r
65 .getSimpleNodesByName("topology-id").iterator().next();
\r
66 String breadCrumbs = NodeUtils.buildPath(needle);
\r
68 Assert.assertEquals("network.topologies.topology.topology-id", breadCrumbs);
\r
72 * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildShadowDomTree(org.opendaylight.controller.yang.data.api.CompositeNode)}.
\r
73 * @throws Exception
\r
76 public void testBuildShadowDomTree() throws Exception {
\r
77 MemoryConsumption mc = new MemoryConsumption();
\r
78 mc.startObserving();
\r
80 Document networkShadow = NodeUtils.buildShadowDomTree(network);
\r
82 LOG.debug("After dom built: "+mc.finishObserving());
\r
83 NodeHelper.compareXmlTree(networkShadow, "./config02-shadow.xml", getClass());
\r
87 * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#findNodeByXpath(org.w3c.dom.Document, java.lang.String)}.
\r
88 * @throws Exception
\r
91 public void testFindNodeByXpath() throws Exception {
\r
92 Document networkShadow = NodeUtils.buildShadowDomTree(network);
\r
93 MemoryConsumption mc = new MemoryConsumption();
\r
94 mc.startObserving();
\r
96 SimpleNode<String> needle = NodeUtils.findNodeByXpath(networkShadow,
\r
97 NodeHelper.AddNamespaceToPattern(
\r
98 "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));
\r
100 LOG.debug("After xpath executed: "+mc.finishObserving());
\r
102 Assert.assertNotNull(needle);
\r
103 Assert.assertEquals("tpId_18", needle.getValue());
\r
107 * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildNodeMap(java.util.List)}.
\r
110 public void testBuildNodeMap() {
\r
111 CompositeNode topology = network.getCompositesByName("topologies").iterator().next()
\r
112 .getCompositesByName("topology").iterator().next();
\r
114 Map<QName, List<Node<?>>> nodeMap = NodeUtils.buildNodeMap(topology.getChildren());
\r
115 Assert.assertEquals(3, nodeMap.size());
\r
119 * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildMapOfListNodes(org.opendaylight.controller.yang.model.api.SchemaContext)}.
\r
122 public void testBuildMapOfListNodes() {
\r
123 SchemaContext schemaCtx = NodeHelper.loadSchemaContext();
\r
124 Map<String, ListSchemaNode> mapOfLists = NodeUtils.buildMapOfListNodes(schemaCtx);
\r
125 Assert.assertEquals(5, mapOfLists.size());
\r
129 * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildMapOfListNodes(org.opendaylight.controller.yang.model.api.SchemaContext)}.
\r
130 * @throws Exception
\r
131 * @throws IOException
\r
134 public void testLoadConfigByGroovy() throws IOException, Exception {
\r
135 CompositeNode treeRoot = NodeHelper.loadConfigByGroovy("./config02.groovy");
\r
136 Document shadowTree = NodeUtils.buildShadowDomTree(treeRoot);
\r
138 checkFamilyBinding(treeRoot);
\r
139 } catch (Exception e) {
\r
140 LOG.error(e.getMessage());
\r
144 NodeHelper.compareXmlTree(shadowTree, "./config02g-shadow.xml", getClass());
\r
147 private static void checkFamilyBinding(CompositeNode treeRoot) throws Exception {
\r
148 Stack<CompositeNode> jobQueue = new Stack<>();
\r
149 jobQueue.push(treeRoot);
\r
151 while (!jobQueue.isEmpty()) {
\r
152 CompositeNode job = jobQueue.pop();
\r
153 for (Node<?> child : job.getChildren()) {
\r
154 if (child instanceof CompositeNode) {
\r
155 jobQueue.push((CompositeNode) child);
\r
158 if (job != child.getParent()) {
\r
159 throw new Exception("binding mismatch occured: \nPARENT["+job+"]\n CHILD[" + child+"]\n +-> "+child.getParent());
\r