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 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.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;
public class TopologyManagerImplTest {
+ /**
+ * Mockup of switch manager that only maintains existence of node
+ * connector.
+ */
+ private final class TestSwitchManager implements ISwitchManager {
+ private final Set<Node> nodeSet = new HashSet<Node>();
+ private final Set<NodeConnector> nodeConnectorSet =
+ new HashSet<NodeConnector>();
+
+ 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<Switch> getNetworkDevices() {
+ return null;
+ }
+
+ @Override
+ public List<SubnetConfig> 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<SpanConfig> getSpanConfigList() {
+ return null;
+ }
+
+ @Override
+ public List<NodeConnector> 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<String> nodeConnectors) {
+ return null;
+ }
+
+ @Override
+ public Status removePortsFromSubnet(String name, List<String> nodeConnectors) {
+ return null;
+ }
+
+ @Override
+ public Set<Node> getNodes() {
+ return new HashSet<Node>(nodeSet);
+ }
+
+ @Override
+ public Map<String, Property> getNodeProps(Node node) {
+ return new HashMap<String, Property>();
+ }
+
+ @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<NodeConnector> getUpNodeConnectors(Node node) {
+ return getNodeConnectors(node);
+ }
+
+ @Override
+ public Set<NodeConnector> getNodeConnectors(Node node) {
+ Set<NodeConnector> set = new HashSet<NodeConnector>();
+ for (NodeConnector nc: nodeConnectorSet) {
+ if (nc.getNode().equals(node)) {
+ set.add(nc);
+ }
+ }
+
+ return set;
+ }
+
+ @Override
+ public Set<NodeConnector> getPhysicalNodeConnectors(Node node) {
+ return getNodeConnectors(node);
+ }
+
+ @Override
+ public Map<String, Property> getNodeConnectorProps(NodeConnector nodeConnector) {
+ return new HashMap<String, Property>();
+ }
+
+ @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<Switch> getConfiguredNotConnectedSwitches() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Map<String, Property> 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 <SwitchId :
*
* @throws ConstructionException
*/
- public void setNodeEdges(TopologyManagerImpl topoManagerImpl)
+ public void setNodeEdges(TopologyManagerImpl topoManagerImpl, TestSwitchManager swMgr)
throws ConstructionException {
topoManagerImpl.nonClusterObjectCreate();
NodeConnector tailnc1 = NodeConnectorCreator
.createOFNodeConnector((short) (i + 10),
NodeCreator.createOFNode((long) (i + 10)));
+ swMgr.addNodeConnectors(tailnc1, headnc1);
Edge e1 = new Edge(tailnc1, headnc1);
TopoEdgeUpdate teu1 = new TopoEdgeUpdate(e1, props,
UpdateType.ADDED);
(short) (i + 1), headnc1.getNode());
NodeConnector headnc2 = NodeConnectorCreator.createOFNodeConnector(
(short) (i + 11), tailnc1.getNode());
+ swMgr.addNodeConnectors(tailnc1, headnc2);
Edge e2 = new Edge(tailnc2, headnc2);
TopoEdgeUpdate teu2 = new TopoEdgeUpdate(e2, props,
UpdateType.ADDED);
topoedgeupdateList.add(teu2);
topoManagerImpl.edgeUpdate(topoedgeupdateList);
-
}
-
}
@Test
public void testGetNodeEdges() throws ConstructionException {
TopologyManagerImpl topoManagerImpl = new TopologyManagerImpl();
- setNodeEdges(topoManagerImpl);
+ TestSwitchManager swMgr = new TestSwitchManager();
+ topoManagerImpl.setSwitchManager(swMgr);
+ setNodeEdges(topoManagerImpl, swMgr);
Map<Node, Set<Edge>> nodeEdgeMap = topoManagerImpl.getNodeEdges();
for (Iterator<Map.Entry<Node, Set<Edge>>> i = nodeEdgeMap.entrySet()
@Test
public void testGetEdges() throws ConstructionException {
TopologyManagerImpl topoManagerImpl = new TopologyManagerImpl();
- setNodeEdges(topoManagerImpl);
+ TestSwitchManager swMgr = new TestSwitchManager();
+ topoManagerImpl.setSwitchManager(swMgr);
+ setNodeEdges(topoManagerImpl, swMgr);
Map<Edge, Set<Property>> edgeProperty = topoManagerImpl.getEdges();
@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);
.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
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";
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<String, TopologyUserLinkConfig> userLinks = topoManagerImpl
public void testHostLinkMethods() throws ConstructionException,
UnknownHostException {
TopologyManagerImpl topoManagerImpl = new TopologyManagerImpl();
+ TestSwitchManager swMgr = new TestSwitchManager();
+ topoManagerImpl.setSwitchManager(swMgr);
topoManagerImpl.nonClusterObjectCreate();
int hostCounter = 0;
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<NodeConnector> ncSet = topoManagerImpl.getNodeConnectorWithHost();
public void testGetNodesWithNodeConnectorHost()
throws ConstructionException, UnknownHostException {
TopologyManagerImpl topoManagerImpl = new TopologyManagerImpl();
+ TestSwitchManager swMgr = new TestSwitchManager();
+ topoManagerImpl.setSwitchManager(swMgr);
topoManagerImpl.nonClusterObjectCreate();
int hostCounter = 0;