X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Ftopologymanager%2Fimplementation%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Ftopologymanager%2Finternal%2FTopologyManagerImplTest.java;h=d1338bf6953909aff8ff1c4bea274001f9135e5c;hp=65487a614a85af96fabbac4e7df289d2f28c20e8;hb=510f3bd2d25c0e667a60ff5ef18cfbd40534cec0;hpb=52757c15dc010e68ef15899daf50f78291966bee diff --git a/opendaylight/topologymanager/implementation/src/test/java/org/opendaylight/controller/topologymanager/internal/TopologyManagerImplTest.java b/opendaylight/topologymanager/implementation/src/test/java/org/opendaylight/controller/topologymanager/internal/TopologyManagerImplTest.java index 65487a614a..d1338bf695 100644 --- a/opendaylight/topologymanager/implementation/src/test/java/org/opendaylight/controller/topologymanager/internal/TopologyManagerImplTest.java +++ b/opendaylight/topologymanager/implementation/src/test/java/org/opendaylight/controller/topologymanager/internal/TopologyManagerImplTest.java @@ -8,37 +8,322 @@ package org.opendaylight.controller.topologymanager.internal; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentMap; - import org.junit.Assert; import org.junit.Test; import org.opendaylight.controller.sal.core.Bandwidth; import org.opendaylight.controller.sal.core.ConstructionException; +import org.opendaylight.controller.sal.core.Description; import org.opendaylight.controller.sal.core.Edge; import org.opendaylight.controller.sal.core.Host; import org.opendaylight.controller.sal.core.Latency; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.Node.NodeIDType; import org.opendaylight.controller.sal.core.NodeConnector; +import org.opendaylight.controller.sal.core.NodeConnector.NodeConnectorIDType; import org.opendaylight.controller.sal.core.Property; import org.opendaylight.controller.sal.core.State; +import org.opendaylight.controller.sal.core.TimeStamp; import org.opendaylight.controller.sal.core.UpdateType; import org.opendaylight.controller.sal.packet.address.EthernetAddress; import org.opendaylight.controller.sal.topology.TopoEdgeUpdate; -import org.opendaylight.controller.sal.utils.StatusCode; import org.opendaylight.controller.sal.utils.NodeConnectorCreator; import org.opendaylight.controller.sal.utils.NodeCreator; +import org.opendaylight.controller.sal.utils.Status; +import org.opendaylight.controller.sal.utils.StatusCode; +import org.opendaylight.controller.switchmanager.ISwitchManager; +import org.opendaylight.controller.switchmanager.SpanConfig; +import org.opendaylight.controller.switchmanager.Subnet; +import org.opendaylight.controller.switchmanager.SubnetConfig; +import org.opendaylight.controller.switchmanager.Switch; +import org.opendaylight.controller.switchmanager.SwitchConfig; import org.opendaylight.controller.topologymanager.TopologyUserLinkConfig; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentMap; + public class TopologyManagerImplTest { + /** + * Mockup of switch manager that only maintains existence of node + * connector. + */ + private final class TestSwitchManager implements ISwitchManager { + private final Set nodeSet = new HashSet(); + private final Set nodeConnectorSet = + new HashSet(); + + private void addNodeConnectors(NodeConnector ... connectors) { + for (NodeConnector nc: connectors) { + if (nc != null) { + nodeSet.add(nc.getNode()); + nodeConnectorSet.add(nc); + } + } + } + + private void addNodeConnectors(TopologyUserLinkConfig ... links) { + for (TopologyUserLinkConfig link: links) { + NodeConnector src = + NodeConnector.fromString(link.getSrcNodeConnector()); + NodeConnector dst = + NodeConnector.fromString(link.getDstNodeConnector()); + addNodeConnectors(src, dst); + } + } + + @Override + public Status addSubnet(SubnetConfig configObject) { + return null; + } + + @Override + public Status removeSubnet(SubnetConfig configObject) { + return null; + } + + @Override + public Status modifySubnet(SubnetConfig configObject) { + return null; + } + + @Override + public Status removeSubnet(String name) { + return null; + } + + @Override + public List getNetworkDevices() { + return null; + } + + @Override + public List getSubnetsConfigList() { + return null; + } + + @Override + public SubnetConfig getSubnetConfig(String subnet) { + return null; + } + + @Override + public Subnet getSubnetByNetworkAddress(InetAddress networkAddress) { + return null; + } + + @Override + public Status saveSwitchConfig() { + return null; + } + + @Override + public Status addSpanConfig(SpanConfig configObject) { + return null; + } + + @Override + public Status removeSpanConfig(SpanConfig cfgObject) { + return null; + } + + @Override + public List getSpanConfigList() { + return null; + } + + @Override + public List getSpanPorts(Node node) { + return null; + } + + @Override + public void updateSwitchConfig(SwitchConfig cfgObject) { + } + + @Override + public Status updateNodeConfig(SwitchConfig switchConfig) { + return null; + } + + @Override + public Status removeNodeConfig(String nodeId) { + return null; + } + + @Override + public SwitchConfig getSwitchConfig(String nodeId) { + return null; + } + + @Override + public Status addPortsToSubnet(String name, List nodeConnectors) { + return null; + } + + @Override + public Status removePortsFromSubnet(String name, List nodeConnectors) { + return null; + } + + @Override + public Set getNodes() { + return new HashSet(nodeSet); + } + + @Override + public Map getNodeProps(Node node) { + return new HashMap(); + } + + @Override + public Property getNodeProp(Node node, String propName) { + return null; + } + + @Override + public void setNodeProp(Node node, Property prop) { + } + + @Override + public Status removeNodeProp(Node node, String propName) { + return null; + } + + @Override + public Status removeNodeAllProps(Node node) { + return null; + } + + @Override + public Set getUpNodeConnectors(Node node) { + return getNodeConnectors(node); + } + + @Override + public Set getNodeConnectors(Node node) { + Set set = new HashSet(); + for (NodeConnector nc: nodeConnectorSet) { + if (nc.getNode().equals(node)) { + set.add(nc); + } + } + + return set; + } + + @Override + public Set getPhysicalNodeConnectors(Node node) { + return getNodeConnectors(node); + } + + @Override + public Map getNodeConnectorProps(NodeConnector nodeConnector) { + return new HashMap(); + } + + @Override + public Property getNodeConnectorProp(NodeConnector nodeConnector, String propName) { + return null; + } + + @Override + public Status addNodeConnectorProp(NodeConnector nodeConnector, Property prop) { + return null; + } + + @Override + public Status removeNodeConnectorProp(NodeConnector nc, String propName) { + return null; + } + + @Override + public Status removeNodeConnectorAllProps(NodeConnector nodeConnector) { + return null; + } + + @Override + public NodeConnector getNodeConnector(Node node, String nodeConnectorName) { + return null; + } + + @Override + public boolean isSpecial(NodeConnector p) { + String type = p.getType(); + return (type.equals(NodeConnectorIDType.CONTROLLER) + || type.equals(NodeConnectorIDType.ALL) + || type.equals(NodeConnectorIDType.SWSTACK) + || type.equals(NodeConnectorIDType.HWPATH)); + } + + @Override + public Boolean isNodeConnectorEnabled(NodeConnector nodeConnector) { + if (doesNodeConnectorExist(nodeConnector)) { + return Boolean.TRUE; + } + return Boolean.FALSE; + } + + @Override + public boolean doesNodeConnectorExist(NodeConnector nc) { + return (nc != null && nodeConnectorSet.contains(nc)); + } + + @Override + public byte[] getControllerMAC() { + return new byte[6]; + } + + @Override + public byte[] getNodeMAC(Node node) { + return new byte[6]; + } + + @Override + public Property createProperty(String propName, String propValue) { + return null; + } + + @Override + public String getNodeDescription(Node node) { + return null; + } + + @Override + public Status removeControllerProperty(String propertyName){ + return null; + } + + @Override + public Set getConfiguredNotConnectedSwitches() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map getControllerProperties() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Property getControllerProperty(String propertyName) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Status setControllerProperty(Property property) { + // TODO Auto-generated method stub + return null; + } + } /* * Sets the node, edges and properties for edges here: Edge > nodeEdgeMap = topoManagerImpl.getNodeEdges(); for (Iterator>> i = nodeEdgeMap.entrySet() @@ -126,7 +413,9 @@ public class TopologyManagerImplTest { @Test public void testGetEdges() throws ConstructionException { TopologyManagerImpl topoManagerImpl = new TopologyManagerImpl(); - setNodeEdges(topoManagerImpl); + TestSwitchManager swMgr = new TestSwitchManager(); + topoManagerImpl.setSwitchManager(swMgr); + setNodeEdges(topoManagerImpl, swMgr); Map> edgeProperty = topoManagerImpl.getEdges(); @@ -199,17 +488,21 @@ public class TopologyManagerImplTest { @Test public void testAddDeleteUserLink() { TopologyUserLinkConfig link1 = new TopologyUserLinkConfig("default1", - "OF|1@OF|2", "OF|1@OF|2"); + "OF|1@OF|2", "OF|1@OF|3"); TopologyUserLinkConfig link2 = new TopologyUserLinkConfig("default1", - "OF|10@OF|20", "OF|10@OF|20"); + "OF|10@OF|20", "OF|10@OF|30"); TopologyUserLinkConfig link3 = new TopologyUserLinkConfig("default2", - "OF|1@OF|2", "OF|1@OF|2"); + "OF|1@OF|2", "OF|1@OF|3"); TopologyUserLinkConfig link4 = new TopologyUserLinkConfig("default20", - "OF|10@OF|20", "OF|10@OF|20"); + "OF|10@OF|20", "OF|10@OF|30"); TopologyManagerImpl topoManagerImpl = new TopologyManagerImpl(); + TestSwitchManager swMgr = new TestSwitchManager(); + topoManagerImpl.setSwitchManager(swMgr); topoManagerImpl.nonClusterObjectCreate(); + swMgr.addNodeConnectors(link1, link2, link3, link4); + Assert.assertTrue(topoManagerImpl.addUserLink(link1).isSuccess()); Assert.assertTrue(topoManagerImpl.addUserLink(link2).getCode() == StatusCode.CONFLICT); Assert.assertTrue(topoManagerImpl.addUserLink(link3).getCode() == StatusCode.CONFLICT); @@ -222,6 +515,14 @@ public class TopologyManagerImplTest { .isSuccess()); Assert.assertTrue(topoManagerImpl.getUserLinks().isEmpty()); + TopologyUserLinkConfig badlink1 = + new TopologyUserLinkConfig("bad1", "OF|1@OF|4", "OF|1@OF|5"); + TopologyUserLinkConfig badlink2 = + new TopologyUserLinkConfig("bad2", "OF|10@OF|7", "OF|7@OF|13"); + Assert.assertEquals(StatusCode.NOTFOUND, + topoManagerImpl.addUserLink(badlink1).getCode()); + Assert.assertEquals(StatusCode.NOTFOUND, + topoManagerImpl.addUserLink(badlink2).getCode()); } @Test @@ -229,6 +530,8 @@ public class TopologyManagerImplTest { TopologyUserLinkConfig[] link = new TopologyUserLinkConfig[5]; TopologyUserLinkConfig[] reverseLink = new TopologyUserLinkConfig[5]; TopologyManagerImpl topoManagerImpl = new TopologyManagerImpl(); + TestSwitchManager swMgr = new TestSwitchManager(); + topoManagerImpl.setSwitchManager(swMgr); topoManagerImpl.nonClusterObjectCreate(); String name = "Test"; @@ -285,7 +588,11 @@ public class TopologyManagerImplTest { Assert.assertTrue(link[i].isValid() == true); reverseLink[i] = new TopologyUserLinkConfig(name, dstNodeConnector, srcNodeConnector); - topoManagerImpl.addUserLink(link[i]); + + Assert.assertEquals(StatusCode.NOTFOUND, + topoManagerImpl.addUserLink(link[i]).getCode()); + swMgr.addNodeConnectors(link[i]); + Assert.assertTrue(topoManagerImpl.addUserLink(link[i]).isSuccess()); } ConcurrentMap userLinks = topoManagerImpl @@ -308,6 +615,8 @@ public class TopologyManagerImplTest { public void testHostLinkMethods() throws ConstructionException, UnknownHostException { TopologyManagerImpl topoManagerImpl = new TopologyManagerImpl(); + TestSwitchManager swMgr = new TestSwitchManager(); + topoManagerImpl.setSwitchManager(swMgr); topoManagerImpl.nonClusterObjectCreate(); int hostCounter = 0; @@ -352,10 +661,11 @@ public class TopologyManagerImplTest { for (int i = 0; i < 5; i++) { Host host = topoManagerImpl.getHostAttachedToNodeConnector(nc[i]); - if (i == 4) + if (i == 4) { Assert.assertTrue(host == null); - else + } else { Assert.assertTrue(host.equals(h[i])); + } } Set ncSet = topoManagerImpl.getNodeConnectorWithHost(); @@ -369,6 +679,8 @@ public class TopologyManagerImplTest { public void testGetNodesWithNodeConnectorHost() throws ConstructionException, UnknownHostException { TopologyManagerImpl topoManagerImpl = new TopologyManagerImpl(); + TestSwitchManager swMgr = new TestSwitchManager(); + topoManagerImpl.setSwitchManager(swMgr); topoManagerImpl.nonClusterObjectCreate(); int hostCounter = 0; @@ -423,4 +735,35 @@ public class TopologyManagerImplTest { Assert.assertTrue(nodeNCmap.isEmpty()); } + + @Test + public void bug1348FixTest() throws ConstructionException { + TopologyManagerImpl topoManagerImpl = new TopologyManagerImpl(); + TestSwitchManager swMgr = new TestSwitchManager(); + topoManagerImpl.setSwitchManager(swMgr); + topoManagerImpl.nonClusterObjectCreate(); + + NodeConnector headnc1 = NodeConnectorCreator.createOFNodeConnector( + (short) 1, NodeCreator.createOFNode(1000L)); + NodeConnector tailnc1 = NodeConnectorCreator.createOFNodeConnector( + (short) 2, NodeCreator.createOFNode(2000L)); + Edge edge = new Edge(headnc1, tailnc1); + List updatedEdges = new ArrayList<>(); + Set edgeProps = new HashSet<>(); + edgeProps.add(new TimeStamp(System.currentTimeMillis(), "creation")); + edgeProps.add(new Latency(Latency.LATENCY100ns)); + edgeProps.add(new State(State.EDGE_UP)); + edgeProps.add(new Bandwidth(Bandwidth.BW100Gbps)); + edgeProps.add(new Description("Test edge")); + updatedEdges.add(new TopoEdgeUpdate(edge, edgeProps, UpdateType.CHANGED)); + + try { + topoManagerImpl.edgeUpdate(updatedEdges); + } catch (Exception e) { + Assert.fail("Exception was raised when trying to update edge properties: " + e.getMessage()); + } + + Assert.assertEquals(1, topoManagerImpl.getEdges().size()); + Assert.assertNotNull(topoManagerImpl.getEdges().get(edge)); + } }