X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fyang%2Fyang-data-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fdata%2Fimpl%2FNodeUtilsTest.java;h=16d736a35fb6073564a4828df3c23763fcde2a78;hp=53ffc2ea0befcde78208461fa5831ef0bcebdf09;hb=39b426fb075e8690911802f70aceb865cc83715d;hpb=9d0e5ef647eb242f7750e30482b403676f56c682 diff --git a/opendaylight/sal/yang-prototype/yang/yang-data-impl/src/test/java/org/opendaylight/controller/yang/data/impl/NodeUtilsTest.java b/opendaylight/sal/yang-prototype/yang/yang-data-impl/src/test/java/org/opendaylight/controller/yang/data/impl/NodeUtilsTest.java old mode 100755 new mode 100644 index 53ffc2ea0b..16d736a35f --- a/opendaylight/sal/yang-prototype/yang/yang-data-impl/src/test/java/org/opendaylight/controller/yang/data/impl/NodeUtilsTest.java +++ b/opendaylight/sal/yang-prototype/yang/yang-data-impl/src/test/java/org/opendaylight/controller/yang/data/impl/NodeUtilsTest.java @@ -1,110 +1,165 @@ -/* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.controller.yang.data.impl; - -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.net.URI; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.yang.common.QName; -import org.opendaylight.controller.yang.data.api.CompositeNode; -import org.opendaylight.controller.yang.data.api.Node; -import org.opendaylight.controller.yang.data.api.SimpleNode; -import org.opendaylight.controller.yang.model.api.ListSchemaNode; -import org.opendaylight.controller.yang.model.api.SchemaContext; -import org.w3c.dom.Document; - -/** - * @author michal.rehak - * - */ -public class NodeUtilsTest { - - private QName qName; - private CompositeNode network; - - /** - * @throws Exception - */ - @Before - public void setUp() throws Exception { - qName = new QName( - new URI("urn:ietf:params:xml:ns:netconf:base:1.0"), - new Date(42), "yang-data-impl-mutableTest"); - network = NodeHelper.buildTestConfigTree(qName); - } - - /** - * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildPath(org.opendaylight.controller.yang.data.api.Node)}. - * @throws Exception - */ - @Test - public void testBuildPath() throws Exception { - SimpleNode needle = network.getCompositesByName("topologies").iterator().next() - .getCompositesByName("topology").iterator().next() - .getSimpleNodesByName("topology-id").iterator().next(); - String breadCrumbs = NodeUtils.buildPath(needle); - - Assert.assertEquals("network.topologies.topology.topology-id", breadCrumbs); - } - - /** - * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildShadowDomTree(org.opendaylight.controller.yang.data.api.CompositeNode)}. - * @throws Exception - */ - @Test - public void testBuildShadowDomTree() throws Exception { - Document networkShadow = NodeUtils.buildShadowDomTree(network); - ByteArrayOutputStream actual = new ByteArrayOutputStream(); - NodeHelper.dumpDoc(networkShadow, new PrintStream(actual)); - - Assert.assertEquals(2760, new String(actual.toByteArray()).length()); - } - - /** - * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#findNodeByXpath(org.w3c.dom.Document, java.lang.String)}. - * @throws Exception - */ - @Test - public void testFindNodeByXpath() throws Exception { - Document networkShadow = NodeUtils.buildShadowDomTree(network); - SimpleNode needle = NodeUtils.findNodeByXpath(networkShadow, - "//node[node-id='nodeId_19']//termination-point[2]/tp-id"); - Assert.assertNotNull(needle); - Assert.assertEquals("tpId_18", needle.getValue()); - } - - /** - * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildNodeMap(java.util.List)}. - */ - @Test - public void testBuildNodeMap() { - CompositeNode topology = network.getCompositesByName("topologies").iterator().next() - .getCompositesByName("topology").iterator().next(); - - Map>> nodeMap = NodeUtils.buildNodeMap(topology.getChildren()); - Assert.assertEquals(3, nodeMap.size()); - } - - /** - * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildMapOfListNodes(org.opendaylight.controller.yang.model.api.SchemaContext)}. - */ - @Test - public void testBuildMapOfListNodes() { - SchemaContext schemaCtx = NodeHelper.loadSchemaContext(); - Map mapOfLists = NodeUtils.buildMapOfListNodes(schemaCtx); - Assert.assertEquals(5, mapOfLists.size()); - } - -} +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.yang.data.impl; + +import java.io.IOException; +import java.net.URI; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Stack; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.yang.common.QName; +import org.opendaylight.controller.yang.data.api.CompositeNode; +import org.opendaylight.controller.yang.data.api.Node; +import org.opendaylight.controller.yang.data.api.SimpleNode; +import org.opendaylight.controller.yang.model.api.ListSchemaNode; +import org.opendaylight.controller.yang.model.api.SchemaContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; + +/** + * @author michal.rehak + * + */ +public class NodeUtilsTest { + + private static final Logger LOG = LoggerFactory + .getLogger(NodeUtilsTest.class); + + private QName qName; + private CompositeNode network; + + private String ns; + + + /** + * @throws Exception + */ + @Before + public void setUp() throws Exception { + ns = "urn:ietf:params:xml:ns:netconf:base:1.0"; + qName = new QName( + new URI(ns), + new Date(42), "yang-data-impl-mutableTest"); + network = NodeHelper.buildTestConfigTree(qName); + } + + /** + * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildPath(org.opendaylight.controller.yang.data.api.Node)}. + * @throws Exception + */ + @Test + public void testBuildPath() throws Exception { + SimpleNode needle = network.getCompositesByName("topologies").iterator().next() + .getCompositesByName("topology").iterator().next() + .getSimpleNodesByName("topology-id").iterator().next(); + String breadCrumbs = NodeUtils.buildPath(needle); + + Assert.assertEquals("network.topologies.topology.topology-id", breadCrumbs); + } + + /** + * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildShadowDomTree(org.opendaylight.controller.yang.data.api.CompositeNode)}. + * @throws Exception + */ + @Test + public void testBuildShadowDomTree() throws Exception { + MemoryConsumption mc = new MemoryConsumption(); + mc.startObserving(); + + Document networkShadow = NodeUtils.buildShadowDomTree(network); + + LOG.debug("After dom built: "+mc.finishObserving()); + NodeHelper.compareXmlTree(networkShadow, "./config02-shadow.xml", getClass()); + } + + /** + * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#findNodeByXpath(org.w3c.dom.Document, java.lang.String)}. + * @throws Exception + */ + @Test + public void testFindNodeByXpath() throws Exception { + Document networkShadow = NodeUtils.buildShadowDomTree(network); + MemoryConsumption mc = new MemoryConsumption(); + mc.startObserving(); + + SimpleNode needle = NodeUtils.findNodeByXpath(networkShadow, + NodeHelper.AddNamespaceToPattern( + "//{0}node[{0}node-id='nodeId_19']//{0}termination-point[2]/{0}tp-id", ns)); + + LOG.debug("After xpath executed: "+mc.finishObserving()); + + Assert.assertNotNull(needle); + Assert.assertEquals("tpId_18", needle.getValue()); + } + + /** + * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildNodeMap(java.util.List)}. + */ + @Test + public void testBuildNodeMap() { + CompositeNode topology = network.getCompositesByName("topologies").iterator().next() + .getCompositesByName("topology").iterator().next(); + + Map>> nodeMap = NodeUtils.buildNodeMap(topology.getChildren()); + Assert.assertEquals(3, nodeMap.size()); + } + + /** + * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildMapOfListNodes(org.opendaylight.controller.yang.model.api.SchemaContext)}. + */ + @Test + public void testBuildMapOfListNodes() { + SchemaContext schemaCtx = NodeHelper.loadSchemaContext(); + Map mapOfLists = NodeUtils.buildMapOfListNodes(schemaCtx); + Assert.assertEquals(5, mapOfLists.size()); + } + + /** + * Test method for {@link org.opendaylight.controller.yang.data.impl.NodeUtils#buildMapOfListNodes(org.opendaylight.controller.yang.model.api.SchemaContext)}. + * @throws Exception + * @throws IOException + */ + @Test + public void testLoadConfigByGroovy() throws IOException, Exception { + CompositeNode treeRoot = NodeHelper.loadConfigByGroovy("./config02.groovy"); + Document shadowTree = NodeUtils.buildShadowDomTree(treeRoot); + try { + checkFamilyBinding(treeRoot); + } catch (Exception e) { + LOG.error(e.getMessage()); + throw e; + } + + NodeHelper.compareXmlTree(shadowTree, "./config02g-shadow.xml", getClass()); + } + + private static void checkFamilyBinding(CompositeNode treeRoot) throws Exception { + Stack jobQueue = new Stack<>(); + jobQueue.push(treeRoot); + + while (!jobQueue.isEmpty()) { + CompositeNode job = jobQueue.pop(); + for (Node child : job.getChildren()) { + if (child instanceof CompositeNode) { + jobQueue.push((CompositeNode) child); + } + + if (job != child.getParent()) { + throw new Exception("binding mismatch occured: \nPARENT["+job+"]\n CHILD[" + child+"]\n +-> "+child.getParent()); + } + } + } + } + +}