+++ /dev/null
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.yang.data.impl;\r
-\r
-import java.io.IOException;\r
-import java.net.URI;\r
-import java.util.Date;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Stack;\r
-\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-import org.opendaylight.controller.yang.common.QName;\r
-import org.opendaylight.controller.yang.data.api.CompositeNode;\r
-import org.opendaylight.controller.yang.data.api.Node;\r
-import org.opendaylight.controller.yang.data.api.SimpleNode;\r
-import org.opendaylight.controller.yang.model.api.ListSchemaNode;\r
-import org.opendaylight.controller.yang.model.api.SchemaContext;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-import org.w3c.dom.Document;\r
-\r
-/**\r
- * @author michal.rehak\r
- *\r
- */\r
-public class NodeUtilsTest {\r
- \r
- private static final Logger LOG = LoggerFactory\r
- .getLogger(NodeUtilsTest.class);\r
- \r
- private QName qName;\r
- private CompositeNode network;\r
-\r
- private String ns;\r
-\r
-\r
- /**\r
- * @throws Exception\r
- */\r
- @Before\r
- public void setUp() throws Exception {\r
- ns = "urn:ietf:params:xml:ns:netconf:base:1.0";\r
- qName = new QName(\r
- new URI(ns), \r
- new Date(42), "yang-data-impl-mutableTest");\r
- network = NodeHelper.buildTestConfigTree(qName);\r
- }\r
-\r
- /**\r
- * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildPath(org.opendaylight.controller.yang.data.api.Node)}.\r
- * @throws Exception \r
- */\r
- @Test\r
- public void testBuildPath() throws Exception {\r
- SimpleNode<?> needle = network.getCompositesByName("topologies").iterator().next()\r
- .getCompositesByName("topology").iterator().next()\r
- .getSimpleNodesByName("topology-id").iterator().next();\r
- String breadCrumbs = NodeUtils.buildPath(needle);\r
- \r
- Assert.assertEquals("network.topologies.topology.topology-id", breadCrumbs);\r
- }\r
-\r
- /**\r
- * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildShadowDomTree(org.opendaylight.controller.yang.data.api.CompositeNode)}.\r
- * @throws Exception \r
- */\r
- @Test\r
- public void testBuildShadowDomTree() throws Exception {\r
- MemoryConsumption mc = new MemoryConsumption();\r
- mc.startObserving();\r
- \r
- Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
- \r
- LOG.debug("After dom built: "+mc.finishObserving());\r
- NodeHelper.compareXmlTree(networkShadow, "./config02-shadow.xml", getClass());\r
- }\r
-\r
- /**\r
- * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#findNodeByXpath(org.w3c.dom.Document, java.lang.String)}.\r
- * @throws Exception \r
- */\r
- @Test\r
- public void testFindNodeByXpath() throws Exception {\r
- Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
- MemoryConsumption mc = new MemoryConsumption();\r
- mc.startObserving();\r
- \r
- SimpleNode<String> needle = NodeUtils.findNodeByXpath(networkShadow, \r
- NodeHelper.AddNamespaceToPattern(\r
- "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns));\r
- \r
- LOG.debug("After xpath executed: "+mc.finishObserving());\r
- \r
- Assert.assertNotNull(needle);\r
- Assert.assertEquals("tpId_18", needle.getValue());\r
- }\r
- \r
- /**\r
- * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildNodeMap(java.util.List)}.\r
- */\r
- @Test\r
- public void testBuildNodeMap() {\r
- CompositeNode topology = network.getCompositesByName("topologies").iterator().next()\r
- .getCompositesByName("topology").iterator().next();\r
- \r
- Map<QName, List<Node<?>>> nodeMap = NodeUtils.buildNodeMap(topology.getChildren());\r
- Assert.assertEquals(3, nodeMap.size());\r
- }\r
- \r
- /**\r
- * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildMapOfListNodes(org.opendaylight.controller.yang.model.api.SchemaContext)}.\r
- */\r
- @Test\r
- public void testBuildMapOfListNodes() {\r
- SchemaContext schemaCtx = NodeHelper.loadSchemaContext();\r
- Map<String, ListSchemaNode> mapOfLists = NodeUtils.buildMapOfListNodes(schemaCtx);\r
- Assert.assertEquals(5, mapOfLists.size());\r
- }\r
-\r
- /**\r
- * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildMapOfListNodes(org.opendaylight.controller.yang.model.api.SchemaContext)}.\r
- * @throws Exception \r
- * @throws IOException \r
- */\r
- @Test\r
- public void testLoadConfigByGroovy() throws IOException, Exception {\r
- CompositeNode treeRoot = NodeHelper.loadConfigByGroovy("./config02.groovy");\r
- Document shadowTree = NodeUtils.buildShadowDomTree(treeRoot);\r
- try {\r
- checkFamilyBinding(treeRoot);\r
- } catch (Exception e) {\r
- LOG.error(e.getMessage());\r
- throw e;\r
- }\r
- \r
- NodeHelper.compareXmlTree(shadowTree, "./config02g-shadow.xml", getClass());\r
- }\r
-\r
- private static void checkFamilyBinding(CompositeNode treeRoot) throws Exception {\r
- Stack<CompositeNode> jobQueue = new Stack<>();\r
- jobQueue.push(treeRoot);\r
- \r
- while (!jobQueue.isEmpty()) {\r
- CompositeNode job = jobQueue.pop();\r
- for (Node<?> child : job.getChildren()) {\r
- if (child instanceof CompositeNode) {\r
- jobQueue.push((CompositeNode) child);\r
- }\r
- \r
- if (job != child.getParent()) {\r
- throw new Exception("binding mismatch occured: \nPARENT["+job+"]\n CHILD[" + child+"]\n +-> "+child.getParent());\r
- }\r
- }\r
- }\r
- }\r
- \r
-}\r