first implementation of yang-data-api
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-data-impl / src / test / java / org / opendaylight / controller / yang / data / impl / NodeFactoryTest.java
diff --git a/opendaylight/sal/yang-prototype/yang/yang-data-impl/src/test/java/org/opendaylight/controller/yang/data/impl/NodeFactoryTest.java b/opendaylight/sal/yang-prototype/yang/yang-data-impl/src/test/java/org/opendaylight/controller/yang/data/impl/NodeFactoryTest.java
new file mode 100755 (executable)
index 0000000..3d97cc8
--- /dev/null
@@ -0,0 +1,147 @@
+/*\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.ByteArrayOutputStream;\r
+import java.io.PrintStream;\r
+import java.net.URI;\r
+import java.util.ArrayList;\r
+import java.util.Date;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.junit.Assert;\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.ModifyAction;\r
+import org.opendaylight.controller.yang.data.api.MutableCompositeNode;\r
+import org.opendaylight.controller.yang.data.api.Node;\r
+import org.opendaylight.controller.yang.data.api.NodeModification;\r
+import org.w3c.dom.Document;\r
+\r
+/**\r
+ * @author michal.rehak\r
+ * \r
+ */\r
+public class NodeFactoryTest {\r
+\r
+    /**\r
+     * Test method for methods creating immutable nodes in\r
+     * {@link org.opendaylight.controller.yang.data.impl.NodeFactory}.\r
+     * @throws Exception \r
+     */\r
+    @Test\r
+    public void testImmutableNodes() throws Exception {\r
+        QName qName = new QName(\r
+                new URI("urn:opendaylight:controller:network"), \r
+                new Date(42), "yang-data-impl-immutableTest_", null);\r
+        \r
+        CompositeNode network = NodeHelper.buildTestConfigTree(qName);\r
+        \r
+        \r
+        Assert.assertEquals(1, network.getChildren().size());\r
+        Document domTree = NodeUtils.buildShadowDomTree(network);\r
+        NodeHelper.dumpDoc(domTree, System.out);\r
+        \r
+        CompositeNode tpList = NodeUtils.findNodeByXpath(domTree, \r
+                "//node[node-id/text()='nodeId_19']/termination-points");\r
+        \r
+        \r
+        Assert.assertEquals(2, tpList.getCompositesByName("termination-point").size());\r
+//        Assert.assertEquals(1, topologies.getCompositesByName("topology").size());\r
+//        Assert.assertEquals(2, destination.getChildren().size());\r
+    }\r
+\r
+    /**\r
+     * Test method for methods creating immutable nodes in\r
+     * {@link org.opendaylight.controller.yang.data.impl.NodeFactory}.\r
+     * @throws Exception \r
+     */\r
+    @Test\r
+    public void testMutableNodes() throws Exception {\r
+        // <config>\r
+        //   <top xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\r
+        //     <interface xc:operation="delete">\r
+        //       <name>Ethernet0/0</name>\r
+        //       <mtu>1500</mtu>\r
+        //     </interface>\r
+        //     <interface>\r
+        //       <name>Ethernet0/1</name>\r
+        //       <mtu>1501</mtu>\r
+        //     </interface>\r
+        //   </top>\r
+        // </config>\r
+        \r
+        QName qName = new QName(\r
+                new URI("urn:ietf:params:xml:ns:netconf:base:1.0"), \r
+                new Date(42), "yang-data-impl-mutableTest");\r
+        \r
+        List<Node<?>> value = new ArrayList<Node<?>>(); \r
+        value.add(NodeFactory.createSimpleNode(new QName(qName, "name"), null, "Ethernet0/0"));\r
+        value.add(NodeFactory.createSimpleNode(new QName(qName, "mtu"), null, 1500));\r
+        \r
+        CompositeNodeModificationTOImpl ifNode = NodeFactory.createCompositeNodeModification(\r
+                new QName(qName, "interface"), null, value, ModifyAction.DELETE);\r
+        NodeHelper.assignParentToChildren(ifNode);\r
+        \r
+        value = new ArrayList<Node<?>>(); \r
+        value.add(NodeFactory.createSimpleNode(new QName(qName, "name"), null, "Ethernet1/0"));\r
+        value.add(NodeFactory.createSimpleNode(new QName(qName, "mtu"), null, 1501));\r
+        \r
+        CompositeNode ifNode2 = NodeFactory.createCompositeNode(new QName(qName, "interface"), null, value);\r
+        NodeHelper.assignParentToChildren(ifNode2);\r
+\r
+        value = new ArrayList<Node<?>>(); \r
+        value.add(ifNode);\r
+        value.add(ifNode2);\r
+        \r
+        CompositeNode topNode = NodeFactory.createCompositeNode(new QName(qName, "top"), null, value);\r
+        NodeHelper.assignParentToChildren(topNode);\r
+        value = new ArrayList<Node<?>>(); \r
+        value.add(topNode);\r
+        \r
+        CompositeNode root = NodeFactory.createCompositeNode(new QName(qName, "config"), null, value);\r
+        \r
+        \r
+        Assert.assertEquals(1, root.getChildren().size());\r
+        Assert.assertEquals(1, ifNode.getSimpleNodesByName("name").size());\r
+        Assert.assertEquals(1, ifNode.getSimpleNodesByName("mtu").size());\r
+        Assert.assertEquals(2, topNode.getCompositesByName("interface").size());\r
+        NodeModification interfaceMod = (NodeModification) \r
+                topNode.getCompositesByName("interface").get(0);\r
+        Assert.assertEquals(ModifyAction.DELETE, interfaceMod.getModificationAction());\r
+    }\r
+\r
+    /**\r
+     * test modifications builder\r
+     * @throws Exception \r
+     */\r
+    @Test\r
+    public void testCopyDeepNode() throws Exception {\r
+        QName qName = new QName(\r
+                new URI("urn:opendaylight:controller:network"), \r
+                new Date(42), "yang-data-impl-immutableTest_", null);\r
+        \r
+        CompositeNode network = NodeHelper.buildTestConfigTree(qName);\r
+        Map<Node<?>, Node<?>> mutableToOrig = new HashMap<>();\r
+        MutableCompositeNode mutableNetwork = NodeFactory.copyDeepNode(network, mutableToOrig );\r
+\r
+        Document networkShadow = NodeUtils.buildShadowDomTree(network);\r
+        ByteArrayOutputStream expected = new ByteArrayOutputStream();\r
+        NodeHelper.dumpDoc(networkShadow, new PrintStream(expected));\r
+        \r
+        Document mutableNetworkShadow = NodeUtils.buildShadowDomTree(mutableNetwork);\r
+        ByteArrayOutputStream actual = new ByteArrayOutputStream();\r
+        NodeHelper.dumpDoc(mutableNetworkShadow, new PrintStream(actual));\r
+        \r
+        Assert.assertEquals(new String(expected.toByteArray()), new String(actual.toByteArray()));\r
+    }\r
+\r
+}\r