Completed testing of EdgeManager
Change-Id: I2d2f5ba62951951f29780904acfa5eec07657129
Showing
1 changed file
with
399 additions
and
13 deletions
... | @@ -15,47 +15,80 @@ | ... | @@ -15,47 +15,80 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.net.edgeservice.impl; | 16 | package org.onosproject.net.edgeservice.impl; |
17 | 17 | ||
18 | +import com.google.common.collect.Lists; | ||
19 | +import com.google.common.collect.Maps; | ||
20 | +import com.google.common.collect.Sets; | ||
18 | import org.junit.After; | 21 | import org.junit.After; |
19 | import org.junit.Before; | 22 | import org.junit.Before; |
20 | import org.junit.Test; | 23 | import org.junit.Test; |
21 | import org.onosproject.common.event.impl.TestEventDispatcher; | 24 | import org.onosproject.common.event.impl.TestEventDispatcher; |
25 | +import org.onosproject.event.Event; | ||
22 | import org.onosproject.net.ConnectPoint; | 26 | import org.onosproject.net.ConnectPoint; |
27 | +import org.onosproject.net.DefaultPort; | ||
23 | import org.onosproject.net.Device; | 28 | import org.onosproject.net.Device; |
24 | import org.onosproject.net.DeviceId; | 29 | import org.onosproject.net.DeviceId; |
30 | +import org.onosproject.net.NetTestTools; | ||
25 | import org.onosproject.net.Port; | 31 | import org.onosproject.net.Port; |
32 | +import org.onosproject.net.PortNumber; | ||
33 | +import org.onosproject.net.device.DeviceEvent; | ||
26 | import org.onosproject.net.device.DeviceServiceAdapter; | 34 | import org.onosproject.net.device.DeviceServiceAdapter; |
27 | import org.onosproject.net.edge.EdgePortEvent; | 35 | import org.onosproject.net.edge.EdgePortEvent; |
28 | import org.onosproject.net.edge.EdgePortListener; | 36 | import org.onosproject.net.edge.EdgePortListener; |
37 | +import org.onosproject.net.flow.TrafficTreatment; | ||
38 | +import org.onosproject.net.link.LinkEvent; | ||
39 | +import org.onosproject.net.packet.OutboundPacket; | ||
29 | import org.onosproject.net.packet.PacketServiceAdapter; | 40 | import org.onosproject.net.packet.PacketServiceAdapter; |
30 | import org.onosproject.net.topology.Topology; | 41 | import org.onosproject.net.topology.Topology; |
42 | +import org.onosproject.net.topology.TopologyEvent; | ||
31 | import org.onosproject.net.topology.TopologyListener; | 43 | import org.onosproject.net.topology.TopologyListener; |
32 | import org.onosproject.net.topology.TopologyServiceAdapter; | 44 | import org.onosproject.net.topology.TopologyServiceAdapter; |
33 | 45 | ||
46 | +import java.nio.ByteBuffer; | ||
47 | +import java.util.ArrayList; | ||
48 | +import java.util.Iterator; | ||
34 | import java.util.List; | 49 | import java.util.List; |
50 | +import java.util.Map; | ||
51 | +import java.util.Optional; | ||
35 | import java.util.Set; | 52 | import java.util.Set; |
36 | 53 | ||
37 | -import static org.junit.Assert.assertFalse; | 54 | +import static org.junit.Assert.*; |
55 | +import static org.onosproject.net.device.DeviceEvent.Type.*; | ||
56 | +import static org.onosproject.net.edge.EdgePortEvent.Type.EDGE_PORT_ADDED; | ||
57 | +import static org.onosproject.net.edge.EdgePortEvent.Type.EDGE_PORT_REMOVED; | ||
58 | +import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED; | ||
59 | +import static org.onosproject.net.link.LinkEvent.Type.LINK_REMOVED; | ||
60 | +import static org.onosproject.net.topology.TopologyEvent.Type.TOPOLOGY_CHANGED; | ||
38 | 61 | ||
39 | /** | 62 | /** |
40 | - * Test of the edge port manager. | 63 | + * Test of the edge port manager. Each device has ports '0' through 'numPorts - 1' |
64 | + * as specified by the variable 'numPorts'. | ||
41 | */ | 65 | */ |
42 | public class EdgeManagerTest { | 66 | public class EdgeManagerTest { |
43 | 67 | ||
44 | private EdgeManager mgr; | 68 | private EdgeManager mgr; |
45 | - private final EdgePortListener testListener = new TestListener(); | 69 | + private int totalPorts = 10; |
46 | - | 70 | + private boolean alwaysReturnPorts = false; |
71 | + private final Set<ConnectPoint> infrastructurePorts = Sets.newConcurrentHashSet(); | ||
72 | + private List<EdgePortEvent> events = Lists.newArrayList(); | ||
73 | + private final Map<DeviceId, Device> devices = Maps.newConcurrentMap(); | ||
74 | + private Set<OutboundPacket> packets = Sets.newConcurrentHashSet(); | ||
75 | + private final EdgePortListener testListener = new TestListener(events); | ||
76 | + private TestTopologyManager testTopologyManager; | ||
47 | 77 | ||
48 | @Before | 78 | @Before |
49 | public void setUp() { | 79 | public void setUp() { |
50 | mgr = new EdgeManager(); | 80 | mgr = new EdgeManager(); |
51 | mgr.eventDispatcher = new TestEventDispatcher(); | 81 | mgr.eventDispatcher = new TestEventDispatcher(); |
52 | - mgr.topologyService = new TestTopologyManager(); | 82 | + testTopologyManager = new TestTopologyManager(infrastructurePorts); |
53 | - mgr.deviceService = new TestDeviceManager(); | 83 | + mgr.topologyService = testTopologyManager; |
84 | + mgr.deviceService = new TestDeviceManager(devices); | ||
54 | mgr.packetService = new TestPacketManager(); | 85 | mgr.packetService = new TestPacketManager(); |
55 | mgr.activate(); | 86 | mgr.activate(); |
56 | mgr.addListener(testListener); | 87 | mgr.addListener(testListener); |
88 | + | ||
57 | } | 89 | } |
58 | 90 | ||
91 | + | ||
59 | @After | 92 | @After |
60 | public void tearDown() { | 93 | public void tearDown() { |
61 | mgr.removeListener(testListener); | 94 | mgr.removeListener(testListener); |
... | @@ -63,14 +96,347 @@ public class EdgeManagerTest { | ... | @@ -63,14 +96,347 @@ public class EdgeManagerTest { |
63 | } | 96 | } |
64 | 97 | ||
65 | @Test | 98 | @Test |
66 | - public void basics() { | 99 | + public void testBasics() { |
100 | + //Setup | ||
101 | + int numDevices = 20; | ||
102 | + int numPorts = 4; | ||
103 | + defaultPopulator(numDevices, numPorts); | ||
104 | + | ||
105 | + assertEquals("Unexpected number of ports", numDevices * numPorts, infrastructurePorts.size()); | ||
106 | + | ||
67 | assertFalse("no ports expected", mgr.getEdgePoints().iterator().hasNext()); | 107 | assertFalse("no ports expected", mgr.getEdgePoints().iterator().hasNext()); |
108 | + | ||
109 | + assertFalse("Expected isEdge to return false", | ||
110 | + mgr.isEdgePoint(NetTestTools.connectPoint(Integer.toString(1), 1))); | ||
111 | + | ||
112 | + removeInfraPort(NetTestTools.connectPoint(Integer.toString(1), 1)); | ||
113 | + assertTrue("Expected isEdge to return false", | ||
114 | + mgr.isEdgePoint(NetTestTools.connectPoint(Integer.toString(1), 1))); | ||
115 | + } | ||
116 | + | ||
117 | + @Test | ||
118 | + public void testLinkUpdates() { | ||
119 | + //Setup | ||
120 | + ConnectPoint testPoint, referencePoint; | ||
121 | + | ||
122 | + //Testing link removal | ||
123 | + List<Event> eventsToAdd = Lists.newArrayList(); | ||
124 | + eventsToAdd.add(new LinkEvent(LINK_REMOVED, NetTestTools.link("a", 1, "b", 2))); | ||
125 | + TopologyEvent event = new TopologyEvent(TOPOLOGY_CHANGED, null, eventsToAdd); | ||
126 | + testTopologyManager.listener.event(event); | ||
127 | + | ||
128 | + assertTrue("The list contained an unexpected number of events", events.size() == 2); | ||
129 | + assertTrue("The first element is of the wrong type.", | ||
130 | + events.get(0).type() == EDGE_PORT_ADDED); | ||
131 | + assertTrue("The second element is of the wrong type.", | ||
132 | + events.get(1).type() == EDGE_PORT_ADDED); | ||
133 | + | ||
134 | + testPoint = events.get(0).subject(); | ||
135 | + referencePoint = NetTestTools.connectPoint("a", 1); | ||
136 | + assertTrue("The port numbers of the first element are incorrect", | ||
137 | + testPoint.port().toLong() == referencePoint.port().toLong()); | ||
138 | + assertTrue("The device id of the first element is incorrect.", | ||
139 | + testPoint.deviceId().equals(referencePoint.deviceId())); | ||
140 | + | ||
141 | + testPoint = events.get(1).subject(); | ||
142 | + referencePoint = NetTestTools.connectPoint("b", 2); | ||
143 | + assertTrue("The port numbers of the second element are incorrect", | ||
144 | + testPoint.port().toLong() == referencePoint.port().toLong()); | ||
145 | + assertTrue("The device id of the second element is incorrect.", | ||
146 | + testPoint.deviceId().equals(referencePoint.deviceId())); | ||
147 | + | ||
148 | + //Rebroadcast event to ensure it results in no additional events | ||
149 | + testTopologyManager.listener.event(event); | ||
150 | + assertTrue("The list contained an unexpected number of events", events.size() == 2); | ||
151 | + | ||
152 | + //Testing link adding when links to remove exist | ||
153 | + eventsToAdd.clear(); | ||
154 | + events.clear(); | ||
155 | + eventsToAdd.add(new LinkEvent(LINK_ADDED, NetTestTools.link("a", 1, "b", 2))); | ||
156 | + event = new TopologyEvent(TOPOLOGY_CHANGED, null, eventsToAdd); | ||
157 | + testTopologyManager.listener.event(event); | ||
158 | + | ||
159 | + assertTrue("The list contained an unexpected number of events", events.size() == 2); | ||
160 | + assertTrue("The first element is of the wrong type.", | ||
161 | + events.get(0).type() == EDGE_PORT_REMOVED); | ||
162 | + assertTrue("The second element is of the wrong type.", | ||
163 | + events.get(1).type() == EDGE_PORT_REMOVED); | ||
164 | + | ||
165 | + testPoint = events.get(0).subject(); | ||
166 | + referencePoint = NetTestTools.connectPoint("a", 1); | ||
167 | + assertTrue("The port numbers of the first element are incorrect", | ||
168 | + testPoint.port().toLong() == referencePoint.port().toLong()); | ||
169 | + assertTrue("The device id of the first element is incorrect.", | ||
170 | + testPoint.deviceId().equals(referencePoint.deviceId())); | ||
171 | + | ||
172 | + testPoint = events.get(1).subject(); | ||
173 | + referencePoint = NetTestTools.connectPoint("b", 2); | ||
174 | + assertTrue("The port numbers of the second element are incorrect", | ||
175 | + testPoint.port().toLong() == referencePoint.port().toLong()); | ||
176 | + assertTrue("The device id of the second element is incorrect.", | ||
177 | + testPoint.deviceId().equals(referencePoint.deviceId())); | ||
178 | + | ||
179 | + //Apparent duplicate of previous method tests removal when the elements have already been removed | ||
180 | + eventsToAdd.clear(); | ||
181 | + events.clear(); | ||
182 | + eventsToAdd.add(new LinkEvent(LINK_ADDED, NetTestTools.link("a", 1, "b", 2))); | ||
183 | + event = new TopologyEvent(TOPOLOGY_CHANGED, null, eventsToAdd); | ||
184 | + testTopologyManager.listener.event(event); | ||
185 | + | ||
186 | + assertTrue("The list should contain no events, the removed elements don't exist.", events.size() == 0); | ||
187 | + } | ||
188 | + | ||
189 | + @Test | ||
190 | + public void testDeviceUpdates() { | ||
191 | + //Setup | ||
192 | + | ||
193 | + Device referenceDevice; | ||
194 | + TopologyEvent event; | ||
195 | + List<Event> eventsToAdd = Lists.newArrayList(); | ||
196 | + int numDevices = 10; | ||
197 | + int numInfraPorts = 5; | ||
198 | + totalPorts = 10; | ||
199 | + defaultPopulator(numDevices, numInfraPorts); | ||
200 | + | ||
201 | + //Test response to device added events | ||
202 | + referenceDevice = NetTestTools.device("1"); | ||
203 | + eventsToAdd.add(new DeviceEvent(DEVICE_ADDED, referenceDevice, | ||
204 | + new DefaultPort(referenceDevice, PortNumber.portNumber(1), true))); | ||
205 | + event = new TopologyEvent(TOPOLOGY_CHANGED, null, eventsToAdd); | ||
206 | + testTopologyManager.listener.event(event); | ||
207 | + | ||
208 | + //Check that ports were populated correctly | ||
209 | + assertTrue("Unexpected number of new ports added", | ||
210 | + mgr.deviceService.getPorts(NetTestTools.did("1")).size() == 10); | ||
211 | + | ||
212 | + //Check that of the ten ports the half that are infrastructure ports aren't added | ||
213 | + assertEquals("Unexpected number of new edge ports added", (totalPorts - numInfraPorts), events.size()); | ||
214 | + | ||
215 | + for (int index = 0; index < numInfraPorts; index++) { | ||
216 | + assertTrue("Unexpected type of event", events.get(index).type() == EDGE_PORT_ADDED); | ||
217 | + } | ||
218 | + //Names here are irrelevant, the first 5 ports are populated as infrastructure, 6-10 are edge | ||
219 | + for (int index = 0; index < events.size(); index++) { | ||
220 | + assertEquals("Port added had unexpected port number.", | ||
221 | + events.get(index).subject().port(), | ||
222 | + NetTestTools.connectPoint("a", index + numInfraPorts + 1).port()); | ||
223 | + } | ||
224 | + events.clear(); | ||
225 | + | ||
226 | + //Repost the event to test repeated posts | ||
227 | + testTopologyManager.listener.event(event); | ||
228 | + assertEquals("The redundant notification should not have created additional notifications.", | ||
229 | + 0, events.size()); | ||
230 | + //Calculate the size of the returned iterable of edge points. | ||
231 | + Iterable<ConnectPoint> pts = mgr.getEdgePoints(); | ||
232 | + Iterator pointIterator = pts.iterator(); | ||
233 | + int count = 0; | ||
234 | + for (; pointIterator.hasNext(); count++) { | ||
235 | + pointIterator.next(); | ||
236 | + } | ||
237 | + assertEquals("Unexpected number of edge points", totalPorts - numInfraPorts, count); | ||
238 | + //Testing device removal | ||
239 | + events.clear(); | ||
240 | + eventsToAdd.clear(); | ||
241 | + eventsToAdd.add(new DeviceEvent(DEVICE_REMOVED, referenceDevice, | ||
242 | + new DefaultPort(referenceDevice, PortNumber.portNumber(1), true))); | ||
243 | + event = new TopologyEvent(TOPOLOGY_CHANGED, null, eventsToAdd); | ||
244 | + testTopologyManager.listener.event(event); | ||
245 | + | ||
246 | + assertEquals("There should be five new events from removal of edge points", | ||
247 | + totalPorts - numInfraPorts, events.size()); | ||
248 | + for (int index = 0; index < events.size(); index++) { | ||
249 | + //Assert that the correct port numbers were removed in the correct order | ||
250 | + assertEquals("Port removed had unexpected port number.", | ||
251 | + events.get(index).subject().port(), | ||
252 | + (NetTestTools.connectPoint("a", index + numInfraPorts + 1).port())); | ||
253 | + //Assert that the events are of the correct type | ||
254 | + assertEquals("Unexpected type of event", events.get(index).type(), EDGE_PORT_REMOVED); | ||
255 | + } | ||
256 | + events.clear(); | ||
257 | + //Rebroadcast event to check that it triggers no new behavior | ||
258 | + testTopologyManager.listener.event(event); | ||
259 | + assertEquals("Rebroadcast of removal event should not produce additional events", | ||
260 | + 0, events.size()); | ||
261 | + | ||
262 | + //Testing device status change, changed from unavailable to available | ||
263 | + events.clear(); | ||
264 | + eventsToAdd.clear(); | ||
265 | + //Make sure that the devicemanager shows the device as available. | ||
266 | + addDevice(referenceDevice, "1", 5); | ||
267 | + devices.put(referenceDevice.id(), referenceDevice); | ||
268 | + | ||
269 | + eventsToAdd.add(new DeviceEvent(DEVICE_AVAILABILITY_CHANGED, referenceDevice)); | ||
270 | + event = new TopologyEvent(TOPOLOGY_CHANGED, null, eventsToAdd); | ||
271 | + testTopologyManager.listener.event(event); | ||
272 | + //An earlier setup set half of the reference device ports to infrastructure | ||
273 | + assertEquals("An unexpected number of events were generated.", totalPorts - numInfraPorts, events.size()); | ||
274 | + for (int i = 0; i < 5; i++) { | ||
275 | + assertEquals("The event was not of the right type", events.get(i).type(), EDGE_PORT_ADDED); | ||
276 | + } | ||
277 | + events.clear(); | ||
278 | + testTopologyManager.listener.event(event); | ||
279 | + assertEquals("No events should have been generated for a set of existing ports.", 0, events.size()); | ||
280 | + | ||
281 | + //Test removal when state changes when the device becomes unavailable | ||
282 | + | ||
283 | + //Ensure that the deviceManager shows the device as unavailable | ||
284 | + removeDevice(referenceDevice); | ||
285 | + /*This variable copies the behavior of the topology by returning ports attached to an unavailable device | ||
286 | + //this behavior is necessary for the following event to execute properly, if these statements are removed | ||
287 | + no events will be generated since no ports will be provided in getPorts() to EdgeManager. | ||
288 | + */ | ||
289 | + alwaysReturnPorts = true; | ||
290 | + testTopologyManager.listener.event(event); | ||
291 | + alwaysReturnPorts = false; | ||
292 | + assertEquals("An unexpected number of events were created.", totalPorts - numInfraPorts, events.size()); | ||
293 | + for (int i = 0; i < 5; i++) { | ||
294 | + EdgePortEvent edgeEvent = events.get(i); | ||
295 | + assertEquals("The event is of an unexpected type.", | ||
296 | + EdgePortEvent.Type.EDGE_PORT_REMOVED, edgeEvent.type()); | ||
297 | + assertEquals("The event pertains to an unexpected port", PortNumber.portNumber(i + numInfraPorts + 1), | ||
298 | + edgeEvent.subject().port()); | ||
299 | + } | ||
300 | + } | ||
301 | + | ||
302 | + @Test | ||
303 | + public void testInternalCache() { | ||
304 | + List<Event> eventsToAdd = Lists.newArrayList(); | ||
305 | + int numDevices = 10; | ||
306 | + //Number of infrastructure ports per device | ||
307 | + int numPorts = 5; | ||
308 | + //Total ports per device when requesting all devices | ||
309 | + totalPorts = 10; | ||
310 | + defaultPopulator(numDevices, numPorts); | ||
311 | + for (int i = 0; i < numDevices; i++) { | ||
312 | + Device newDevice = NetTestTools.device(Integer.toString(i)); | ||
313 | + devices.put(newDevice.id(), newDevice); | ||
314 | + eventsToAdd.add(new DeviceEvent(DEVICE_ADDED, newDevice)); | ||
315 | + } | ||
316 | + TopologyEvent event = new TopologyEvent(TOPOLOGY_CHANGED, null, eventsToAdd); | ||
317 | + testTopologyManager.listener.event(event); | ||
318 | + | ||
319 | + //Check all ports have correct designations | ||
320 | + ConnectPoint testPoint; | ||
321 | + for (int deviceNum = 0; deviceNum < numDevices; deviceNum++) { | ||
322 | + for (int portNum = 1; portNum <= totalPorts; portNum++) { | ||
323 | + testPoint = NetTestTools.connectPoint(Integer.toString(deviceNum), portNum); | ||
324 | + if (portNum <= numPorts) { | ||
325 | + assertFalse("This should not be an edge point", mgr.isEdgePoint(testPoint)); | ||
326 | + } else { | ||
327 | + assertTrue("This should be an edge point", mgr.isEdgePoint(testPoint)); | ||
328 | + } | ||
329 | + } | ||
330 | + } | ||
331 | + int count = 0; | ||
332 | + for (ConnectPoint ignored : mgr.getEdgePoints()) { | ||
333 | + count++; | ||
334 | + } | ||
335 | + assertEquals("There are an unexpeceted number of edge points returned.", | ||
336 | + (totalPorts - numPorts) * numDevices, count); | ||
337 | + for (int deviceNumber = 0; deviceNumber < numDevices; deviceNumber++) { | ||
338 | + count = 0; | ||
339 | + for (ConnectPoint ignored : mgr.getEdgePoints(NetTestTools.did("1"))) { | ||
340 | + count++; | ||
341 | + } | ||
342 | + assertEquals("This element has an unexpected number of edge points.", (totalPorts - numPorts), count); | ||
343 | + } | ||
344 | + } | ||
345 | + | ||
346 | + | ||
347 | + @Test | ||
348 | + public void testEmit() { | ||
349 | + byte[] arr = new byte[10]; | ||
350 | + Device referenceDevice; | ||
351 | + TopologyEvent event; | ||
352 | + List<Event> eventsToAdd = Lists.newArrayList(); | ||
353 | + int numDevices = 10; | ||
354 | + int numInfraPorts = 5; | ||
355 | + totalPorts = 10; | ||
356 | + defaultPopulator(numDevices, numInfraPorts); | ||
357 | + for (byte byteIndex = 0; byteIndex < arr.length; byteIndex++) { | ||
358 | + arr[byteIndex] = byteIndex; | ||
359 | + } | ||
360 | + for (int i = 0; i < numDevices; i++) { | ||
361 | + referenceDevice = NetTestTools.device(Integer.toString(i)); | ||
362 | + eventsToAdd.add(new DeviceEvent(DEVICE_ADDED, referenceDevice, | ||
363 | + new DefaultPort(referenceDevice, PortNumber.portNumber(1), true))); | ||
364 | + } | ||
365 | + event = new TopologyEvent(TOPOLOGY_CHANGED, null, eventsToAdd); | ||
366 | + testTopologyManager.listener.event(event); | ||
367 | + | ||
368 | + mgr.emitPacket(ByteBuffer.wrap(arr), Optional.<TrafficTreatment>empty()); | ||
369 | + | ||
370 | + assertEquals("There were an unexpected number of emitted packets", | ||
371 | + (totalPorts - numInfraPorts) * numDevices, packets.size()); | ||
372 | + Iterator<OutboundPacket> packetIter = packets.iterator(); | ||
373 | + OutboundPacket packet; | ||
374 | + while (packetIter.hasNext()) { | ||
375 | + packet = packetIter.next(); | ||
376 | + assertEquals("The packet had an incorrect payload.", arr, packet.data().array()); | ||
377 | + } | ||
378 | + //Start testing emission to a specific device | ||
379 | + packets.clear(); | ||
380 | + mgr.emitPacket(NetTestTools.did(Integer.toString(1)), ByteBuffer.wrap(arr), Optional.<TrafficTreatment>empty()); | ||
381 | + | ||
382 | + assertEquals("Unexpected number of outbound packets were emitted.", | ||
383 | + totalPorts - numInfraPorts, packets.size()); | ||
384 | + packetIter = packets.iterator(); | ||
385 | + while (packetIter.hasNext()) { | ||
386 | + packet = packetIter.next(); | ||
387 | + assertEquals("The packet had an incorrect payload", arr, packet.data().array()); | ||
388 | + } | ||
389 | + } | ||
390 | + | ||
391 | + | ||
392 | + /** | ||
393 | + * @param numDevices the number of devices to populate. | ||
394 | + * @param numInfraPorts the number of ports to be set as infrastructure on each device, numbered base 0, ports 0 | ||
395 | + * through numInfraPorts - 1 | ||
396 | + */ | ||
397 | + private void defaultPopulator(int numDevices, int numInfraPorts) { | ||
398 | + for (int device = 0; device < numDevices; device++) { | ||
399 | + String str = Integer.toString(device); | ||
400 | + Device deviceToAdd = NetTestTools.device(str); | ||
401 | + devices.put(deviceToAdd.id(), deviceToAdd); | ||
402 | + for (int port = 1; port <= numInfraPorts; port++) { | ||
403 | + infrastructurePorts.add(NetTestTools.connectPoint(str, port)); | ||
404 | + } | ||
405 | + } | ||
406 | + } | ||
407 | + | ||
408 | + /** | ||
409 | + * Adds the specified device with the specified number of edge ports so long as it is less than the total ports. | ||
410 | + * | ||
411 | + * @param device The device to be added | ||
412 | + * @param deviceName The name given to generate the devices DID | ||
413 | + * @param numInfraPorts The number of ports to be added numbered 1 ... numInfraPorts | ||
414 | + */ | ||
415 | + private void addDevice(Device device, String deviceName, int numInfraPorts) { | ||
416 | + if (!devices.keySet().contains(device.id())) { | ||
417 | + devices.put(device.id(), device); | ||
418 | + for (int i = 1; i <= numInfraPorts && i <= totalPorts; i++) { | ||
419 | + infrastructurePorts.add(NetTestTools.connectPoint(deviceName, i)); | ||
420 | + } | ||
421 | + } | ||
422 | + } | ||
423 | + | ||
424 | + private void removeDevice(Device device) { | ||
425 | + devices.remove(device.id()); | ||
426 | + } | ||
427 | + | ||
428 | + private void removeInfraPort(ConnectPoint port) { | ||
429 | + infrastructurePorts.remove(port); | ||
68 | } | 430 | } |
69 | 431 | ||
70 | private class TestTopologyManager extends TopologyServiceAdapter { | 432 | private class TestTopologyManager extends TopologyServiceAdapter { |
71 | private TopologyListener listener; | 433 | private TopologyListener listener; |
72 | private Set<ConnectPoint> infrastructurePorts; | 434 | private Set<ConnectPoint> infrastructurePorts; |
73 | 435 | ||
436 | + public TestTopologyManager(Set<ConnectPoint> infrastructurePorts) { | ||
437 | + this.infrastructurePorts = infrastructurePorts; | ||
438 | + } | ||
439 | + | ||
74 | @Override | 440 | @Override |
75 | public boolean isInfrastructure(Topology topology, ConnectPoint connectPoint) { | 441 | public boolean isInfrastructure(Topology topology, ConnectPoint connectPoint) { |
76 | return infrastructurePorts.contains(connectPoint); | 442 | return infrastructurePorts.contains(connectPoint); |
... | @@ -89,12 +455,16 @@ public class EdgeManagerTest { | ... | @@ -89,12 +455,16 @@ public class EdgeManagerTest { |
89 | 455 | ||
90 | private class TestDeviceManager extends DeviceServiceAdapter { | 456 | private class TestDeviceManager extends DeviceServiceAdapter { |
91 | 457 | ||
92 | - private Set<Device> devices; | 458 | + private Map<DeviceId, Device> devices; |
459 | + | ||
460 | + public TestDeviceManager(Map<DeviceId, Device> devices) { | ||
461 | + this.devices = devices; | ||
462 | + } | ||
93 | 463 | ||
94 | @Override | 464 | @Override |
95 | public boolean isAvailable(DeviceId deviceId) { | 465 | public boolean isAvailable(DeviceId deviceId) { |
96 | - for (Device device : devices) { | 466 | + for (DeviceId id : devices.keySet()) { |
97 | - if (device.id().equals(deviceId)) { | 467 | + if (id.equals(deviceId)) { |
98 | return true; | 468 | return true; |
99 | } | 469 | } |
100 | } | 470 | } |
... | @@ -103,22 +473,38 @@ public class EdgeManagerTest { | ... | @@ -103,22 +473,38 @@ public class EdgeManagerTest { |
103 | 473 | ||
104 | @Override | 474 | @Override |
105 | public List<Port> getPorts(DeviceId deviceId) { | 475 | public List<Port> getPorts(DeviceId deviceId) { |
106 | - return super.getPorts(deviceId); | 476 | + List<Port> ports = new ArrayList<>(); |
477 | + Device device = devices.get(deviceId); | ||
478 | + if (device == null && !alwaysReturnPorts) { | ||
479 | + return ports; | ||
480 | + } | ||
481 | + for (int portNum = 1; portNum <= totalPorts; portNum++) { | ||
482 | + //String is generated using 'of:' + the passed name, this creates a | ||
483 | + ports.add(new DefaultPort(device, PortNumber.portNumber(portNum), true)); | ||
484 | + } | ||
485 | + return ports; | ||
107 | } | 486 | } |
108 | 487 | ||
109 | @Override | 488 | @Override |
110 | public Iterable<Device> getAvailableDevices() { | 489 | public Iterable<Device> getAvailableDevices() { |
111 | - return devices; | 490 | + return devices.values(); |
112 | } | 491 | } |
113 | } | 492 | } |
114 | 493 | ||
115 | private class TestPacketManager extends PacketServiceAdapter { | 494 | private class TestPacketManager extends PacketServiceAdapter { |
495 | + @Override | ||
496 | + public void emit(OutboundPacket packet) { | ||
497 | + packets.add(packet); | ||
498 | + } | ||
116 | } | 499 | } |
117 | - | ||
118 | 500 | ||
119 | private class TestListener implements EdgePortListener { | 501 | private class TestListener implements EdgePortListener { |
120 | private List<EdgePortEvent> events; | 502 | private List<EdgePortEvent> events; |
121 | 503 | ||
504 | + public TestListener(List<EdgePortEvent> events) { | ||
505 | + this.events = events; | ||
506 | + } | ||
507 | + | ||
122 | @Override | 508 | @Override |
123 | public void event(EdgePortEvent event) { | 509 | public void event(EdgePortEvent event) { |
124 | events.add(event); | 510 | events.add(event); | ... | ... |
-
Please register or login to post a comment