| /* |
| * Copyright 2016-present Open Networking Laboratory |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.onosproject.incubator.net.virtual.impl; |
| |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.onlab.junit.TestUtils; |
| import org.onlab.osgi.TestServiceDirectory; |
| import org.onlab.rest.BaseResource; |
| import org.onosproject.common.event.impl.TestEventDispatcher; |
| import org.onosproject.core.ApplicationId; |
| import org.onosproject.core.CoreService; |
| import org.onosproject.core.CoreServiceAdapter; |
| import org.onosproject.core.DefaultApplicationId; |
| import org.onosproject.core.IdGenerator; |
| import org.onosproject.incubator.net.virtual.NetworkId; |
| import org.onosproject.incubator.net.virtual.TenantId; |
| import org.onosproject.incubator.net.virtual.VirtualDevice; |
| import org.onosproject.incubator.net.virtual.VirtualLink; |
| import org.onosproject.incubator.net.virtual.VirtualNetwork; |
| import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore; |
| import org.onosproject.net.ConnectPoint; |
| import org.onosproject.net.DeviceId; |
| import org.onosproject.net.DisjointPath; |
| import org.onosproject.net.Link; |
| import org.onosproject.net.NetTestTools; |
| import org.onosproject.net.Path; |
| import org.onosproject.net.PortNumber; |
| import org.onosproject.net.TestDeviceParams; |
| import org.onosproject.net.intent.FakeIntentManager; |
| import org.onosproject.net.intent.TestableIntentService; |
| import org.onosproject.net.topology.LinkWeigher; |
| import org.onosproject.net.topology.LinkWeight; |
| import org.onosproject.net.topology.Topology; |
| import org.onosproject.net.topology.TopologyCluster; |
| import org.onosproject.net.topology.TopologyService; |
| import org.onosproject.store.service.TestStorageService; |
| |
| import java.util.Map; |
| import java.util.Optional; |
| import java.util.Set; |
| import java.util.concurrent.atomic.AtomicLong; |
| |
| import static junit.framework.TestCase.assertTrue; |
| import static org.junit.Assert.*; |
| |
| /** |
| * Junit tests for VirtualNetworkTopologyService. |
| */ |
| public class VirtualNetworkTopologyManagerTest extends TestDeviceParams { |
| |
| private final String tenantIdValue1 = "TENANT_ID1"; |
| |
| private VirtualNetworkManager manager; |
| private DistributedVirtualNetworkStore virtualNetworkManagerStore; |
| private CoreService coreService; |
| private TestableIntentService intentService = new FakeIntentManager(); |
| private TestServiceDirectory testDirectory; |
| |
| @Before |
| public void setUp() throws Exception { |
| virtualNetworkManagerStore = new DistributedVirtualNetworkStore(); |
| coreService = new VirtualNetworkTopologyManagerTest.TestCoreService(); |
| TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService); |
| TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService()); |
| virtualNetworkManagerStore.activate(); |
| |
| BaseResource.setServiceDirectory(testDirectory); |
| manager = new VirtualNetworkManager(); |
| manager.store = virtualNetworkManagerStore; |
| manager.intentService = intentService; |
| manager.coreService = coreService; |
| NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher()); |
| |
| testDirectory = new TestServiceDirectory(); |
| TestUtils.setField(manager, "serviceDirectory", testDirectory); |
| |
| manager.activate(); |
| } |
| |
| @After |
| public void tearDown() { |
| virtualNetworkManagerStore.deactivate(); |
| manager.deactivate(); |
| NetTestTools.injectEventDispatcher(manager, null); |
| } |
| |
| /** |
| * Method to create the virtual network for further testing. |
| * |
| * @return virtual network |
| */ |
| private VirtualNetwork setupVirtualNetworkTopology() { |
| manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); |
| VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); |
| VirtualDevice virtualDevice1 = |
| manager.createVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice virtualDevice2 = |
| manager.createVirtualDevice(virtualNetwork.id(), DID2); |
| VirtualDevice virtualDevice3 = |
| manager.createVirtualDevice(virtualNetwork.id(), DID3); |
| VirtualDevice virtualDevice4 = |
| manager.createVirtualDevice(virtualNetwork.id(), DID4); |
| |
| ConnectPoint cp1 = new ConnectPoint(virtualDevice1.id(), PortNumber.portNumber(1)); |
| manager.createVirtualPort(virtualNetwork.id(), cp1.deviceId(), cp1.port(), cp1); |
| |
| ConnectPoint cp2 = new ConnectPoint(virtualDevice1.id(), PortNumber.portNumber(2)); |
| manager.createVirtualPort(virtualNetwork.id(), cp2.deviceId(), cp2.port(), cp2); |
| |
| ConnectPoint cp3 = new ConnectPoint(virtualDevice2.id(), PortNumber.portNumber(3)); |
| manager.createVirtualPort(virtualNetwork.id(), cp3.deviceId(), cp3.port(), cp3); |
| |
| ConnectPoint cp4 = new ConnectPoint(virtualDevice2.id(), PortNumber.portNumber(4)); |
| manager.createVirtualPort(virtualNetwork.id(), cp4.deviceId(), cp4.port(), cp4); |
| |
| ConnectPoint cp5 = new ConnectPoint(virtualDevice3.id(), PortNumber.portNumber(5)); |
| manager.createVirtualPort(virtualNetwork.id(), cp5.deviceId(), cp5.port(), cp5); |
| |
| ConnectPoint cp6 = new ConnectPoint(virtualDevice3.id(), PortNumber.portNumber(6)); |
| manager.createVirtualPort(virtualNetwork.id(), cp6.deviceId(), cp6.port(), cp6); |
| |
| VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), cp1, cp3); |
| virtualNetworkManagerStore.updateLink(link1, link1.tunnelId(), Link.State.ACTIVE); |
| VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), cp3, cp1); |
| virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.ACTIVE); |
| VirtualLink link3 = manager.createVirtualLink(virtualNetwork.id(), cp4, cp5); |
| virtualNetworkManagerStore.updateLink(link3, link3.tunnelId(), Link.State.ACTIVE); |
| VirtualLink link4 = manager.createVirtualLink(virtualNetwork.id(), cp5, cp4); |
| virtualNetworkManagerStore.updateLink(link4, link4.tunnelId(), Link.State.ACTIVE); |
| VirtualLink link5 = manager.createVirtualLink(virtualNetwork.id(), cp2, cp6); |
| virtualNetworkManagerStore.updateLink(link5, link5.tunnelId(), Link.State.ACTIVE); |
| VirtualLink link6 = manager.createVirtualLink(virtualNetwork.id(), cp6, cp2); |
| virtualNetworkManagerStore.updateLink(link6, link6.tunnelId(), Link.State.ACTIVE); |
| |
| return virtualNetwork; |
| } |
| |
| /** |
| * Tests the currentTopology() method. |
| */ |
| @Test |
| public void testCurrentTopology() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| assertNotNull("The topology should not be null.", topology); |
| } |
| |
| /** |
| * Test isLatest() method using a null topology. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testIsLatestByNullTopology() { |
| manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); |
| VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| |
| // test the isLatest() method with a null topology. |
| topologyService.isLatest(null); |
| } |
| |
| /** |
| * Test isLatest() method. |
| */ |
| @Test |
| public void testIsLatest() { |
| manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); |
| VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| // test the isLatest() method. |
| assertTrue("This should be latest topology", topologyService.isLatest(topology)); |
| |
| VirtualDevice srcVirtualDevice = |
| manager.createVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = |
| manager.createVirtualDevice(virtualNetwork.id(), DID2); |
| |
| // test the isLatest() method where a new device has been added to the current topology. |
| assertFalse("This should not be latest topology", topologyService.isLatest(topology)); |
| |
| topology = topologyService.currentTopology(); |
| ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1)); |
| manager.createVirtualPort(virtualNetwork.id(), src.deviceId(), src.port(), |
| new ConnectPoint(srcVirtualDevice.id(), src.port())); |
| |
| ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2)); |
| manager.createVirtualPort(virtualNetwork.id(), dst.deviceId(), dst.port(), |
| new ConnectPoint(dstVirtualDevice.id(), dst.port())); |
| VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), src, dst); |
| |
| // test the isLatest() method where a new link has been added to the current topology. |
| assertFalse("This should not be latest topology", topologyService.isLatest(topology)); |
| } |
| |
| /** |
| * Test getGraph() method. |
| */ |
| @Test |
| public void testGetGraph() { |
| manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); |
| VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| // test the getGraph() method. |
| assertNotNull("The graph should not be null.", topologyService.getGraph(topology)); |
| } |
| |
| /** |
| * Test getClusters() method. |
| */ |
| @Test |
| public void testGetClusters() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| |
| Topology topology = topologyService.currentTopology(); |
| |
| // test the getClusters() method. |
| assertNotNull("The clusters should not be null.", topologyService.getClusters(topology)); |
| assertEquals("The clusters size did not match.", 2, topologyService.getClusters(topology).size()); |
| } |
| |
| /** |
| * Test getCluster() method using a null cluster identifier. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testGetClusterUsingNullClusterId() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| Set<TopologyCluster> clusters = topologyService.getClusters(topology); |
| TopologyCluster cluster = clusters.stream().findFirst().get(); |
| |
| // test the getCluster() method with a null cluster identifier |
| TopologyCluster cluster1 = topologyService.getCluster(topology, null); |
| } |
| |
| /** |
| * Test getCluster() method. |
| */ |
| @Test |
| public void testGetCluster() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| Set<TopologyCluster> clusters = topologyService.getClusters(topology); |
| assertNotNull("The clusters should not be null.", clusters); |
| assertEquals("The clusters size did not match.", 2, clusters.size()); |
| |
| // test the getCluster() method. |
| TopologyCluster cluster = clusters.stream().findFirst().get(); |
| assertNotNull("The cluster should not be null.", cluster); |
| TopologyCluster cluster1 = topologyService.getCluster(topology, cluster.id()); |
| assertNotNull("The cluster should not be null.", cluster1); |
| assertEquals("The cluster ID did not match.", cluster.id(), cluster1.id()); |
| } |
| |
| /** |
| * Test getClusterDevices() methods with a null cluster. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testGetClusterDevicesUsingNullCluster() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| Set<TopologyCluster> clusters = topologyService.getClusters(topology); |
| |
| // test the getClusterDevices() method using a null cluster. |
| Object[] objects = clusters.stream().toArray(); |
| assertNotNull("The cluster should not be null.", objects); |
| Set<DeviceId> clusterDevices = topologyService.getClusterDevices(topology, null); |
| } |
| |
| /** |
| * Test getClusterLinks() methods with a null cluster. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testGetClusterLinksUsingNullCluster() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| Set<TopologyCluster> clusters = topologyService.getClusters(topology); |
| |
| // test the getClusterLinks() method using a null cluster. |
| Object[] objects = clusters.stream().toArray(); |
| assertNotNull("The cluster should not be null.", objects); |
| Set<Link> clusterLinks = topologyService.getClusterLinks(topology, null); |
| } |
| |
| /** |
| * Test getClusterDevices() and getClusterLinks() methods. |
| */ |
| @Test |
| public void testGetClusterDevicesLinks() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| Set<TopologyCluster> clusters = topologyService.getClusters(topology); |
| assertNotNull("The clusters should not be null.", clusters); |
| assertEquals("The clusters size did not match.", 2, clusters.size()); |
| |
| // test the getClusterDevices() method. |
| Object[] objects = clusters.stream().toArray(); |
| assertNotNull("The cluster should not be null.", objects); |
| Set<DeviceId> clusterDevices = topologyService.getClusterDevices(topology, (TopologyCluster) objects[0]); |
| assertNotNull("The devices should not be null.", clusterDevices); |
| assertEquals("The devices size did not match.", 3, clusterDevices.size()); |
| Set<DeviceId> clusterDevices1 = topologyService.getClusterDevices(topology, (TopologyCluster) objects[1]); |
| assertNotNull("The devices should not be null.", clusterDevices1); |
| assertEquals("The devices size did not match.", 1, clusterDevices1.size()); |
| |
| // test the getClusterLinks() method. |
| Set<Link> clusterLinks = topologyService.getClusterLinks(topology, (TopologyCluster) objects[0]); |
| assertNotNull("The links should not be null.", clusterLinks); |
| assertEquals("The links size did not match.", 6, clusterLinks.size()); |
| Set<Link> clusterLinks1 = topologyService.getClusterLinks(topology, (TopologyCluster) objects[1]); |
| assertNotNull("The links should not be null.", clusterLinks1); |
| assertEquals("The links size did not match.", 0, clusterLinks1.size()); |
| } |
| |
| /** |
| * Test getPaths() method using a null src device identifier. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testGetPathsUsingNullSrcDeviceId() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2); |
| |
| // test the getPaths() method using a null src device identifier. |
| Set<Path> paths = topologyService.getPaths(topology, null, dstVirtualDevice.id()); |
| } |
| |
| /** |
| * Test getPaths() method using a null dst device identifier. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testGetPathsUsingNullDstDeviceId() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2); |
| |
| // test the getPaths() method using a null dst device identifier. |
| Set<Path> paths = topologyService.getPaths(topology, srcVirtualDevice.id(), null); |
| } |
| |
| /** |
| * Test getPaths() method using a null weight. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testGetPathsUsingNullWeight() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2); |
| |
| // test the getPaths() method using a null weight. |
| Set<Path> paths = topologyService.getPaths(topology, srcVirtualDevice.id(), |
| dstVirtualDevice.id(), (LinkWeigher) null); |
| } |
| |
| /** |
| * Test getPaths() and getPaths() by weight methods. |
| */ |
| @Test |
| public void testGetPaths() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2); |
| |
| // test the getPaths() method. |
| Set<Path> paths = topologyService.getPaths(topology, srcVirtualDevice.id(), dstVirtualDevice.id()); |
| assertNotNull("The paths should not be null.", paths); |
| assertEquals("The paths size did not match.", 1, paths.size()); |
| |
| // test the getPaths() by weight method. |
| LinkWeight weight = edge -> 1.0; |
| Set<Path> paths1 = topologyService.getPaths(topology, srcVirtualDevice.id(), dstVirtualDevice.id(), weight); |
| assertNotNull("The paths should not be null.", paths1); |
| assertEquals("The paths size did not match.", 1, paths1.size()); |
| Path path = paths1.iterator().next(); |
| assertEquals("wrong path length", 1, path.links().size()); |
| assertEquals("wrong path cost", 1.0, path.cost(), 0.01); |
| } |
| |
| /** |
| * Test getDisjointPaths() methods using a null src device identifier. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testGetDisjointPathsUsingNullSrcDeviceId() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2); |
| |
| // test the getDisjointPaths() method using a null src device identifier. |
| Set<DisjointPath> paths = topologyService.getDisjointPaths(topology, null, dstVirtualDevice.id()); |
| } |
| |
| /** |
| * Test getDisjointPaths() methods using a null dst device identifier. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testGetDisjointPathsUsingNullDstDeviceId() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2); |
| |
| // test the getDisjointPaths() method using a null dst device identifier. |
| Set<DisjointPath> paths = topologyService.getDisjointPaths(topology, srcVirtualDevice.id(), null); |
| } |
| |
| /** |
| * Test getDisjointPaths() methods using a null weight. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testGetDisjointPathsUsingNullWeight() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2); |
| |
| // test the getDisjointPaths() method using a null weight. |
| Set<DisjointPath> paths = topologyService.getDisjointPaths(topology, srcVirtualDevice.id(), |
| dstVirtualDevice.id(), (LinkWeight) null); |
| } |
| |
| /** |
| * Test getDisjointPaths() methods using a null risk profile. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testGetDisjointPathsUsingNullRiskProfile() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2); |
| |
| // test the getDisjointPaths() method using a null risk profile. |
| Set<DisjointPath> paths = topologyService.getDisjointPaths(topology, srcVirtualDevice.id(), |
| dstVirtualDevice.id(), (Map<Link, Object>) null); |
| } |
| |
| /** |
| * Test getDisjointPaths() methods. |
| */ |
| @Test |
| public void testGetDisjointPaths() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2); |
| |
| // test the getDisjointPaths() method. |
| Set<DisjointPath> paths = topologyService.getDisjointPaths(topology, srcVirtualDevice.id(), |
| dstVirtualDevice.id()); |
| assertNotNull("The paths should not be null.", paths); |
| assertEquals("The paths size did not match.", 1, paths.size()); |
| |
| // test the getDisjointPaths() method using a weight. |
| LinkWeight weight = edge -> 1.0; |
| Set<DisjointPath> paths1 = topologyService.getDisjointPaths(topology, srcVirtualDevice.id(), |
| dstVirtualDevice.id(), weight); |
| assertNotNull("The paths should not be null.", paths1); |
| assertEquals("The paths size did not match.", 1, paths1.size()); |
| } |
| |
| /** |
| * Test isInfrastructure() method using a null connect point. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testIsInfrastructureUsingNullConnectPoint() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| // test the isInfrastructure() method using a null connect point. |
| Boolean isInfrastructure = topologyService.isInfrastructure(topology, null); |
| } |
| |
| /** |
| * Test isInfrastructure() method. |
| */ |
| @Test |
| public void testIsInfrastructure() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID4); |
| ConnectPoint cp1 = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1)); |
| ConnectPoint cp2 = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2)); |
| |
| // test the isInfrastructure() method. |
| Boolean isInfrastructure = topologyService.isInfrastructure(topology, cp1); |
| assertTrue("The connect point should be infrastructure.", isInfrastructure); |
| |
| isInfrastructure = topologyService.isInfrastructure(topology, cp2); |
| assertFalse("The connect point should not be infrastructure.", isInfrastructure); |
| } |
| |
| /** |
| * Test isBroadcastPoint() method using a null connect point. |
| */ |
| @Test(expected = NullPointerException.class) |
| public void testIsBroadcastUsingNullConnectPoint() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| // test the isInfrastructure() method using a null connect point. |
| Boolean isInfrastructure = topologyService.isBroadcastPoint(topology, null); |
| } |
| |
| /** |
| * Test isBroadcastPoint() method. |
| */ |
| @Test |
| public void testIsBroadcastPoint() { |
| VirtualNetwork virtualNetwork = setupVirtualNetworkTopology(); |
| |
| TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class); |
| Topology topology = topologyService.currentTopology(); |
| |
| VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1); |
| ConnectPoint cp = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1)); |
| |
| // test the isBroadcastPoint() method. |
| Boolean isBroadcastPoint = topologyService.isBroadcastPoint(topology, cp); |
| assertTrue("The connect point should be a broadcast point.", isBroadcastPoint); |
| } |
| |
| /** |
| * Return the virtual device matching the device identifier. |
| * |
| * @param networkId virtual network identifier |
| * @param deviceId device identifier |
| * @return virtual device |
| */ |
| private VirtualDevice getVirtualDevice(NetworkId networkId, DeviceId deviceId) { |
| Optional<VirtualDevice> foundDevice = manager.getVirtualDevices(networkId) |
| .stream() |
| .filter(device -> deviceId.equals(device.id())) |
| .findFirst(); |
| if (foundDevice.isPresent()) { |
| return foundDevice.get(); |
| } |
| return null; |
| } |
| |
| /** |
| * Core service test class. |
| */ |
| private class TestCoreService extends CoreServiceAdapter { |
| |
| ApplicationId appId; |
| |
| @Override |
| public IdGenerator getIdGenerator(String topic) { |
| return new IdGenerator() { |
| private AtomicLong counter = new AtomicLong(0); |
| |
| @Override |
| public long getNewId() { |
| return counter.getAndIncrement(); |
| } |
| }; |
| } |
| |
| @Override |
| public ApplicationId registerApplication(String name) { |
| appId = new DefaultApplicationId(1, name); |
| return appId; |
| } |
| |
| @Override |
| public ApplicationId getAppId(String name) { |
| return appId; |
| } |
| } |
| |
| } |