Brian Stanke
Committed by Gerrit Code Review

ONOS-2184 - Adding VirtualNetworkTopologyService using Virtual networks.

Change-Id: Ib7071314b49e23dc67459f70e7ca345f8a97db4e
...@@ -35,6 +35,8 @@ public abstract class TestDeviceParams { ...@@ -35,6 +35,8 @@ public abstract class TestDeviceParams {
35 protected static final ProviderId PID = new ProviderId("of", "foo"); 35 protected static final ProviderId PID = new ProviderId("of", "foo");
36 protected static final DeviceId DID1 = deviceId("of:foo"); 36 protected static final DeviceId DID1 = deviceId("of:foo");
37 protected static final DeviceId DID2 = deviceId("of:bar"); 37 protected static final DeviceId DID2 = deviceId("of:bar");
38 + protected static final DeviceId DID3 = deviceId("of:who");
39 + protected static final DeviceId DID4 = deviceId("of:what");
38 protected static final MacAddress MAC1 = MacAddress.valueOf("00:11:00:00:00:01"); 40 protected static final MacAddress MAC1 = MacAddress.valueOf("00:11:00:00:00:01");
39 protected static final MacAddress MAC2 = MacAddress.valueOf("00:22:00:00:00:02"); 41 protected static final MacAddress MAC2 = MacAddress.valueOf("00:22:00:00:00:02");
40 protected static final VlanId VLAN1 = VlanId.vlanId((short) 11); 42 protected static final VlanId VLAN1 = VlanId.vlanId((short) 11);
......
1 COMPILE_DEPS = [ 1 COMPILE_DEPS = [
2 '//lib:CORE_DEPS', 2 '//lib:CORE_DEPS',
3 + '//core/common:onos-core-common',
3 '//incubator/api:onos-incubator-api', 4 '//incubator/api:onos-incubator-api',
4 ] 5 ]
5 6
......
...@@ -47,6 +47,7 @@ import org.onosproject.net.device.DeviceService; ...@@ -47,6 +47,7 @@ import org.onosproject.net.device.DeviceService;
47 import org.onosproject.net.link.LinkService; 47 import org.onosproject.net.link.LinkService;
48 import org.onosproject.net.provider.AbstractListenerProviderRegistry; 48 import org.onosproject.net.provider.AbstractListenerProviderRegistry;
49 import org.onosproject.net.provider.AbstractProviderService; 49 import org.onosproject.net.provider.AbstractProviderService;
50 +import org.onosproject.net.topology.TopologyService;
50 import org.slf4j.Logger; 51 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory; 52 import org.slf4j.LoggerFactory;
52 53
...@@ -287,6 +288,8 @@ public class VirtualNetworkManager ...@@ -287,6 +288,8 @@ public class VirtualNetworkManager
287 service = new VirtualNetworkDeviceService(this, network); 288 service = new VirtualNetworkDeviceService(this, network);
288 } else if (serviceKey.serviceClass.equals(LinkService.class)) { 289 } else if (serviceKey.serviceClass.equals(LinkService.class)) {
289 service = new VirtualNetworkLinkService(this, network); 290 service = new VirtualNetworkLinkService(this, network);
291 + } else if (serviceKey.serviceClass.equals(TopologyService.class)) {
292 + service = new VirtualNetworkTopologyService(this, network);
290 } else { 293 } else {
291 return null; 294 return null;
292 } 295 }
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.incubator.net.virtual.impl;
18 +
19 +import org.onosproject.common.DefaultTopology;
20 +import org.onosproject.event.AbstractListenerManager;
21 +import org.onosproject.incubator.net.virtual.VirtualNetwork;
22 +import org.onosproject.incubator.net.virtual.VirtualNetworkService;
23 +import org.onosproject.net.ConnectPoint;
24 +import org.onosproject.net.Device;
25 +import org.onosproject.net.DeviceId;
26 +import org.onosproject.net.DisjointPath;
27 +import org.onosproject.net.Link;
28 +import org.onosproject.net.Path;
29 +import org.onosproject.net.topology.ClusterId;
30 +import org.onosproject.net.topology.DefaultGraphDescription;
31 +import org.onosproject.net.topology.LinkWeight;
32 +import org.onosproject.net.topology.Topology;
33 +import org.onosproject.net.topology.TopologyCluster;
34 +import org.onosproject.net.topology.TopologyEvent;
35 +import org.onosproject.net.topology.TopologyGraph;
36 +import org.onosproject.net.topology.TopologyListener;
37 +import org.onosproject.net.topology.TopologyService;
38 +
39 +import java.util.Map;
40 +import java.util.Set;
41 +import java.util.stream.Collectors;
42 +
43 +import static com.google.common.base.Preconditions.checkArgument;
44 +import static com.google.common.base.Preconditions.checkNotNull;
45 +import static org.onosproject.incubator.net.virtual.DefaultVirtualLink.PID;
46 +
47 +/**
48 + * Topology service implementation built on the virtual network service.
49 + */
50 +public class VirtualNetworkTopologyService extends AbstractListenerManager<TopologyEvent, TopologyListener>
51 + implements TopologyService, VnetService {
52 +
53 + private static final String NETWORK_NULL = "Network ID cannot be null";
54 + private static final String TOPOLOGY_NULL = "Topology cannot be null";
55 + private static final String DEVICE_ID_NULL = "Device ID cannot be null";
56 + private static final String CLUSTER_ID_NULL = "Cluster ID cannot be null";
57 + private static final String CLUSTER_NULL = "Topology cluster cannot be null";
58 + private static final String CONNECTION_POINT_NULL = "Connection point cannot be null";
59 + private static final String LINK_WEIGHT_NULL = "Link weight cannot be null";
60 +
61 + private final VirtualNetwork network;
62 + private final VirtualNetworkService manager;
63 +
64 + /**
65 + * Creates a new VirtualNetworkTopologyService object.
66 + *
67 + * @param virtualNetworkManager virtual network manager service
68 + * @param network virtual network
69 + */
70 + public VirtualNetworkTopologyService(VirtualNetworkService virtualNetworkManager, VirtualNetwork network) {
71 + checkNotNull(network, NETWORK_NULL);
72 + this.network = network;
73 + this.manager = virtualNetworkManager;
74 + }
75 +
76 + @Override
77 + public Topology currentTopology() {
78 + Iterable<Device> devices = manager.getVirtualDevices(network().id())
79 + .stream()
80 + .collect(Collectors.toSet());
81 + Iterable<Link> links = manager.getVirtualLinks(network().id())
82 + .stream()
83 + .collect(Collectors.toSet());
84 +
85 + DefaultGraphDescription graph = new DefaultGraphDescription(System.nanoTime(), System.currentTimeMillis(),
86 + devices, links);
87 + return new DefaultTopology(PID, graph);
88 + }
89 +
90 + @Override
91 + public boolean isLatest(Topology topology) {
92 + Topology currentTopology = currentTopology();
93 + return defaultTopology(topology).getGraph().equals(defaultTopology(currentTopology).getGraph());
94 + }
95 +
96 + @Override
97 + public TopologyGraph getGraph(Topology topology) {
98 + return defaultTopology(topology).getGraph();
99 + }
100 +
101 + // Validates the specified topology and returns it as a default
102 + private DefaultTopology defaultTopology(Topology topology) {
103 + checkNotNull(topology, TOPOLOGY_NULL);
104 + checkArgument(topology instanceof DefaultTopology,
105 + "Topology class %s not supported", topology.getClass());
106 + return (DefaultTopology) topology;
107 + }
108 +
109 + @Override
110 + public Set<TopologyCluster> getClusters(Topology topology) {
111 + return defaultTopology(topology).getClusters();
112 + }
113 +
114 + @Override
115 + public TopologyCluster getCluster(Topology topology, ClusterId clusterId) {
116 + checkNotNull(clusterId, CLUSTER_ID_NULL);
117 + return defaultTopology(topology).getCluster(clusterId);
118 + }
119 +
120 + @Override
121 + public Set<DeviceId> getClusterDevices(Topology topology, TopologyCluster cluster) {
122 + checkNotNull(cluster, CLUSTER_NULL);
123 + return defaultTopology(topology).getClusterDevices(cluster);
124 + }
125 +
126 + @Override
127 + public Set<Link> getClusterLinks(Topology topology, TopologyCluster cluster) {
128 + checkNotNull(cluster, CLUSTER_NULL);
129 + return defaultTopology(topology).getClusterLinks(cluster);
130 + }
131 +
132 + @Override
133 + public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst) {
134 + checkNotNull(src, DEVICE_ID_NULL);
135 + checkNotNull(dst, DEVICE_ID_NULL);
136 + return defaultTopology(topology).getPaths(src, dst);
137 + }
138 +
139 + @Override
140 + public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight) {
141 + checkNotNull(src, DEVICE_ID_NULL);
142 + checkNotNull(dst, DEVICE_ID_NULL);
143 + checkNotNull(weight, LINK_WEIGHT_NULL);
144 + return defaultTopology(topology).getPaths(src, dst, weight);
145 + }
146 +
147 + @Override
148 + public Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst) {
149 + checkNotNull(src, DEVICE_ID_NULL);
150 + checkNotNull(dst, DEVICE_ID_NULL);
151 + return defaultTopology(topology).getDisjointPaths(src, dst);
152 + }
153 +
154 + @Override
155 + public Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight) {
156 + checkNotNull(src, DEVICE_ID_NULL);
157 + checkNotNull(dst, DEVICE_ID_NULL);
158 + checkNotNull(weight, LINK_WEIGHT_NULL);
159 + return defaultTopology(topology).getDisjointPaths(src, dst, weight);
160 + }
161 +
162 + @Override
163 + public Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst,
164 + Map<Link, Object> riskProfile) {
165 + checkNotNull(src, DEVICE_ID_NULL);
166 + checkNotNull(dst, DEVICE_ID_NULL);
167 + return defaultTopology(topology).getDisjointPaths(src, dst, riskProfile);
168 + }
169 +
170 + @Override
171 + public Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst,
172 + LinkWeight weight, Map<Link, Object> riskProfile) {
173 + checkNotNull(src, DEVICE_ID_NULL);
174 + checkNotNull(dst, DEVICE_ID_NULL);
175 + checkNotNull(weight, LINK_WEIGHT_NULL);
176 + return defaultTopology(topology).getDisjointPaths(src, dst, weight, riskProfile);
177 + }
178 +
179 + @Override
180 + public boolean isInfrastructure(Topology topology, ConnectPoint connectPoint) {
181 + checkNotNull(connectPoint, CONNECTION_POINT_NULL);
182 + return defaultTopology(topology).isInfrastructure(connectPoint);
183 + }
184 +
185 + @Override
186 + public boolean isBroadcastPoint(Topology topology, ConnectPoint connectPoint) {
187 + checkNotNull(connectPoint, CONNECTION_POINT_NULL);
188 + return defaultTopology(topology).isBroadcastPoint(connectPoint);
189 + }
190 +
191 + @Override
192 + public VirtualNetwork network() {
193 + return network;
194 + }
195 +}
...@@ -32,11 +32,11 @@ import org.onosproject.incubator.net.virtual.VirtualPort; ...@@ -32,11 +32,11 @@ import org.onosproject.incubator.net.virtual.VirtualPort;
32 import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore; 32 import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
33 import org.onosproject.net.DefaultPort; 33 import org.onosproject.net.DefaultPort;
34 import org.onosproject.net.Device; 34 import org.onosproject.net.Device;
35 -import org.onosproject.net.DeviceId;
36 import org.onosproject.net.MastershipRole; 35 import org.onosproject.net.MastershipRole;
37 import org.onosproject.net.NetTestTools; 36 import org.onosproject.net.NetTestTools;
38 import org.onosproject.net.Port; 37 import org.onosproject.net.Port;
39 import org.onosproject.net.PortNumber; 38 import org.onosproject.net.PortNumber;
39 +import org.onosproject.net.TestDeviceParams;
40 import org.onosproject.net.device.DeviceService; 40 import org.onosproject.net.device.DeviceService;
41 import org.onosproject.store.service.TestStorageService; 41 import org.onosproject.store.service.TestStorageService;
42 42
...@@ -48,11 +48,8 @@ import static org.junit.Assert.*; ...@@ -48,11 +48,8 @@ import static org.junit.Assert.*;
48 /** 48 /**
49 * Junit tests for VirtualNetworkDeviceService. 49 * Junit tests for VirtualNetworkDeviceService.
50 */ 50 */
51 -public class VirtualNetworkDeviceServiceTest { 51 +public class VirtualNetworkDeviceServiceTest extends TestDeviceParams {
52 private final String tenantIdValue1 = "TENANT_ID1"; 52 private final String tenantIdValue1 = "TENANT_ID1";
53 - private final String deviceIdValue1 = "DEVICE_ID1";
54 - private final String deviceIdValue2 = "DEVICE_ID2";
55 - private final String deviceIdValue3 = "DEVICE_ID3";
56 53
57 private VirtualNetworkManager manager; 54 private VirtualNetworkManager manager;
58 private DistributedVirtualNetworkStore virtualNetworkManagerStore; 55 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
...@@ -88,8 +85,8 @@ public class VirtualNetworkDeviceServiceTest { ...@@ -88,8 +85,8 @@ public class VirtualNetworkDeviceServiceTest {
88 public void testGetDevices() { 85 public void testGetDevices() {
89 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 86 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
90 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 87 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
91 - VirtualDevice device1 = manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue1)); 88 + VirtualDevice device1 = manager.createVirtualDevice(virtualNetwork.id(), DID1);
92 - VirtualDevice device2 = manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2)); 89 + VirtualDevice device2 = manager.createVirtualDevice(virtualNetwork.id(), DID2);
93 90
94 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class); 91 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
95 92
...@@ -106,15 +103,15 @@ public class VirtualNetworkDeviceServiceTest { ...@@ -106,15 +103,15 @@ public class VirtualNetworkDeviceServiceTest {
106 103
107 // test the getDevice() method 104 // test the getDevice() method
108 assertEquals("The expect device did not match.", device1, 105 assertEquals("The expect device did not match.", device1,
109 - deviceService.getDevice(DeviceId.deviceId(deviceIdValue1))); 106 + deviceService.getDevice(DID1));
110 assertNotEquals("The expect device should not have matched.", device1, 107 assertNotEquals("The expect device should not have matched.", device1,
111 - deviceService.getDevice(DeviceId.deviceId(deviceIdValue2))); 108 + deviceService.getDevice(DID2));
112 109
113 // test the isAvailable() method 110 // test the isAvailable() method
114 assertTrue("The expect device availability did not match.", 111 assertTrue("The expect device availability did not match.",
115 - deviceService.isAvailable(DeviceId.deviceId(deviceIdValue1))); 112 + deviceService.isAvailable(DID1));
116 assertFalse("The expect device availability did not match.", 113 assertFalse("The expect device availability did not match.",
117 - deviceService.isAvailable(DeviceId.deviceId(deviceIdValue3))); 114 + deviceService.isAvailable(DID3));
118 } 115 }
119 116
120 /** 117 /**
...@@ -163,8 +160,8 @@ public class VirtualNetworkDeviceServiceTest { ...@@ -163,8 +160,8 @@ public class VirtualNetworkDeviceServiceTest {
163 public void testGetDeviceType() { 160 public void testGetDeviceType() {
164 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 161 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
165 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 162 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
166 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue1)); 163 + manager.createVirtualDevice(virtualNetwork.id(), DID1);
167 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2)); 164 + manager.createVirtualDevice(virtualNetwork.id(), DID2);
168 165
169 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class); 166 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
170 167
...@@ -203,7 +200,7 @@ public class VirtualNetworkDeviceServiceTest { ...@@ -203,7 +200,7 @@ public class VirtualNetworkDeviceServiceTest {
203 200
204 // test the getRole() method 201 // test the getRole() method
205 assertEquals("The expect device role did not match.", MastershipRole.MASTER, 202 assertEquals("The expect device role did not match.", MastershipRole.MASTER,
206 - deviceService.getRole(DeviceId.deviceId(deviceIdValue1))); 203 + deviceService.getRole(DID1));
207 } 204 }
208 205
209 /** 206 /**
...@@ -226,9 +223,8 @@ public class VirtualNetworkDeviceServiceTest { ...@@ -226,9 +223,8 @@ public class VirtualNetworkDeviceServiceTest {
226 public void testGetPorts() { 223 public void testGetPorts() {
227 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 224 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
228 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 225 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
229 - VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), 226 + VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
230 - DeviceId.deviceId(deviceIdValue1)); 227 + manager.createVirtualDevice(virtualNetwork.id(), DID2);
231 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2));
232 228
233 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class); 229 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
234 230
...@@ -239,9 +235,9 @@ public class VirtualNetworkDeviceServiceTest { ...@@ -239,9 +235,9 @@ public class VirtualNetworkDeviceServiceTest {
239 235
240 // test the getPorts() method 236 // test the getPorts() method
241 assertEquals("The port set size did not match.", 2, 237 assertEquals("The port set size did not match.", 2,
242 - deviceService.getPorts(DeviceId.deviceId(deviceIdValue1)).size()); 238 + deviceService.getPorts(DID1).size());
243 assertEquals("The port set size did not match.", 0, 239 assertEquals("The port set size did not match.", 0,
244 - deviceService.getPorts(DeviceId.deviceId(deviceIdValue2)).size()); 240 + deviceService.getPorts(DID2).size());
245 } 241 }
246 242
247 /** 243 /**
...@@ -251,9 +247,8 @@ public class VirtualNetworkDeviceServiceTest { ...@@ -251,9 +247,8 @@ public class VirtualNetworkDeviceServiceTest {
251 public void testGetPort() { 247 public void testGetPort() {
252 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 248 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
253 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 249 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
254 - VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), 250 + VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
255 - DeviceId.deviceId(deviceIdValue1)); 251 + manager.createVirtualDevice(virtualNetwork.id(), DID2);
256 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2));
257 252
258 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class); 253 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
259 254
...@@ -265,9 +260,9 @@ public class VirtualNetworkDeviceServiceTest { ...@@ -265,9 +260,9 @@ public class VirtualNetworkDeviceServiceTest {
265 260
266 // test the getPort() method 261 // test the getPort() method
267 assertEquals("The port did not match as expected.", virtualPort1, 262 assertEquals("The port did not match as expected.", virtualPort1,
268 - deviceService.getPort(DeviceId.deviceId(deviceIdValue1), PortNumber.portNumber(1))); 263 + deviceService.getPort(DID1, PortNumber.portNumber(1)));
269 assertNotEquals("The port did not match as expected.", virtualPort1, 264 assertNotEquals("The port did not match as expected.", virtualPort1,
270 - deviceService.getPort(DeviceId.deviceId(deviceIdValue1), PortNumber.portNumber(3))); 265 + deviceService.getPort(DID1, PortNumber.portNumber(3)));
271 } 266 }
272 267
273 /** 268 /**
...@@ -290,15 +285,14 @@ public class VirtualNetworkDeviceServiceTest { ...@@ -290,15 +285,14 @@ public class VirtualNetworkDeviceServiceTest {
290 public void testGetPortStatistics() { 285 public void testGetPortStatistics() {
291 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 286 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
292 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 287 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
293 - VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), 288 + VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
294 - DeviceId.deviceId(deviceIdValue1)); 289 + manager.createVirtualDevice(virtualNetwork.id(), DID2);
295 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2));
296 290
297 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class); 291 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
298 292
299 // test the getPortStatistics() method 293 // test the getPortStatistics() method
300 assertEquals("The port statistics set size did not match.", 0, 294 assertEquals("The port statistics set size did not match.", 0,
301 - deviceService.getPortStatistics(DeviceId.deviceId(deviceIdValue1)).size()); 295 + deviceService.getPortStatistics(DID1).size());
302 } 296 }
303 297
304 /** 298 /**
...@@ -321,15 +315,14 @@ public class VirtualNetworkDeviceServiceTest { ...@@ -321,15 +315,14 @@ public class VirtualNetworkDeviceServiceTest {
321 public void testGetPortDeltaStatistics() { 315 public void testGetPortDeltaStatistics() {
322 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 316 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
323 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 317 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
324 - VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), 318 + VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
325 - DeviceId.deviceId(deviceIdValue1)); 319 + manager.createVirtualDevice(virtualNetwork.id(), DID2);
326 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2));
327 320
328 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class); 321 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
329 322
330 // test the getPortDeltaStatistics() method 323 // test the getPortDeltaStatistics() method
331 assertEquals("The port delta statistics set size did not match.", 0, 324 assertEquals("The port delta statistics set size did not match.", 0,
332 - deviceService.getPortDeltaStatistics(DeviceId.deviceId(deviceIdValue1)).size()); 325 + deviceService.getPortDeltaStatistics(DID1).size());
333 } 326 }
334 327
335 /** 328 /**
......
...@@ -31,10 +31,10 @@ import org.onosproject.incubator.net.virtual.VirtualLink; ...@@ -31,10 +31,10 @@ import org.onosproject.incubator.net.virtual.VirtualLink;
31 import org.onosproject.incubator.net.virtual.VirtualNetwork; 31 import org.onosproject.incubator.net.virtual.VirtualNetwork;
32 import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore; 32 import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
33 import org.onosproject.net.ConnectPoint; 33 import org.onosproject.net.ConnectPoint;
34 -import org.onosproject.net.DeviceId;
35 import org.onosproject.net.Link; 34 import org.onosproject.net.Link;
36 import org.onosproject.net.NetTestTools; 35 import org.onosproject.net.NetTestTools;
37 import org.onosproject.net.PortNumber; 36 import org.onosproject.net.PortNumber;
37 +import org.onosproject.net.TestDeviceParams;
38 import org.onosproject.net.link.LinkService; 38 import org.onosproject.net.link.LinkService;
39 import org.onosproject.store.service.TestStorageService; 39 import org.onosproject.store.service.TestStorageService;
40 40
...@@ -47,12 +47,9 @@ import static org.junit.Assert.assertNotEquals; ...@@ -47,12 +47,9 @@ import static org.junit.Assert.assertNotEquals;
47 /** 47 /**
48 * Junit tests for VirtualNetworkLinkService. 48 * Junit tests for VirtualNetworkLinkService.
49 */ 49 */
50 -public class VirtualNetworkLinkServiceTest { 50 +public class VirtualNetworkLinkServiceTest extends TestDeviceParams {
51 51
52 private final String tenantIdValue1 = "TENANT_ID1"; 52 private final String tenantIdValue1 = "TENANT_ID1";
53 - private final String deviceIdValue1 = "DEVICE_ID1";
54 - private final String deviceIdValue2 = "DEVICE_ID2";
55 - private final String deviceIdValue3 = "DEVICE_ID3";
56 53
57 private VirtualNetworkManager manager; 54 private VirtualNetworkManager manager;
58 private DistributedVirtualNetworkStore virtualNetworkManagerStore; 55 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
...@@ -92,9 +89,9 @@ public class VirtualNetworkLinkServiceTest { ...@@ -92,9 +89,9 @@ public class VirtualNetworkLinkServiceTest {
92 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 89 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
93 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 90 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
94 VirtualDevice srcVirtualDevice = 91 VirtualDevice srcVirtualDevice =
95 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue1)); 92 + manager.createVirtualDevice(virtualNetwork.id(), DID1);
96 VirtualDevice dstVirtualDevice = 93 VirtualDevice dstVirtualDevice =
97 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2)); 94 + manager.createVirtualDevice(virtualNetwork.id(), DID2);
98 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1)); 95 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
99 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2)); 96 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
100 VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), src, dst); 97 VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), src, dst);
...@@ -134,27 +131,27 @@ public class VirtualNetworkLinkServiceTest { ...@@ -134,27 +131,27 @@ public class VirtualNetworkLinkServiceTest {
134 131
135 // test the getDeviceLinks() method 132 // test the getDeviceLinks() method
136 assertEquals("The link set size did not match.", 2, 133 assertEquals("The link set size did not match.", 2,
137 - linkService.getDeviceLinks(DeviceId.deviceId(deviceIdValue1)).size()); 134 + linkService.getDeviceLinks(DID1).size());
138 assertEquals("The link set size did not match.", 2, 135 assertEquals("The link set size did not match.", 2,
139 - linkService.getDeviceLinks(DeviceId.deviceId(deviceIdValue2)).size()); 136 + linkService.getDeviceLinks(DID2).size());
140 assertEquals("The link set size did not match.", 0, 137 assertEquals("The link set size did not match.", 0,
141 - linkService.getDeviceLinks(DeviceId.deviceId(deviceIdValue3)).size()); 138 + linkService.getDeviceLinks(DID3).size());
142 139
143 // test the getDeviceEgressLinks() method 140 // test the getDeviceEgressLinks() method
144 assertEquals("The link set size did not match.", 1, 141 assertEquals("The link set size did not match.", 1,
145 - linkService.getDeviceEgressLinks(DeviceId.deviceId(deviceIdValue1)).size()); 142 + linkService.getDeviceEgressLinks(DID1).size());
146 assertEquals("The link set size did not match.", 1, 143 assertEquals("The link set size did not match.", 1,
147 - linkService.getDeviceEgressLinks(DeviceId.deviceId(deviceIdValue2)).size()); 144 + linkService.getDeviceEgressLinks(DID2).size());
148 assertEquals("The link set size did not match.", 0, 145 assertEquals("The link set size did not match.", 0,
149 - linkService.getDeviceEgressLinks(DeviceId.deviceId(deviceIdValue3)).size()); 146 + linkService.getDeviceEgressLinks(DID3).size());
150 147
151 // test the getDeviceIngressLinks() method 148 // test the getDeviceIngressLinks() method
152 assertEquals("The link set size did not match.", 1, 149 assertEquals("The link set size did not match.", 1,
153 - linkService.getDeviceIngressLinks(DeviceId.deviceId(deviceIdValue1)).size()); 150 + linkService.getDeviceIngressLinks(DID1).size());
154 assertEquals("The link set size did not match.", 1, 151 assertEquals("The link set size did not match.", 1,
155 - linkService.getDeviceIngressLinks(DeviceId.deviceId(deviceIdValue2)).size()); 152 + linkService.getDeviceIngressLinks(DID2).size());
156 assertEquals("The link set size did not match.", 0, 153 assertEquals("The link set size did not match.", 0,
157 - linkService.getDeviceIngressLinks(DeviceId.deviceId(deviceIdValue3)).size()); 154 + linkService.getDeviceIngressLinks(DID3).size());
158 155
159 // test the getEgressLinks() method 156 // test the getEgressLinks() method
160 assertEquals("The link set size did not match.", 1, 157 assertEquals("The link set size did not match.", 1,
...@@ -182,9 +179,9 @@ public class VirtualNetworkLinkServiceTest { ...@@ -182,9 +179,9 @@ public class VirtualNetworkLinkServiceTest {
182 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 179 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
183 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 180 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
184 VirtualDevice srcVirtualDevice = 181 VirtualDevice srcVirtualDevice =
185 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue1)); 182 + manager.createVirtualDevice(virtualNetwork.id(), DID1);
186 VirtualDevice dstVirtualDevice = 183 VirtualDevice dstVirtualDevice =
187 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2)); 184 + manager.createVirtualDevice(virtualNetwork.id(), DID2);
188 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1)); 185 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
189 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2)); 186 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
190 manager.createVirtualLink(virtualNetwork.id(), src, dst); 187 manager.createVirtualLink(virtualNetwork.id(), src, dst);
...@@ -205,9 +202,9 @@ public class VirtualNetworkLinkServiceTest { ...@@ -205,9 +202,9 @@ public class VirtualNetworkLinkServiceTest {
205 manager.registerTenantId(TenantId.tenantId(tenantIdValue1)); 202 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
206 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1)); 203 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
207 VirtualDevice srcVirtualDevice = 204 VirtualDevice srcVirtualDevice =
208 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue1)); 205 + manager.createVirtualDevice(virtualNetwork.id(), DID1);
209 VirtualDevice dstVirtualDevice = 206 VirtualDevice dstVirtualDevice =
210 - manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2)); 207 + manager.createVirtualDevice(virtualNetwork.id(), DID2);
211 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1)); 208 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
212 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2)); 209 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
213 manager.createVirtualLink(virtualNetwork.id(), src, dst); 210 manager.createVirtualLink(virtualNetwork.id(), src, dst);
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.incubator.net.virtual.impl;
18 +
19 +import org.junit.After;
20 +import org.junit.Before;
21 +import org.junit.Test;
22 +import org.onlab.junit.TestUtils;
23 +import org.onosproject.common.event.impl.TestEventDispatcher;
24 +import org.onosproject.core.CoreService;
25 +import org.onosproject.core.CoreServiceAdapter;
26 +import org.onosproject.core.IdGenerator;
27 +import org.onosproject.incubator.net.virtual.NetworkId;
28 +import org.onosproject.incubator.net.virtual.TenantId;
29 +import org.onosproject.incubator.net.virtual.VirtualDevice;
30 +import org.onosproject.incubator.net.virtual.VirtualLink;
31 +import org.onosproject.incubator.net.virtual.VirtualNetwork;
32 +import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
33 +import org.onosproject.net.ConnectPoint;
34 +import org.onosproject.net.DeviceId;
35 +import org.onosproject.net.DisjointPath;
36 +import org.onosproject.net.Link;
37 +import org.onosproject.net.NetTestTools;
38 +import org.onosproject.net.Path;
39 +import org.onosproject.net.PortNumber;
40 +import org.onosproject.net.TestDeviceParams;
41 +import org.onosproject.net.topology.LinkWeight;
42 +import org.onosproject.net.topology.Topology;
43 +import org.onosproject.net.topology.TopologyCluster;
44 +import org.onosproject.net.topology.TopologyService;
45 +import org.onosproject.store.service.TestStorageService;
46 +
47 +import java.util.Map;
48 +import java.util.Optional;
49 +import java.util.Set;
50 +import java.util.concurrent.atomic.AtomicLong;
51 +
52 +import static junit.framework.TestCase.assertTrue;
53 +import static org.junit.Assert.*;
54 +
55 +/**
56 + * Junit tests for VirtualNetworkTopologyService.
57 + */
58 +public class VirtualNetworkTopologyServiceTest extends TestDeviceParams {
59 +
60 + private final String tenantIdValue1 = "TENANT_ID1";
61 +
62 + private VirtualNetworkManager manager;
63 + private DistributedVirtualNetworkStore virtualNetworkManagerStore;
64 + private CoreService coreService;
65 +
66 + @Before
67 + public void setUp() throws Exception {
68 + virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
69 +
70 + coreService = new VirtualNetworkTopologyServiceTest.TestCoreService();
71 + virtualNetworkManagerStore.setCoreService(coreService);
72 + TestUtils.setField(coreService, "coreService", new VirtualNetworkTopologyServiceTest.TestCoreService());
73 + TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
74 + virtualNetworkManagerStore.activate();
75 +
76 + manager = new VirtualNetworkManager();
77 + manager.store = virtualNetworkManagerStore;
78 + NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
79 + manager.activate();
80 + }
81 +
82 + @After
83 + public void tearDown() {
84 + virtualNetworkManagerStore.deactivate();
85 + manager.deactivate();
86 + NetTestTools.injectEventDispatcher(manager, null);
87 + }
88 +
89 + /**
90 + * Method to create the virtual network for further testing.
91 + *
92 + * @return virtual network
93 + */
94 + private VirtualNetwork setupVirtualNetworkTopology() {
95 + manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
96 + VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
97 + VirtualDevice virtualDevice1 =
98 + manager.createVirtualDevice(virtualNetwork.id(), DID1);
99 + VirtualDevice virtualDevice2 =
100 + manager.createVirtualDevice(virtualNetwork.id(), DID2);
101 + VirtualDevice virtualDevice3 =
102 + manager.createVirtualDevice(virtualNetwork.id(), DID3);
103 + VirtualDevice virtualDevice4 =
104 + manager.createVirtualDevice(virtualNetwork.id(), DID4);
105 +
106 + ConnectPoint cp1 = new ConnectPoint(virtualDevice1.id(), PortNumber.portNumber(1));
107 + ConnectPoint cp2 = new ConnectPoint(virtualDevice1.id(), PortNumber.portNumber(2));
108 + ConnectPoint cp3 = new ConnectPoint(virtualDevice2.id(), PortNumber.portNumber(3));
109 + ConnectPoint cp4 = new ConnectPoint(virtualDevice2.id(), PortNumber.portNumber(4));
110 + ConnectPoint cp5 = new ConnectPoint(virtualDevice3.id(), PortNumber.portNumber(5));
111 + ConnectPoint cp6 = new ConnectPoint(virtualDevice3.id(), PortNumber.portNumber(6));
112 + VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), cp1, cp3);
113 + virtualNetworkManagerStore.updateLink(link1, link1.tunnelId(), Link.State.ACTIVE);
114 + VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), cp3, cp1);
115 + virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.ACTIVE);
116 + VirtualLink link3 = manager.createVirtualLink(virtualNetwork.id(), cp4, cp5);
117 + virtualNetworkManagerStore.updateLink(link3, link3.tunnelId(), Link.State.ACTIVE);
118 + VirtualLink link4 = manager.createVirtualLink(virtualNetwork.id(), cp5, cp4);
119 + virtualNetworkManagerStore.updateLink(link4, link4.tunnelId(), Link.State.ACTIVE);
120 + VirtualLink link5 = manager.createVirtualLink(virtualNetwork.id(), cp2, cp6);
121 + virtualNetworkManagerStore.updateLink(link5, link5.tunnelId(), Link.State.ACTIVE);
122 + VirtualLink link6 = manager.createVirtualLink(virtualNetwork.id(), cp6, cp2);
123 + virtualNetworkManagerStore.updateLink(link6, link6.tunnelId(), Link.State.ACTIVE);
124 +
125 + return virtualNetwork;
126 + }
127 +
128 + /**
129 + * Tests the currentTopology() method.
130 + */
131 + @Test
132 + public void testCurrentTopology() {
133 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
134 +
135 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
136 + Topology topology = topologyService.currentTopology();
137 + assertNotNull("The topology should not be null.", topology);
138 + }
139 +
140 + /**
141 + * Test isLatest() method using a null topology.
142 + */
143 + @Test(expected = NullPointerException.class)
144 + public void testIsLatestByNullTopology() {
145 + manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
146 + VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
147 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
148 +
149 + // test the isLatest() method with a null topology.
150 + topologyService.isLatest(null);
151 + }
152 +
153 + /**
154 + * Test isLatest() method.
155 + */
156 + @Test
157 + public void testIsLatest() {
158 + manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
159 + VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
160 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
161 + Topology topology = topologyService.currentTopology();
162 +
163 + // test the isLatest() method.
164 + assertTrue("This should be latest topology", topologyService.isLatest(topology));
165 +
166 + VirtualDevice srcVirtualDevice =
167 + manager.createVirtualDevice(virtualNetwork.id(), DID1);
168 + VirtualDevice dstVirtualDevice =
169 + manager.createVirtualDevice(virtualNetwork.id(), DID2);
170 +
171 + // test the isLatest() method where a new device has been added to the current topology.
172 + assertFalse("This should not be latest topology", topologyService.isLatest(topology));
173 +
174 + topology = topologyService.currentTopology();
175 + ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
176 + ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
177 + VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), src, dst);
178 +
179 + // test the isLatest() method where a new link has been added to the current topology.
180 + assertFalse("This should not be latest topology", topologyService.isLatest(topology));
181 + }
182 +
183 + /**
184 + * Test getGraph() method.
185 + */
186 + @Test
187 + public void testGetGraph() {
188 + manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
189 + VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
190 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
191 + Topology topology = topologyService.currentTopology();
192 +
193 + // test the getGraph() method.
194 + assertNotNull("The graph should not be null.", topologyService.getGraph(topology));
195 + }
196 +
197 + /**
198 + * Test getClusters() method.
199 + */
200 + @Test
201 + public void testGetClusters() {
202 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
203 +
204 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
205 +
206 + Topology topology = topologyService.currentTopology();
207 +
208 + // test the getClusters() method.
209 + assertNotNull("The clusters should not be null.", topologyService.getClusters(topology));
210 + assertEquals("The clusters size did not match.", 2, topologyService.getClusters(topology).size());
211 + }
212 +
213 + /**
214 + * Test getCluster() method using a null cluster identifier.
215 + */
216 + @Test(expected = NullPointerException.class)
217 + public void testGetClusterUsingNullClusterId() {
218 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
219 +
220 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
221 + Topology topology = topologyService.currentTopology();
222 +
223 + Set<TopologyCluster> clusters = topologyService.getClusters(topology);
224 + TopologyCluster cluster = clusters.stream().findFirst().get();
225 +
226 + // test the getCluster() method with a null cluster identifier
227 + TopologyCluster cluster1 = topologyService.getCluster(topology, null);
228 + }
229 +
230 + /**
231 + * Test getCluster() method.
232 + */
233 + @Test
234 + public void testGetCluster() {
235 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
236 +
237 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
238 + Topology topology = topologyService.currentTopology();
239 +
240 + Set<TopologyCluster> clusters = topologyService.getClusters(topology);
241 + assertNotNull("The clusters should not be null.", clusters);
242 + assertEquals("The clusters size did not match.", 2, clusters.size());
243 +
244 + // test the getCluster() method.
245 + TopologyCluster cluster = clusters.stream().findFirst().get();
246 + assertNotNull("The cluster should not be null.", cluster);
247 + TopologyCluster cluster1 = topologyService.getCluster(topology, cluster.id());
248 + assertNotNull("The cluster should not be null.", cluster1);
249 + assertEquals("The cluster ID did not match.", cluster.id(), cluster1.id());
250 + }
251 +
252 + /**
253 + * Test getClusterDevices() methods with a null cluster.
254 + */
255 + @Test(expected = NullPointerException.class)
256 + public void testGetClusterDevicesUsingNullCluster() {
257 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
258 +
259 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
260 + Topology topology = topologyService.currentTopology();
261 + Set<TopologyCluster> clusters = topologyService.getClusters(topology);
262 +
263 + // test the getClusterDevices() method using a null cluster.
264 + Object[] objects = clusters.stream().toArray();
265 + assertNotNull("The cluster should not be null.", objects);
266 + Set<DeviceId> clusterDevices = topologyService.getClusterDevices(topology, null);
267 + }
268 +
269 + /**
270 + * Test getClusterLinks() methods with a null cluster.
271 + */
272 + @Test(expected = NullPointerException.class)
273 + public void testGetClusterLinksUsingNullCluster() {
274 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
275 +
276 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
277 + Topology topology = topologyService.currentTopology();
278 + Set<TopologyCluster> clusters = topologyService.getClusters(topology);
279 +
280 + // test the getClusterLinks() method using a null cluster.
281 + Object[] objects = clusters.stream().toArray();
282 + assertNotNull("The cluster should not be null.", objects);
283 + Set<Link> clusterLinks = topologyService.getClusterLinks(topology, null);
284 + }
285 +
286 + /**
287 + * Test getClusterDevices() and getClusterLinks() methods.
288 + */
289 + @Test
290 + public void testGetClusterDevicesLinks() {
291 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
292 +
293 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
294 + Topology topology = topologyService.currentTopology();
295 +
296 + Set<TopologyCluster> clusters = topologyService.getClusters(topology);
297 + assertNotNull("The clusters should not be null.", clusters);
298 + assertEquals("The clusters size did not match.", 2, clusters.size());
299 +
300 + // test the getClusterDevices() method.
301 + Object[] objects = clusters.stream().toArray();
302 + assertNotNull("The cluster should not be null.", objects);
303 + Set<DeviceId> clusterDevices = topologyService.getClusterDevices(topology, (TopologyCluster) objects[0]);
304 + assertNotNull("The devices should not be null.", clusterDevices);
305 + assertEquals("The devices size did not match.", 3, clusterDevices.size());
306 + Set<DeviceId> clusterDevices1 = topologyService.getClusterDevices(topology, (TopologyCluster) objects[1]);
307 + assertNotNull("The devices should not be null.", clusterDevices1);
308 + assertEquals("The devices size did not match.", 1, clusterDevices1.size());
309 +
310 + // test the getClusterLinks() method.
311 + Set<Link> clusterLinks = topologyService.getClusterLinks(topology, (TopologyCluster) objects[0]);
312 + assertNotNull("The links should not be null.", clusterLinks);
313 + assertEquals("The links size did not match.", 6, clusterLinks.size());
314 + Set<Link> clusterLinks1 = topologyService.getClusterLinks(topology, (TopologyCluster) objects[1]);
315 + assertNotNull("The links should not be null.", clusterLinks1);
316 + assertEquals("The links size did not match.", 0, clusterLinks1.size());
317 + }
318 +
319 + /**
320 + * Test getPaths() method using a null src device identifier.
321 + */
322 + @Test(expected = NullPointerException.class)
323 + public void testGetPathsUsingNullSrcDeviceId() {
324 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
325 +
326 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
327 + Topology topology = topologyService.currentTopology();
328 +
329 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
330 + VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2);
331 +
332 + // test the getPaths() method using a null src device identifier.
333 + Set<Path> paths = topologyService.getPaths(topology, null, dstVirtualDevice.id());
334 + }
335 +
336 + /**
337 + * Test getPaths() method using a null dst device identifier.
338 + */
339 + @Test(expected = NullPointerException.class)
340 + public void testGetPathsUsingNullDstDeviceId() {
341 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
342 +
343 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
344 + Topology topology = topologyService.currentTopology();
345 +
346 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
347 + VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2);
348 +
349 + // test the getPaths() method using a null dst device identifier.
350 + Set<Path> paths = topologyService.getPaths(topology, srcVirtualDevice.id(), null);
351 + }
352 +
353 + /**
354 + * Test getPaths() method using a null weight.
355 + */
356 + @Test(expected = NullPointerException.class)
357 + public void testGetPathsUsingNullWeight() {
358 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
359 +
360 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
361 + Topology topology = topologyService.currentTopology();
362 +
363 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
364 + VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2);
365 +
366 + // test the getPaths() method using a null weight.
367 + Set<Path> paths = topologyService.getPaths(topology, srcVirtualDevice.id(), dstVirtualDevice.id(), null);
368 + }
369 +
370 + /**
371 + * Test getPaths() and getPaths() by weight methods.
372 + */
373 + @Test
374 + public void testGetPaths() {
375 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
376 +
377 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
378 + Topology topology = topologyService.currentTopology();
379 +
380 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
381 + VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2);
382 +
383 + // test the getPaths() method.
384 + Set<Path> paths = topologyService.getPaths(topology, srcVirtualDevice.id(), dstVirtualDevice.id());
385 + assertNotNull("The paths should not be null.", paths);
386 + assertEquals("The paths size did not match.", 1, paths.size());
387 +
388 + // test the getPaths() by weight method.
389 + LinkWeight weight = edge -> 1.0;
390 + Set<Path> paths1 = topologyService.getPaths(topology, srcVirtualDevice.id(), dstVirtualDevice.id(), weight);
391 + assertNotNull("The paths should not be null.", paths1);
392 + assertEquals("The paths size did not match.", 1, paths1.size());
393 + Path path = paths1.iterator().next();
394 + assertEquals("wrong path length", 1, path.links().size());
395 + assertEquals("wrong path cost", 1.0, path.cost(), 0.01);
396 + }
397 +
398 + /**
399 + * Test getDisjointPaths() methods using a null src device identifier.
400 + */
401 + @Test(expected = NullPointerException.class)
402 + public void testGetDisjointPathsUsingNullSrcDeviceId() {
403 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
404 +
405 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
406 + Topology topology = topologyService.currentTopology();
407 +
408 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
409 + VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2);
410 +
411 + // test the getDisjointPaths() method using a null src device identifier.
412 + Set<DisjointPath> paths = topologyService.getDisjointPaths(topology, null, dstVirtualDevice.id());
413 + }
414 +
415 + /**
416 + * Test getDisjointPaths() methods using a null dst device identifier.
417 + */
418 + @Test(expected = NullPointerException.class)
419 + public void testGetDisjointPathsUsingNullDstDeviceId() {
420 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
421 +
422 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
423 + Topology topology = topologyService.currentTopology();
424 +
425 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
426 + VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2);
427 +
428 + // test the getDisjointPaths() method using a null dst device identifier.
429 + Set<DisjointPath> paths = topologyService.getDisjointPaths(topology, srcVirtualDevice.id(), null);
430 + }
431 +
432 + /**
433 + * Test getDisjointPaths() methods using a null weight.
434 + */
435 + @Test(expected = NullPointerException.class)
436 + public void testGetDisjointPathsUsingNullWeight() {
437 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
438 +
439 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
440 + Topology topology = topologyService.currentTopology();
441 +
442 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
443 + VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2);
444 +
445 + // test the getDisjointPaths() method using a null weight.
446 + Set<DisjointPath> paths = topologyService.getDisjointPaths(topology, srcVirtualDevice.id(),
447 + dstVirtualDevice.id(), (LinkWeight) null);
448 + }
449 +
450 + /**
451 + * Test getDisjointPaths() methods using a null risk profile.
452 + */
453 + @Test(expected = NullPointerException.class)
454 + public void testGetDisjointPathsUsingNullRiskProfile() {
455 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
456 +
457 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
458 + Topology topology = topologyService.currentTopology();
459 +
460 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
461 + VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2);
462 +
463 + // test the getDisjointPaths() method using a null risk profile.
464 + Set<DisjointPath> paths = topologyService.getDisjointPaths(topology, srcVirtualDevice.id(),
465 + dstVirtualDevice.id(), (Map<Link, Object>) null);
466 + }
467 +
468 + /**
469 + * Test getDisjointPaths() methods.
470 + */
471 + @Test
472 + public void testGetDisjointPaths() {
473 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
474 +
475 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
476 + Topology topology = topologyService.currentTopology();
477 +
478 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
479 + VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID2);
480 +
481 + // test the getDisjointPaths() method.
482 + Set<DisjointPath> paths = topologyService.getDisjointPaths(topology, srcVirtualDevice.id(),
483 + dstVirtualDevice.id());
484 + assertNotNull("The paths should not be null.", paths);
485 + assertEquals("The paths size did not match.", 1, paths.size());
486 +
487 + // test the getDisjointPaths() method using a weight.
488 + LinkWeight weight = edge -> 1.0;
489 + Set<DisjointPath> paths1 = topologyService.getDisjointPaths(topology, srcVirtualDevice.id(),
490 + dstVirtualDevice.id(), weight);
491 + assertNotNull("The paths should not be null.", paths1);
492 + assertEquals("The paths size did not match.", 1, paths1.size());
493 + }
494 +
495 + /**
496 + * Test isInfrastructure() method using a null connect point.
497 + */
498 + @Test(expected = NullPointerException.class)
499 + public void testIsInfrastructureUsingNullConnectPoint() {
500 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
501 +
502 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
503 + Topology topology = topologyService.currentTopology();
504 +
505 + // test the isInfrastructure() method using a null connect point.
506 + Boolean isInfrastructure = topologyService.isInfrastructure(topology, null);
507 + }
508 +
509 + /**
510 + * Test isInfrastructure() method.
511 + */
512 + @Test
513 + public void testIsInfrastructure() {
514 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
515 +
516 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
517 + Topology topology = topologyService.currentTopology();
518 +
519 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
520 + VirtualDevice dstVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID4);
521 + ConnectPoint cp1 = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
522 + ConnectPoint cp2 = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
523 +
524 + // test the isInfrastructure() method.
525 + Boolean isInfrastructure = topologyService.isInfrastructure(topology, cp1);
526 + assertTrue("The connect point should be infrastructure.", isInfrastructure);
527 +
528 + isInfrastructure = topologyService.isInfrastructure(topology, cp2);
529 + assertFalse("The connect point should not be infrastructure.", isInfrastructure);
530 + }
531 +
532 + /**
533 + * Test isBroadcastPoint() method using a null connect point.
534 + */
535 + @Test(expected = NullPointerException.class)
536 + public void testIsBroadcastUsingNullConnectPoint() {
537 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
538 +
539 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
540 + Topology topology = topologyService.currentTopology();
541 +
542 + // test the isInfrastructure() method using a null connect point.
543 + Boolean isInfrastructure = topologyService.isBroadcastPoint(topology, null);
544 + }
545 +
546 + /**
547 + * Test isBroadcastPoint() method.
548 + */
549 + @Test
550 + public void testIsBroadcastPoint() {
551 + VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
552 +
553 + TopologyService topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
554 + Topology topology = topologyService.currentTopology();
555 +
556 + VirtualDevice srcVirtualDevice = getVirtualDevice(virtualNetwork.id(), DID1);
557 + ConnectPoint cp = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
558 +
559 + // test the isBroadcastPoint() method.
560 + Boolean isBroadcastPoint = topologyService.isBroadcastPoint(topology, cp);
561 + assertTrue("The connect point should be a broadcast point.", isBroadcastPoint);
562 + }
563 +
564 + /**
565 + * Return the virtual device matching the device identifier.
566 + *
567 + * @param networkId virtual network identifier
568 + * @param deviceId device identifier
569 + * @return virtual device
570 + */
571 + private VirtualDevice getVirtualDevice(NetworkId networkId, DeviceId deviceId) {
572 + Optional<VirtualDevice> foundDevice = manager.getVirtualDevices(networkId)
573 + .stream()
574 + .filter(device -> deviceId.equals(device.id()))
575 + .findFirst();
576 + if (foundDevice.isPresent()) {
577 + return foundDevice.get();
578 + }
579 + return null;
580 + }
581 +
582 + /**
583 + * Core service test class.
584 + */
585 + private class TestCoreService extends CoreServiceAdapter {
586 +
587 + @Override
588 + public IdGenerator getIdGenerator(String topic) {
589 + return new IdGenerator() {
590 + private AtomicLong counter = new AtomicLong(0);
591 +
592 + @Override
593 + public long getNewId() {
594 + return counter.getAndIncrement();
595 + }
596 + };
597 + }
598 + }
599 +}