2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.topologymanager.internal;
11 import org.junit.Assert;
12 import org.junit.After;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.opendaylight.controller.sal.core.Bandwidth;
16 import org.opendaylight.controller.sal.core.ConstructionException;
17 import org.opendaylight.controller.sal.core.Description;
18 import org.opendaylight.controller.sal.core.Edge;
19 import org.opendaylight.controller.sal.core.Host;
20 import org.opendaylight.controller.sal.core.Latency;
21 import org.opendaylight.controller.sal.core.Node;
22 import org.opendaylight.controller.sal.core.Node.NodeIDType;
23 import org.opendaylight.controller.sal.core.NodeConnector;
24 import org.opendaylight.controller.sal.core.NodeConnector.NodeConnectorIDType;
25 import org.opendaylight.controller.sal.core.Property;
26 import org.opendaylight.controller.sal.core.State;
27 import org.opendaylight.controller.sal.core.TimeStamp;
28 import org.opendaylight.controller.sal.core.UpdateType;
29 import org.opendaylight.controller.sal.packet.address.EthernetAddress;
30 import org.opendaylight.controller.sal.topology.TopoEdgeUpdate;
31 import org.opendaylight.controller.sal.utils.NodeConnectorCreator;
32 import org.opendaylight.controller.sal.utils.NodeCreator;
33 import org.opendaylight.controller.sal.utils.Status;
34 import org.opendaylight.controller.sal.utils.StatusCode;
35 import org.opendaylight.controller.switchmanager.ISwitchManager;
36 import org.opendaylight.controller.switchmanager.SpanConfig;
37 import org.opendaylight.controller.switchmanager.Subnet;
38 import org.opendaylight.controller.switchmanager.SubnetConfig;
39 import org.opendaylight.controller.switchmanager.Switch;
40 import org.opendaylight.controller.switchmanager.SwitchConfig;
41 import org.opendaylight.controller.topologymanager.TopologyUserLinkConfig;
43 import java.net.InetAddress;
44 import java.net.UnknownHostException;
45 import java.util.ArrayList;
46 import java.util.HashMap;
47 import java.util.HashSet;
48 import java.util.Iterator;
49 import java.util.List;
52 import java.util.concurrent.ConcurrentMap;
54 public class TopologyManagerImplTest {
55 private TopologyManagerImpl topoManagerImpl;
58 * Mockup of switch manager that only maintains existence of node
61 private final class TestSwitchManager implements ISwitchManager {
62 private final Set<Node> nodeSet = new HashSet<Node>();
63 private final Set<NodeConnector> nodeConnectorSet =
64 new HashSet<NodeConnector>();
66 private void addNodeConnectors(NodeConnector ... connectors) {
67 for (NodeConnector nc: connectors) {
69 nodeSet.add(nc.getNode());
70 nodeConnectorSet.add(nc);
75 private void addNodeConnectors(TopologyUserLinkConfig ... links) {
76 for (TopologyUserLinkConfig link: links) {
78 NodeConnector.fromString(link.getSrcNodeConnector());
80 NodeConnector.fromString(link.getDstNodeConnector());
81 addNodeConnectors(src, dst);
85 private void clear() {
87 nodeConnectorSet.clear();
91 public Status addSubnet(SubnetConfig configObject) {
96 public Status removeSubnet(SubnetConfig configObject) {
101 public Status modifySubnet(SubnetConfig configObject) {
106 public Status removeSubnet(String name) {
111 public List<Switch> getNetworkDevices() {
116 public List<SubnetConfig> getSubnetsConfigList() {
121 public SubnetConfig getSubnetConfig(String subnet) {
126 public Subnet getSubnetByNetworkAddress(InetAddress networkAddress) {
131 public Status saveSwitchConfig() {
136 public Status addSpanConfig(SpanConfig configObject) {
141 public Status removeSpanConfig(SpanConfig cfgObject) {
146 public List<SpanConfig> getSpanConfigList() {
151 public List<NodeConnector> getSpanPorts(Node node) {
156 public void updateSwitchConfig(SwitchConfig cfgObject) {
160 public Status updateNodeConfig(SwitchConfig switchConfig) {
165 public Status removeNodeConfig(String nodeId) {
170 public SwitchConfig getSwitchConfig(String nodeId) {
175 public Status addPortsToSubnet(String name, List<String> nodeConnectors) {
180 public Status removePortsFromSubnet(String name, List<String> nodeConnectors) {
185 public Set<Node> getNodes() {
186 return new HashSet<Node>(nodeSet);
190 public Map<String, Property> getNodeProps(Node node) {
191 return new HashMap<String, Property>();
195 public Property getNodeProp(Node node, String propName) {
200 public void setNodeProp(Node node, Property prop) {
204 public Status removeNodeProp(Node node, String propName) {
209 public Status removeNodeAllProps(Node node) {
214 public Set<NodeConnector> getUpNodeConnectors(Node node) {
215 return getNodeConnectors(node);
219 public Set<NodeConnector> getNodeConnectors(Node node) {
220 Set<NodeConnector> set = new HashSet<NodeConnector>();
221 for (NodeConnector nc: nodeConnectorSet) {
222 if (nc.getNode().equals(node)) {
231 public Set<NodeConnector> getPhysicalNodeConnectors(Node node) {
232 return getNodeConnectors(node);
236 public Map<String, Property> getNodeConnectorProps(NodeConnector nodeConnector) {
237 return new HashMap<String, Property>();
241 public Property getNodeConnectorProp(NodeConnector nodeConnector, String propName) {
246 public Status addNodeConnectorProp(NodeConnector nodeConnector, Property prop) {
251 public Status removeNodeConnectorProp(NodeConnector nc, String propName) {
256 public Status removeNodeConnectorAllProps(NodeConnector nodeConnector) {
261 public NodeConnector getNodeConnector(Node node, String nodeConnectorName) {
266 public boolean isSpecial(NodeConnector p) {
267 String type = p.getType();
268 return (type.equals(NodeConnectorIDType.CONTROLLER)
269 || type.equals(NodeConnectorIDType.ALL)
270 || type.equals(NodeConnectorIDType.SWSTACK)
271 || type.equals(NodeConnectorIDType.HWPATH));
275 public Boolean isNodeConnectorEnabled(NodeConnector nodeConnector) {
276 if (doesNodeConnectorExist(nodeConnector)) {
279 return Boolean.FALSE;
283 public boolean doesNodeConnectorExist(NodeConnector nc) {
284 return (nc != null && nodeConnectorSet.contains(nc));
288 public byte[] getControllerMAC() {
293 public byte[] getNodeMAC(Node node) {
298 public Property createProperty(String propName, String propValue) {
303 public String getNodeDescription(Node node) {
308 public Status removeControllerProperty(String propertyName){
313 public Set<Switch> getConfiguredNotConnectedSwitches() {
314 // TODO Auto-generated method stub
319 public Map<String, Property> getControllerProperties() {
320 // TODO Auto-generated method stub
325 public Property getControllerProperty(String propertyName) {
326 // TODO Auto-generated method stub
331 public Status setControllerProperty(Property property) {
332 // TODO Auto-generated method stub
338 public void setUp() {
339 topoManagerImpl = new TopologyManagerImpl();
340 topoManagerImpl.startTest();
344 public void tearDown() {
345 if (topoManagerImpl != null) {
346 topoManagerImpl.stopTest();
347 topoManagerImpl = null;
352 * Sets the node, edges and properties for edges here: Edge <SwitchId :
353 * NodeConnectorId> : <1:1>--><11:11>; <1:2>--><11:12>; <3:3>--><13:13>;
354 * <3:4>--><13:14>; <5:5>--><15:15>; <5:6>--><15:16>; Method used by two
355 * tests: testGetNodeEdges and testGetEdges
357 * @param topoManagerImpl
359 * @throws ConstructionException
361 public void setNodeEdges(TopologyManagerImpl topoManagerImpl, TestSwitchManager swMgr)
362 throws ConstructionException {
363 topoManagerImpl.nonClusterObjectCreate();
369 Set<Property> props = new HashSet<Property>();
370 state = new State(State.EDGE_UP);
371 bw = new Bandwidth(Bandwidth.BW100Gbps);
372 l = new Latency(Latency.LATENCY100ns);
377 for (short i = 1; i < 6; i = (short) (i + 2)) {
378 List<TopoEdgeUpdate> topoedgeupdateList = new ArrayList<TopoEdgeUpdate>();
379 NodeConnector headnc1 = NodeConnectorCreator.createOFNodeConnector(
380 i, NodeCreator.createOFNode((long) i));
381 NodeConnector tailnc1 = NodeConnectorCreator
382 .createOFNodeConnector((short) (i + 10),
383 NodeCreator.createOFNode((long) (i + 10)));
384 swMgr.addNodeConnectors(tailnc1, headnc1);
385 Edge e1 = new Edge(tailnc1, headnc1);
386 TopoEdgeUpdate teu1 = new TopoEdgeUpdate(e1, props,
388 topoedgeupdateList.add(teu1);
390 NodeConnector tailnc2 = NodeConnectorCreator.createOFNodeConnector(
391 (short) (i + 1), headnc1.getNode());
392 NodeConnector headnc2 = NodeConnectorCreator.createOFNodeConnector(
393 (short) (i + 11), tailnc1.getNode());
394 swMgr.addNodeConnectors(tailnc1, headnc2);
395 Edge e2 = new Edge(tailnc2, headnc2);
396 TopoEdgeUpdate teu2 = new TopoEdgeUpdate(e2, props,
398 topoedgeupdateList.add(teu2);
399 topoManagerImpl.edgeUpdate(topoedgeupdateList);
402 Assert.assertTrue(topoManagerImpl.flushUpdateQueue(5000));
406 public void testGetNodeEdges() throws ConstructionException {
407 TestSwitchManager swMgr = new TestSwitchManager();
408 topoManagerImpl.setSwitchManager(swMgr);
409 setNodeEdges(topoManagerImpl, swMgr);
411 Map<Node, Set<Edge>> nodeEdgeMap = topoManagerImpl.getNodeEdges();
412 for (Iterator<Map.Entry<Node, Set<Edge>>> i = nodeEdgeMap.entrySet()
413 .iterator(); i.hasNext();) {
414 Map.Entry<Node, Set<Edge>> entry = i.next();
415 Node node = entry.getKey();
416 Long nodeId = ((Long) node.getID()).longValue();
417 Assert.assertTrue((node.getType().equals(NodeIDType.OPENFLOW)));
419 Set<Edge> edges = entry.getValue();
420 for (Edge edge : edges) {
421 Long headNcId = ((Short) edge.getHeadNodeConnector().getID())
423 Long tailNcId = ((Short) edge.getTailNodeConnector().getID())
426 (headNcId.equals(nodeId) && tailNcId.equals(nodeId + 10))
427 || (headNcId.equals(nodeId + 11) && tailNcId.equals(nodeId + 1))
428 || (headNcId.equals(nodeId + 1) && tailNcId.equals(nodeId - 9))
429 || (headNcId.equals(nodeId - 10) && tailNcId.equals(nodeId))
434 Assert.assertTrue(nodeEdgeMap.isEmpty());
438 public void testGetEdges() throws ConstructionException {
439 TestSwitchManager swMgr = new TestSwitchManager();
440 topoManagerImpl.setSwitchManager(swMgr);
441 setNodeEdges(topoManagerImpl, swMgr);
443 Map<Edge, Set<Property>> edgeProperty = topoManagerImpl.getEdges();
445 for (Iterator<Map.Entry<Edge, Set<Property>>> i = edgeProperty
446 .entrySet().iterator(); i.hasNext();) {
447 Map.Entry<Edge, Set<Property>> entry = i.next();
448 Edge e = entry.getKey();
449 NodeConnector headnc = e.getHeadNodeConnector();
450 NodeConnector tailnc = e.getTailNodeConnector();
452 Long headNodeId = (Long) headnc.getNode().getID();
454 Long headNcId = ((Short) headnc.getID()).longValue();
455 Long tailNcId = ((Short) tailnc.getID()).longValue();
457 if (headNodeId == 1 || headNodeId == 3 || headNodeId == 5) {
458 Assert.assertTrue((headNcId.equals(headNodeId) && tailNcId
459 .equals(headNodeId + 10))
460 || (headNcId.equals(headNodeId + 10) && tailNcId
462 || (headNcId.equals(headNodeId + 1) && tailNcId
463 .equals(headNodeId + 11))
464 || (headNcId.equals(headNodeId + 11) && tailNcId
465 .equals(headNodeId + 1)));
466 } else if (headNodeId == 11 || headNodeId == 13 || headNodeId == 15) {
467 Assert.assertTrue((headNcId.equals(headNodeId) && tailNcId
468 .equals(headNodeId - 10))
469 || (headNcId.equals(headNodeId) && tailNcId
470 .equals(headNodeId - 10))
471 || (headNcId.equals(headNodeId - 9) && tailNcId
472 .equals(headNodeId + 1))
473 || (headNcId.equals(headNodeId + 1) && tailNcId
474 .equals(headNodeId - 9)));
477 Set<Property> prop = entry.getValue();
478 for (Property p : prop) {
481 if (p instanceof Bandwidth) {
482 Bandwidth b = (Bandwidth) p;
483 pName = Bandwidth.BandwidthPropName;
484 pValue = b.getValue();
485 Assert.assertTrue(pName.equals(p.getName())
486 && pValue == Bandwidth.BW100Gbps);
489 if (p instanceof Latency) {
490 Latency l = (Latency) p;
491 pName = Latency.LatencyPropName;
492 pValue = l.getValue();
493 Assert.assertTrue(pName.equals(p.getName())
494 && pValue == Latency.LATENCY100ns);
497 if (p instanceof State) {
498 State state = (State) p;
499 pName = State.StatePropName;
500 pValue = state.getValue();
501 Assert.assertTrue(pName.equals(p.getName())
502 && pValue == State.EDGE_UP);
508 Assert.assertTrue(edgeProperty.isEmpty());
512 public void testAddDeleteUserLink() {
513 TopologyUserLinkConfig link1 = new TopologyUserLinkConfig("default1",
514 "OF|1@OF|2", "OF|1@OF|3");
515 TopologyUserLinkConfig link2 = new TopologyUserLinkConfig("default1",
516 "OF|10@OF|20", "OF|10@OF|30");
517 TopologyUserLinkConfig link3 = new TopologyUserLinkConfig("default2",
518 "OF|1@OF|2", "OF|1@OF|3");
519 TopologyUserLinkConfig link4 = new TopologyUserLinkConfig("default20",
520 "OF|10@OF|20", "OF|10@OF|30");
522 TestSwitchManager swMgr = new TestSwitchManager();
523 topoManagerImpl.setSwitchManager(swMgr);
524 topoManagerImpl.nonClusterObjectCreate();
526 swMgr.addNodeConnectors(link1, link2, link3, link4);
528 Assert.assertTrue(topoManagerImpl.addUserLink(link1).isSuccess());
529 Assert.assertTrue(topoManagerImpl.addUserLink(link2).getCode() == StatusCode.CONFLICT);
530 Assert.assertTrue(topoManagerImpl.addUserLink(link3).getCode() == StatusCode.CONFLICT);
531 Assert.assertTrue(topoManagerImpl.addUserLink(link4).isSuccess());
533 Assert.assertTrue(topoManagerImpl.deleteUserLink(null).getCode() == StatusCode.BADREQUEST);
534 Assert.assertTrue(topoManagerImpl.deleteUserLink(link1.getName())
536 Assert.assertTrue(topoManagerImpl.deleteUserLink(link4.getName())
538 Assert.assertTrue(topoManagerImpl.getUserLinks().isEmpty());
540 TopologyUserLinkConfig badlink1 =
541 new TopologyUserLinkConfig("bad1", "OF|1@OF|4", "OF|1@OF|5");
542 TopologyUserLinkConfig badlink2 =
543 new TopologyUserLinkConfig("bad2", "OF|10@OF|7", "OF|7@OF|13");
544 Assert.assertEquals(StatusCode.NOTFOUND,
545 topoManagerImpl.addUserLink(badlink1).getCode());
546 Assert.assertEquals(StatusCode.NOTFOUND,
547 topoManagerImpl.addUserLink(badlink2).getCode());
551 public void testGetUserLink() {
552 TopologyUserLinkConfig[] link = new TopologyUserLinkConfig[5];
553 TopologyUserLinkConfig[] reverseLink = new TopologyUserLinkConfig[5];
554 TestSwitchManager swMgr = new TestSwitchManager();
555 topoManagerImpl.setSwitchManager(swMgr);
556 topoManagerImpl.nonClusterObjectCreate();
558 String name = "Test";
559 String srcSwitchId = null;
560 String srcNodeConnectorIDType = null;
561 String srcPort = null;
562 String srcNodeIDType = null;
563 String dstNodeIDType = null;
564 String dstSwitchId = null;
565 String dstNodeConnectorIDType = null;
566 String dstPort = null;
567 String srcNodeConnector = null;
568 String dstNodeConnector = null;
570 /* Creating userlinks and checking for their validity */
571 link[0] = new TopologyUserLinkConfig(name, srcNodeConnector, dstNodeConnector);
572 Assert.assertTrue(link[0].isValid() == false);
574 srcNodeConnector = "OF|1@OF|1";
575 link[0] = new TopologyUserLinkConfig(name, srcNodeConnector, dstNodeConnector);
576 Assert.assertTrue(link[0].isValid() == false);
578 dstNodeConnector = "OF|1@OF|2";
579 link[0] = new TopologyUserLinkConfig(name, srcNodeConnector, dstNodeConnector);
580 Assert.assertTrue(link[0].isValid() == true);
584 for (i = 0; i < 5; i++) {
585 link[i] = new TopologyUserLinkConfig();
587 name = Integer.toString(i + 1);
588 srcSwitchId = Integer.toString(i + 1);
589 srcPort = Integer.toString(i + 1);
590 dstSwitchId = Integer.toString((i + 1) * 10);
591 dstPort = Integer.toString((i + 1) * 10);
593 link[i].setName(name);
594 srcNodeConnectorIDType = dstNodeConnectorIDType = "INCORRECT";
595 srcNodeConnector = srcNodeConnectorIDType+"|"+srcSwitchId+"@"+srcNodeConnectorIDType+"|"+srcPort;
596 dstNodeConnector = dstNodeConnectorIDType+"|"+dstSwitchId+"@"+dstNodeConnectorIDType+"|"+dstPort;
598 link[i].setSrcNodeConnector(srcNodeConnector);
599 Assert.assertTrue(link[i].isValid() == false);
601 srcNodeConnectorIDType = "OF";
602 srcNodeConnector = srcNodeConnectorIDType+"|"+srcSwitchId+"@"+srcNodeConnectorIDType+"|"+srcPort;
603 link[i].setSrcNodeConnector(srcNodeConnector);
604 Assert.assertTrue(link[i].isValid() == false);
606 dstNodeConnectorIDType = "OF";
607 dstNodeConnector = dstNodeConnectorIDType+"|"+dstSwitchId+"@"+dstNodeConnectorIDType+"|"+dstPort;
608 link[i].setDstNodeConnector(dstNodeConnector);
609 Assert.assertTrue(link[i].isValid() == true);
611 reverseLink[i] = new TopologyUserLinkConfig(name, dstNodeConnector, srcNodeConnector);
613 Assert.assertEquals(StatusCode.NOTFOUND,
614 topoManagerImpl.addUserLink(link[i]).getCode());
615 swMgr.addNodeConnectors(link[i]);
616 Assert.assertTrue(topoManagerImpl.addUserLink(link[i]).isSuccess());
619 ConcurrentMap<String, TopologyUserLinkConfig> userLinks = topoManagerImpl
621 TopologyUserLinkConfig resultLink;
623 for (i = 0; i < 5; i++) {
624 resultLink = userLinks.get(((Integer) (i + 1)).toString());
626 Assert.assertTrue(resultLink.getName().equals(
627 reverseLink[i].getName()));
628 Assert.assertTrue(resultLink.getDstNodeConnector().equals(
629 reverseLink[i].getSrcNodeConnector()));
630 Assert.assertTrue(resultLink.getSrcNodeConnector().equals(
631 reverseLink[i].getDstNodeConnector()));
636 public void testHostLinkMethods() throws ConstructionException,
637 UnknownHostException {
638 TestSwitchManager swMgr = new TestSwitchManager();
639 topoManagerImpl.setSwitchManager(swMgr);
640 topoManagerImpl.nonClusterObjectCreate();
646 Set<Property> props = new HashSet<Property>();
647 state = new State(State.EDGE_UP);
648 bw = new Bandwidth(Bandwidth.BW100Gbps);
649 l = new Latency(Latency.LATENCY100ns);
656 Host[] h = new Host[5];
657 NodeConnector[] nc = new NodeConnector[5];
660 * Adding host, nodeConnector to hostsDB for the i = 0,1,2,3. No host
663 for (int i = 0; i < 5; i++) {
664 if (hostCounter < 4) {
665 ea = new EthernetAddress(new byte[] { (byte) 0x0, (byte) 0x0,
666 (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) i });
667 String stringIP = new StringBuilder().append(i + 1).append(".")
668 .append(i + 10).append(".").append(i + 20).append(".")
669 .append(i + 30).toString();
670 ip = InetAddress.getByName(stringIP);
671 h[hostCounter] = new Host(ea, ip);
673 h[hostCounter] = null;
676 nc[i] = NodeConnectorCreator.createOFNodeConnector((short) (i + 1),
677 NodeCreator.createOFNode((long) (i + 1)));
679 .updateHostLink(nc[i], h[i], UpdateType.ADDED, props);
682 for (int i = 0; i < 5; i++) {
683 Host host = topoManagerImpl.getHostAttachedToNodeConnector(nc[i]);
685 Assert.assertTrue(host == null);
687 Assert.assertTrue(host.equals(h[i]));
691 Set<NodeConnector> ncSet = topoManagerImpl.getNodeConnectorWithHost();
692 for (int i = 0; i < 5; i++) {
693 Assert.assertTrue(ncSet.remove(nc[i]));
695 Assert.assertTrue(ncSet.isEmpty());
699 public void testGetNodesWithNodeConnectorHost()
700 throws ConstructionException, UnknownHostException {
701 TestSwitchManager swMgr = new TestSwitchManager();
702 topoManagerImpl.setSwitchManager(swMgr);
703 topoManagerImpl.nonClusterObjectCreate();
709 Set<Property> props = new HashSet<Property>();
710 state = new State(State.EDGE_UP);
711 bw = new Bandwidth(Bandwidth.BW100Gbps);
712 l = new Latency(Latency.LATENCY100ns);
719 Host[] h = new Host[5];
720 NodeConnector[] nc = new NodeConnector[5];
723 * Adding host, nodeconnector, properties of edge to hostsDB for the
724 * first three nodes only
726 for (int i = 1; i < 6; i++) {
728 ea = new EthernetAddress(new byte[] { (byte) 0x0, (byte) 0x0,
729 (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) i });
730 String stringIP = new StringBuilder().append(i).append(".")
731 .append(i + 10).append(".").append(i + 20).append(".")
732 .append(i + 30).toString();
733 ip = InetAddress.getByName(stringIP);
734 h[hostCounter] = new Host(ea, ip);
736 h[hostCounter] = null;
739 nc[i - 1] = NodeConnectorCreator.createOFNodeConnector((short) i,
740 NodeCreator.createOFNode((long) i));
741 topoManagerImpl.updateHostLink(nc[i - 1], h[i - 1],
742 UpdateType.ADDED, props);
745 /* Get the nodes which have host connected to its nodeConnector */
746 Map<Node, Set<NodeConnector>> nodeNCmap = topoManagerImpl
747 .getNodesWithNodeConnectorHost();
748 for (int i = 1; i < 6; i++) {
749 Node node = nc[i - 1].getNode();
750 Set<NodeConnector> ncSet = nodeNCmap.get(nc[i - 1].getNode());
752 Assert.assertTrue(ncSet == nodeNCmap.remove(node));
755 Assert.assertTrue(nodeNCmap.isEmpty());
759 public void bug1348FixTest() throws ConstructionException {
760 TestSwitchManager swMgr = new TestSwitchManager();
761 topoManagerImpl.setSwitchManager(swMgr);
762 topoManagerImpl.nonClusterObjectCreate();
764 NodeConnector headnc1 = NodeConnectorCreator.createOFNodeConnector(
765 (short) 1, NodeCreator.createOFNode(1000L));
766 NodeConnector tailnc1 = NodeConnectorCreator.createOFNodeConnector(
767 (short) 2, NodeCreator.createOFNode(2000L));
768 Edge edge = new Edge(headnc1, tailnc1);
769 List<TopoEdgeUpdate> updatedEdges = new ArrayList<>();
770 Set<Property> edgeProps = new HashSet<>();
771 edgeProps.add(new TimeStamp(System.currentTimeMillis(), "creation"));
772 edgeProps.add(new Latency(Latency.LATENCY100ns));
773 edgeProps.add(new State(State.EDGE_UP));
774 edgeProps.add(new Bandwidth(Bandwidth.BW100Gbps));
775 edgeProps.add(new Description("Test edge"));
776 updatedEdges.add(new TopoEdgeUpdate(edge, edgeProps, UpdateType.CHANGED));
779 topoManagerImpl.edgeUpdate(updatedEdges);
780 } catch (Exception e) {
781 Assert.fail("Exception was raised when trying to update edge properties: " + e.getMessage());
784 Assert.assertTrue(topoManagerImpl.flushUpdateQueue(5000));
785 Assert.assertEquals(1, topoManagerImpl.getEdges().size());
786 Assert.assertNotNull(topoManagerImpl.getEdges().get(edge));
790 public void testNotifyNodeConnector() throws ConstructionException {
791 TestSwitchManager swMgr = new TestSwitchManager();
792 topoManagerImpl.setSwitchManager(swMgr);
793 topoManagerImpl.nonClusterObjectCreate();
795 // Test NodeConnector notification in the case that there are no
796 // related edge updates.
797 NodeConnector nc1 = NodeConnectorCreator.createOFNodeConnector(
798 (short) 1, NodeCreator.createOFNode(1000L));
799 Map<String, Property> propMap = new HashMap<>();
800 swMgr.addNodeConnectors(nc1);
801 topoManagerImpl.notifyNodeConnector(nc1, UpdateType.ADDED, propMap);
802 Assert.assertEquals(0, topoManagerImpl.getEdges().size());
804 topoManagerImpl.notifyNodeConnector(nc1, UpdateType.CHANGED, propMap);
805 Assert.assertEquals(0, topoManagerImpl.getEdges().size());
808 topoManagerImpl.notifyNodeConnector(nc1, UpdateType.REMOVED, propMap);
809 Assert.assertEquals(0, topoManagerImpl.getEdges().size());
811 // Test NodeConnector notification in the case that there is a related
812 // edge update just before the notification.
813 NodeConnector nc2 = NodeConnectorCreator.createOFNodeConnector(
814 (short) 2, NodeCreator.createOFNode(2000L));
815 Edge edge1 = new Edge(nc1, nc2);
816 Edge edge2 = new Edge(nc2, nc1);
817 Set<Property> props = new HashSet<Property>();
818 TopoEdgeUpdate teu1 = new TopoEdgeUpdate(edge1, props, UpdateType.ADDED);
819 TopoEdgeUpdate teu2 = new TopoEdgeUpdate(edge2, props, UpdateType.ADDED);
820 List<TopoEdgeUpdate> topoedgeupdateList = new ArrayList<TopoEdgeUpdate>();
821 topoedgeupdateList.add(teu1);
822 topoedgeupdateList.add(teu2);
823 topoManagerImpl.edgeUpdate(topoedgeupdateList);
824 swMgr.addNodeConnectors(nc1);
825 topoManagerImpl.notifyNodeConnector(nc1, UpdateType.ADDED, propMap);
826 swMgr.addNodeConnectors(nc2);
827 topoManagerImpl.notifyNodeConnector(nc2, UpdateType.CHANGED, propMap);
828 Assert.assertTrue(topoManagerImpl.flushUpdateQueue(5000));
829 Assert.assertEquals(2, topoManagerImpl.getEdges().size());
831 teu1 = new TopoEdgeUpdate(edge1, props, UpdateType.REMOVED);
832 teu2 = new TopoEdgeUpdate(edge2, props, UpdateType.REMOVED);
833 topoedgeupdateList = new ArrayList<TopoEdgeUpdate>();
834 topoedgeupdateList.add(teu1);
835 topoedgeupdateList.add(teu2);
836 topoManagerImpl.edgeUpdate(topoedgeupdateList);
837 Assert.assertTrue(topoManagerImpl.flushUpdateQueue(5000));
838 Assert.assertEquals(0, topoManagerImpl.getEdges().size());
839 topoManagerImpl.notifyNodeConnector(nc1, UpdateType.REMOVED, propMap);
840 topoManagerImpl.notifyNodeConnector(nc2, UpdateType.REMOVED, propMap);
844 // Test NodeConnector notification in the case that there are multiple
845 // edge updates related to the NodeConnector just before the notification.
846 teu1 = new TopoEdgeUpdate(edge1, props, UpdateType.ADDED);
847 teu2 = new TopoEdgeUpdate(edge2, props, UpdateType.ADDED);
848 TopoEdgeUpdate teu3 = new TopoEdgeUpdate(edge1, props, UpdateType.CHANGED);
849 TopoEdgeUpdate teu4 = new TopoEdgeUpdate(edge2, props, UpdateType.CHANGED);
850 TopoEdgeUpdate teu5 = new TopoEdgeUpdate(edge1, props, UpdateType.REMOVED);
851 TopoEdgeUpdate teu6 = new TopoEdgeUpdate(edge2, props, UpdateType.REMOVED);
852 topoedgeupdateList = new ArrayList<TopoEdgeUpdate>();
853 topoedgeupdateList.add(teu1);
854 topoedgeupdateList.add(teu2);
855 topoedgeupdateList.add(teu3);
856 topoedgeupdateList.add(teu4);
857 topoedgeupdateList.add(teu5);
858 topoedgeupdateList.add(teu6);
859 topoManagerImpl.edgeUpdate(topoedgeupdateList);
860 swMgr.addNodeConnectors(nc1);
861 topoManagerImpl.notifyNodeConnector(nc1, UpdateType.ADDED, propMap);
862 swMgr.addNodeConnectors(nc2);
863 topoManagerImpl.notifyNodeConnector(nc2, UpdateType.CHANGED, propMap);
864 Assert.assertTrue(topoManagerImpl.flushUpdateQueue(5000));
865 Assert.assertEquals(0, topoManagerImpl.getEdges().size());
866 topoManagerImpl.notifyNodeConnector(nc1, UpdateType.REMOVED, propMap);
867 topoManagerImpl.notifyNodeConnector(nc2, UpdateType.REMOVED, propMap);
868 Assert.assertTrue(topoManagerImpl.flushUpdateQueue(5000));
869 Assert.assertEquals(0, topoManagerImpl.getEdges().size());