/* * 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.net.URI; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; 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.ModifyAction; import org.opendaylight.controller.yang.data.api.MutableCompositeNode; import org.opendaylight.controller.yang.data.api.Node; import org.opendaylight.controller.yang.data.api.NodeModification; import org.opendaylight.controller.yang.data.api.SimpleNode; import org.w3c.dom.Document; /** * @author michal.rehak * */ public class NodeFactoryTest { private QName qName; private CompositeNode network; private String ns; private Document networkShadow; /** * @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), null); network = NodeHelper.buildTestConfigTree(qName); networkShadow = NodeUtils.buildShadowDomTree(network); NodeHelper.compareXmlTree(networkShadow, "./config02-shadow.xml", getClass()); } /** * Test method for methods creating immutable nodes in * {@link org.opendaylight.controller.yang.data.impl.NodeFactory}. * @throws Exception */ @Test public void testImmutableNodes() throws Exception { Assert.assertEquals(2, network.getChildren().size()); CompositeNode tpList = NodeUtils.findNodeByXpath(networkShadow, NodeHelper.AddNamespaceToPattern( "//{0}node[{0}node-id/text()='nodeId_19']/{0}termination-points", ns)); Assert.assertEquals(2, tpList.getCompositesByName("termination-point").size()); } /** * Test method for methods creating immutable and mutable nodes: * {@link NodeFactory#createMutableCompositeNode(QName, CompositeNode, List, ModifyAction, CompositeNode)}, * {@link NodeFactory#createMutableSimpleNode(QName, CompositeNode, Object, ModifyAction, SimpleNode)} * @throws Exception */ @Test public void testMutableNodes() throws Exception { // // // // Ethernet0/0 // 1500 // // // Ethernet0/1 // 1501 // // // List> value = new ArrayList>(); value.add(NodeFactory.createImmutableSimpleNode(new QName(qName, "name"), null, "Ethernet0/0")); value.add(NodeFactory.createImmutableSimpleNode(new QName(qName, "mtu"), null, 1500)); MutableCompositeNode ifNode = NodeFactory.createMutableCompositeNode( new QName(qName, "interface"), null, value, ModifyAction.DELETE, null); ifNode.init(); NodeHelper.assignParentToChildren(ifNode); value = new ArrayList>(); value.add(NodeFactory.createImmutableSimpleNode(new QName(qName, "name"), null, "Ethernet1/0")); value.add(NodeFactory.createMutableSimpleNode(new QName(qName, "mtu"), null, 1501, ModifyAction.REMOVE, null)); CompositeNode ifNode2 = NodeFactory.createImmutableCompositeNode(new QName(qName, "interface"), null, value); NodeHelper.assignParentToChildren(ifNode2); value = new ArrayList>(); value.add(ifNode); value.add(ifNode2); CompositeNode topNode = NodeFactory.createImmutableCompositeNode(new QName(qName, "top"), null, value); NodeHelper.assignParentToChildren(topNode); value = new ArrayList>(); value.add(topNode); CompositeNode root = NodeFactory.createImmutableCompositeNode(new QName(qName, "config"), null, value); Document shadowConfig = NodeUtils.buildShadowDomTree(root); NodeHelper.compareXmlTree(shadowConfig, "./mutableNodesConfig.xml", getClass()); Assert.assertEquals(1, root.getChildren().size()); Assert.assertEquals(1, ifNode.getSimpleNodesByName("name").size()); Assert.assertEquals(1, ifNode.getSimpleNodesByName("mtu").size()); Assert.assertEquals(2, topNode.getCompositesByName("interface").size()); NodeModification interfaceMod = topNode.getCompositesByName("interface").get(0); Assert.assertEquals(ModifyAction.DELETE, interfaceMod.getModificationAction()); } /** * test of {@link NodeFactory#copyDeepAsMutable(CompositeNode, Map)} * @throws Exception */ @Test public void testCopyDeepAsMutable() throws Exception { Map, Node> mutableToOrig = new HashMap<>(); CompositeNode mutableNetwork = NodeFactory.copyDeepAsMutable(network, mutableToOrig); Document mutableNetworkShadow = NodeUtils.buildShadowDomTree(mutableNetwork); NodeHelper.compareXmlTree(mutableNetworkShadow, "./config02-shadow.xml", getClass()); CompositeNode immutableNetwork = NodeFactory.copyDeepAsImmutable(mutableNetwork, null); Assert.assertEquals(network, immutableNetwork); } /** * test of {@link NodeFactory#copyDeepAsImmutable(CompositeNode, Map)} * @throws Exception */ @Test public void testCopyDeepAsImmutable() throws Exception { Map, Node> mutableToOrig = new HashMap<>(); CompositeNode immutableNetwork = NodeFactory.copyDeepAsImmutable(network, mutableToOrig); Document mutableNetworkShadow = NodeUtils.buildShadowDomTree(immutableNetwork); NodeHelper.compareXmlTree(mutableNetworkShadow, "./config02-shadow.xml", getClass()); Assert.assertEquals(network, immutableNetwork); } }