added one nemo-impl test file 35/31635/1
authorsaomenmen <zhangmroy@163.com>
Sat, 19 Dec 2015 06:52:28 +0000 (14:52 +0800)
committersaomenmen <zhangmroy@163.com>
Sat, 19 Dec 2015 06:53:25 +0000 (14:53 +0800)
Change-Id: Ie4c55e760744f60b088800eb39778e947c13a4a9
Signed-off-by: saomenmen <zhangmroy@163.com>
nemo-renderers/openflow-renderer/src/test/java/org/opendaylight/nemo/renderer/openflow/physicalnetwork/PhysicalNetworkAdapterTest.java [new file with mode: 0644]

diff --git a/nemo-renderers/openflow-renderer/src/test/java/org/opendaylight/nemo/renderer/openflow/physicalnetwork/PhysicalNetworkAdapterTest.java b/nemo-renderers/openflow-renderer/src/test/java/org/opendaylight/nemo/renderer/openflow/physicalnetwork/PhysicalNetworkAdapterTest.java
new file mode 100644 (file)
index 0000000..a08a14e
--- /dev/null
@@ -0,0 +1,327 @@
+/*\r
+ * Copyright (c) 2015 Huawei, 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.nemo.renderer.openflow.physicalnetwork;\r
+\r
+import junit.framework.TestCase;\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import com.google.common.base.Optional;\r
+import com.google.common.util.concurrent.FutureCallback;\r
+import com.google.common.util.concurrent.Futures;\r
+import com.google.common.util.concurrent.ListenableFuture;\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;\r
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;\r
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;\r
+import org.opendaylight.nemo.renderer.openflow.FlowUtils;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLink;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLinkBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLinkKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.nodes.PhysicalNode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.nodes.PhysicalNodeBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.nodes.PhysicalNodeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.node.instance.PhysicalPort;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.node.instance.PhysicalPortBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.node.instance.PhysicalPortKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalLinkId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalNodeId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalPortId;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;\r
+import org.opendaylight.yangtools.concepts.ListenerRegistration;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.link.attributes.Source;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.link.attributes.Destination;\r
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
+import org.opendaylight.yangtools.yang.binding.NotificationListener;\r
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.LinkId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import com.google.common.util.concurrent.CheckedFuture;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.LinkKey;\r
+\r
+import java.lang.reflect.Field;\r
+import java.lang.reflect.Method;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Timer;\r
+import java.util.TimerTask;\r
+import java.util.concurrent.CopyOnWriteArraySet;\r
+import java.util.concurrent.CountDownLatch;\r
+import static org.junit.Assert.*;\r
+import static org.mockito.Mockito.*;\r
+/**\r
+ * Created by zhangmeng on 2015/12/17.\r
+ */\r
+public class PhysicalNetworkAdapterTest extends TestCase {\r
+    private DataBroker dataBroker;\r
+    private NotificationProviderService notificationProviderService;\r
+    private PhyConfigLoader phyConfigLoader;\r
+    private FlowUtils ofFlowUtils;\r
+    private PhysicalNetworkAdapter physicalNetworkAdapter;\r
+    private ListenerRegistration<NotificationListener> ofPacketInListenerReg;\r
+    private ListenerRegistration<DataChangeListener> ofNodesListenerReg;\r
+    private ListenerRegistration<DataChangeListener> ofLinksListenerReg;\r
+    @Before\r
+    public void setUp() throws Exception {\r
+        ofLinksListenerReg = mock(ListenerRegistration.class);\r
+        ofPacketInListenerReg = mock(ListenerRegistration.class);\r
+        ofNodesListenerReg = mock(ListenerRegistration.class);\r
+        dataBroker = mock(DataBroker.class);\r
+        notificationProviderService = mock(NotificationProviderService.class);\r
+        phyConfigLoader = mock(PhyConfigLoader.class);\r
+        ofFlowUtils = mock(FlowUtils.class);\r
+\r
+        CheckedFuture checkedFuture = mock(CheckedFuture.class);\r
+        ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);\r
+\r
+        when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);\r
+        when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))\r
+                .thenReturn(checkedFuture);\r
+        when(dataBroker.registerDataChangeListener(\r
+                any(LogicalDatastoreType.class),\r
+                any(InstanceIdentifier.class),\r
+                any(OFNodeListener.class),\r
+                any(DataChangeScope.class)))\r
+                .thenReturn(ofNodesListenerReg)\r
+                .thenReturn(ofLinksListenerReg);\r
+        when(notificationProviderService.registerNotificationListener(any(OFPacketInListener.class))).thenReturn(ofPacketInListenerReg);\r
+\r
+        physicalNetworkAdapter =  new PhysicalNetworkAdapter(dataBroker,\r
+                notificationProviderService,\r
+                phyConfigLoader,\r
+                ofFlowUtils);\r
+\r
+        verify(dataBroker,times(2)).newReadOnlyTransaction();\r
+        verify(readOnlyTransaction,times(2)).read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));\r
+        verify(dataBroker,times(2)).registerDataChangeListener(\r
+                any(LogicalDatastoreType.class),\r
+                any(InstanceIdentifier.class),\r
+                any(OFNodeListener.class),\r
+                any(DataChangeScope.class));\r
+    }\r
+\r
+    @Test\r
+    public void testClose() throws Exception {\r
+        physicalNetworkAdapter.close();\r
+    }\r
+\r
+    @Test\r
+    public void testGetPhyConfigLoader() throws Exception {\r
+        Assert.assertTrue(physicalNetworkAdapter.getPhyConfigLoader() == phyConfigLoader);\r
+    }\r
+\r
+    @Test\r
+    public void testOfNodeAdded() throws Exception {\r
+        Node node = mock(Node.class);\r
+        NodeKey nodeKey = mock(NodeKey.class);\r
+        NodeId nodeId = mock(NodeId.class);\r
+        NodeConnector nodeConnector = mock(NodeConnector.class);\r
+        List<NodeConnector> nodeConnectors = new ArrayList<NodeConnector>();\r
+        PhysicalNode physicalNode = mock(PhysicalNode.class);\r
+        WriteTransaction writeTransaction = mock(WriteTransaction.class);\r
+        CheckedFuture checkedFuture_write = mock(CheckedFuture.class);\r
+        NodeConnectorId nodeConnectorId = mock(NodeConnectorId.class);\r
+        NodeConnectorKey nodeConnectorKey = mock(NodeConnectorKey.class);\r
+        CheckedFuture checkedFuture_read = mock(CheckedFuture.class);\r
+        ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);\r
+\r
+        when(node.getKey()).thenReturn(nodeKey);\r
+        when(node.getId()).thenReturn(nodeId);\r
+        when(nodeId.getValue()).thenReturn(new String("test"));//strNodeId\r
+        when(node.getNodeConnector()).thenReturn(nodeConnectors);//size = 0\r
+        when(phyConfigLoader.getPhysicalNode(any(PhysicalNodeId.class)))\r
+                .thenReturn(null)\r
+                .thenReturn(physicalNode);\r
+        when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);\r
+        when(writeTransaction.submit()).thenReturn(checkedFuture_write);\r
+\r
+        physicalNetworkAdapter.ofNodeAdded(node);\r
+        physicalNetworkAdapter.ofNodeAdded(node);\r
+        verify(phyConfigLoader,times(2)).getPhysicalNode(any(PhysicalNodeId.class));\r
+        verify(writeTransaction,times(2)).submit();\r
+        verify(node,times(3)).getKey();\r
+        //test nodeConnectors not null\r
+        //get into method "getPhysicalPort" args(nodekey ,nodeConnector)\r
+        nodeConnectors.add(nodeConnector);\r
+        when(nodeConnector.getId()).thenReturn(nodeConnectorId);\r
+        when(nodeConnectorId.getValue())\r
+                .thenReturn(new String("LOCAL"))\r
+                .thenReturn(new String("test1"));\r
+        when(nodeConnector.getKey()).thenReturn(nodeConnectorKey);\r
+        physicalNetworkAdapter.ofNodeAdded(node);\r
+        verify(node,times(5)).getKey();\r
+        ////get into method "getOFPort" args(nodekey nodeConnectorKey )\r
+        when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);\r
+        when(readOnlyTransaction.read(any(LogicalDatastoreType.class),any(InstanceIdentifier.class))).thenReturn(checkedFuture_read);\r
+        //////get into method "getOFPortInstanceIdentifier" args(nodekey nodeConnectorKey )\r
+        //return to method "getPhysicalPort"\r
+\r
+//        physicalNetworkAdapter.ofNodeAdded(node);\r
+\r
+\r
+    }\r
+///////////////////////////// ////////////////////////////////////////////////\r
+    @Test\r
+    public void testOfNodeRemoved() throws Exception {\r
+        Class<PhysicalNetworkAdapter> class1 = PhysicalNetworkAdapter.class;\r
+        Method method = class1.getDeclaredMethod("ofNodeRemoved", new Class[]{Node.class});\r
+        method.setAccessible(true);\r
+\r
+        Node node = mock(Node.class);\r
+        NodeKey nodeKey = mock(NodeKey.class);\r
+        NodeId nodeId = mock(NodeId.class);\r
+        PhysicalNode physicalNode = mock(PhysicalNode.class);\r
+        WriteTransaction writeTransaction = mock(WriteTransaction.class);\r
+        CheckedFuture checkedFuture = mock(CheckedFuture.class);\r
+\r
+        when(node.getKey()).thenReturn(nodeKey);\r
+        when(node.getId()).thenReturn(nodeId);\r
+        when(nodeId.getValue()).thenReturn(new String("test"));\r
+        when(phyConfigLoader.getPhysicalNode(any(PhysicalNodeId.class)))\r
+                .thenReturn(null)\r
+                .thenReturn(physicalNode);\r
+        when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);\r
+        when(writeTransaction.submit()).thenReturn(checkedFuture);\r
+\r
+        physicalNetworkAdapter.ofNodeRemoved(node);\r
+        physicalNetworkAdapter.ofNodeRemoved(node);\r
+        verify(phyConfigLoader,times(2)).getPhysicalNode(any(PhysicalNodeId.class));\r
+        verify(writeTransaction,times(2)).submit();\r
+    }\r
+\r
+    @Test\r
+    public void testOfLinkAdded() throws Exception {\r
+        Class<PhysicalNetworkAdapter> class1 = PhysicalNetworkAdapter.class;\r
+        Field field = class1.getDeclaredField("running");\r
+        field.setAccessible(true);\r
+\r
+        Assert.assertTrue((Boolean) field.get(physicalNetworkAdapter) == false);\r
+\r
+        Link link = mock(Link.class);\r
+        LinkKey linkKey = mock(LinkKey.class);\r
+        LinkId linkId = mock(LinkId.class);\r
+        Source source = mock(Source.class);\r
+        Destination destination = mock(Destination.class);\r
+        org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId\r
+                nodeId = mock(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId.class);\r
+        TpId tpId = mock(TpId.class);\r
+        PhysicalLink physicalLink = mock(PhysicalLink.class);\r
+\r
+        when(link.getKey()).thenReturn(linkKey);\r
+        when(link.getLinkId()).thenReturn(linkId);\r
+        when(linkId.getValue()).thenReturn(new String("test"));//strLinkId\r
+\r
+        when(link.getSource()).thenReturn(source);\r
+        when(link.getDestination()).thenReturn(destination);\r
+        when(source.getSourceNode()).thenReturn(nodeId);\r
+        when(source.getSourceTp()).thenReturn(tpId);\r
+        when(destination.getDestNode()).thenReturn(nodeId);\r
+        when(destination.getDestTp()).thenReturn(tpId);\r
+        when(nodeId.getValue())\r
+                .thenReturn(new String("srcNode"))//srcNode\r
+                .thenReturn(new String("dstNode"));//dstNode\r
+        when(tpId.getValue())\r
+                .thenReturn(new String("srcTp"))//srcTp\r
+                .thenReturn(new String("dstTp"));//dstTp\r
+\r
+\r
+        when(phyConfigLoader.getPhysicalLink(any(PhysicalLinkId.class)))\r
+                .thenReturn(null)\r
+                .thenReturn(physicalLink);\r
+        when(physicalLink.getMetric()).thenReturn(1L);\r
+\r
+        physicalNetworkAdapter.ofLinkAdded(link);\r
+        Assert.assertTrue((Boolean)field.get(physicalNetworkAdapter) == true);\r
+        physicalNetworkAdapter.ofLinkAdded(link);\r
+        verify(physicalLink).getMetric();\r
+\r
+        physicalNetworkAdapter.close();\r
+    }\r
+\r
+    @Test\r
+    public void testOfLinkRemoved() throws Exception {\r
+        Class<PhysicalNetworkAdapter> class1 = PhysicalNetworkAdapter.class;\r
+        Method method = class1.getDeclaredMethod("ofLinkRemoved", new Class[]{Link.class});\r
+        method.setAccessible(true);\r
+\r
+        Link link = mock(Link.class);\r
+        LinkKey linkKey = mock(LinkKey.class);\r
+        LinkId linkId = mock(LinkId.class);\r
+        PhysicalLink physicalLink = mock(PhysicalLink.class);\r
+        WriteTransaction writeTransaction = mock(WriteTransaction.class);\r
+        InstanceIdentifier instanceIdentifier = mock(InstanceIdentifier.class);\r
+        CheckedFuture checkedFuture = mock(CheckedFuture.class);\r
+\r
+        when(link.getKey()).thenReturn(linkKey);\r
+        when(link.getLinkId()).thenReturn(linkId);\r
+        when(linkId.getValue()).thenReturn(new String("1"));\r
+        when(phyConfigLoader.getPhysicalLink(any(PhysicalLinkId.class)))\r
+                .thenReturn(null)\r
+                .thenReturn(physicalLink);\r
+        when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);\r
+        when(writeTransaction.submit()).thenReturn(checkedFuture);\r
+\r
+//        physicalNetworkAdapter.ofLinkRemoved(link);\r
+//        physicalNetworkAdapter.ofLinkRemoved(link);\r
+        method.invoke(physicalNetworkAdapter, link);\r
+        method.invoke(physicalNetworkAdapter, link);\r
+\r
+        verify(phyConfigLoader,times(2)).getPhysicalLink(any(PhysicalLinkId.class));\r
+        verify(writeTransaction,times(2)).submit();\r
+    }\r
+\r
+    @Test\r
+    public void testGetOFPortInstanceIdentifier() throws Exception{\r
+        Class<PhysicalNetworkAdapter> class1 = PhysicalNetworkAdapter.class;\r
+        Method method = class1.getDeclaredMethod("getOFPortInstanceIdentifier", new Class[]{NodeKey.class,NodeConnectorKey.class});\r
+        method.setAccessible(true);\r
+\r
+        NodeKey nodeKey = mock(NodeKey.class);\r
+        NodeConnectorKey connectorKey = mock(NodeConnectorKey.class);\r
+        InstanceIdentifier<NodeConnector> result;\r
+\r
+        result = (InstanceIdentifier<NodeConnector>)method.invoke(physicalNetworkAdapter,nodeKey,connectorKey);\r
+        Assert.assertTrue(result != null);\r
+\r
+    }\r
+\r
+    @Test\r
+    public void testGetOFPort() throws Exception{\r
+        Class<PhysicalNetworkAdapter> class1 = PhysicalNetworkAdapter.class;\r
+        Method method = class1.getDeclaredMethod("getOFPort", new Class[]{NodeKey.class,NodeConnectorKey.class});\r
+        method.setAccessible(true);\r
+\r
+        NodeKey nodeKey = mock(NodeKey.class);\r
+        NodeConnectorKey connectorKey = mock(NodeConnectorKey.class);\r
+        CheckedFuture checkedFuture_read = mock(CheckedFuture.class);\r
+        ReadOnlyTransaction readOnlyTransaction = mock(ReadOnlyTransaction.class);\r
+\r
+        when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);\r
+        when(readOnlyTransaction.read(any(LogicalDatastoreType.class),any(InstanceIdentifier.class))).thenReturn(checkedFuture_read);\r
+\r
+//        method.invoke(physicalNetworkAdapter,nodeKey,connectorKey);\r
+    }\r
+}
\ No newline at end of file