blob: 3c4c812fed45040f3a56b77c403686d1c386e030 [file] [log] [blame]
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +09001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +09003 *
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 */
16package org.onosproject.openstacknetworking.impl;
17
daniel parkb5817102018-02-15 00:18:51 +090018import com.google.common.collect.ImmutableSet;
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +090019import com.google.common.collect.Lists;
daniel parkb5817102018-02-15 00:18:51 +090020import com.google.common.collect.Maps;
Hyunsun Moon32d471f2017-04-27 14:29:44 +090021import com.google.common.util.concurrent.MoreExecutors;
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +090022import org.junit.After;
23import org.junit.Before;
24import org.junit.Test;
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +090025import org.onlab.junit.TestUtils;
Jian Li4b5048a2020-10-08 02:57:45 +090026import org.onlab.packet.IpAddress;
daniel parkb5817102018-02-15 00:18:51 +090027import org.onosproject.cluster.ClusterServiceAdapter;
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +090028import org.onosproject.core.ApplicationId;
29import org.onosproject.core.CoreServiceAdapter;
30import org.onosproject.core.DefaultApplicationId;
31import org.onosproject.event.Event;
daniel parkb5817102018-02-15 00:18:51 +090032import org.onosproject.net.DeviceId;
33import org.onosproject.net.device.DeviceServiceAdapter;
34import org.onosproject.net.packet.PacketServiceAdapter;
Jian Li628a7cb2018-08-11 23:04:24 +090035import org.onosproject.openstacknetworking.api.InstancePortAdminService;
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +090036import org.onosproject.openstacknetworking.api.OpenstackNetworkEvent;
Jian Li8f64feb2018-07-24 13:20:16 +090037import org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type;
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +090038import org.onosproject.openstacknetworking.api.OpenstackNetworkListener;
Jian Li8f64feb2018-07-24 13:20:16 +090039import org.onosproject.openstacknetworking.api.PreCommitPortService;
daniel parkb5817102018-02-15 00:18:51 +090040import org.onosproject.openstacknode.api.OpenstackNode;
41import org.onosproject.openstacknode.api.OpenstackNodeAdminService;
42import org.onosproject.openstacknode.api.OpenstackNodeListener;
43import org.onosproject.openstacknode.api.OpenstackNodeService;
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +090044import org.onosproject.store.service.TestStorageService;
45import org.openstack4j.model.network.Network;
46import org.openstack4j.model.network.Port;
47import org.openstack4j.model.network.Subnet;
48import org.openstack4j.openstack.networking.domain.NeutronNetwork;
49import org.openstack4j.openstack.networking.domain.NeutronPort;
50import org.openstack4j.openstack.networking.domain.NeutronSubnet;
51
52import java.util.List;
daniel parkb5817102018-02-15 00:18:51 +090053import java.util.Map;
54import java.util.Objects;
55import java.util.Set;
56import java.util.stream.Collectors;
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +090057
58import static org.junit.Assert.assertEquals;
59import static org.junit.Assert.assertTrue;
daniel parkb5817102018-02-15 00:18:51 +090060import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_NETWORK_CREATED;
61import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_NETWORK_REMOVED;
62import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_NETWORK_UPDATED;
63import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_PORT_CREATED;
Jian Li8f64feb2018-07-24 13:20:16 +090064import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_PORT_PRE_REMOVE;
daniel parkb5817102018-02-15 00:18:51 +090065import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_PORT_REMOVED;
66import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_PORT_UPDATED;
67import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_SUBNET_CREATED;
68import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_SUBNET_REMOVED;
69import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_SUBNET_UPDATED;
70import static org.onosproject.openstacknode.api.NodeState.COMPLETE;
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +090071
72/**
73 * Unit tests for OpenStack network manager.
74 */
75public class OpenstackNetworkManagerTest {
76
77 private static final ApplicationId TEST_APP_ID = new DefaultApplicationId(1, "test");
78
79 private static final String UNKNOWN_ID = "unknown_id";
80 private static final String UPDATED_NAME = "updated_name";
81
82 private static final String NETWORK_ID = "network_id";
83 private static final String NETWORK_NAME = "network_name";
84 private static final Network NETWORK = NeutronNetwork.builder()
85 .name(NETWORK_NAME)
86 .build();
87 private static final Network NETWORK_COPY = NeutronNetwork.builder()
88 .name("network")
89 .build();
90
91 private static final String SUBNET_ID = "subnet_id";
92 private static final Subnet SUBNET = NeutronSubnet.builder()
93 .networkId(NETWORK_ID)
94 .cidr("192.168.0.0/24")
95 .build();
96 private static final Subnet SUBNET_COPY = NeutronSubnet.builder()
97 .networkId(NETWORK_ID)
98 .cidr("192.168.0.0/24")
99 .build();
100
101 private static final String PORT_ID = "port_id";
102 private static final Port PORT = NeutronPort.builder()
103 .networkId(NETWORK_ID)
104 .fixedIp("192.168.0.1", SUBNET_ID)
105 .build();
106 private static final Port PORT_COPY = NeutronPort.builder()
107 .networkId(NETWORK_ID)
108 .fixedIp("192.168.0.1", SUBNET_ID)
109 .build();
110
111 private final TestOpenstackNetworkListener testListener = new TestOpenstackNetworkListener();
112
113 private OpenstackNetworkManager target;
114 private DistributedOpenstackNetworkStore osNetworkStore;
115
116 @Before
117 public void setUp() throws Exception {
118 NETWORK.setId(NETWORK_ID);
119 NETWORK_COPY.setId(NETWORK_ID);
120 SUBNET.setId(SUBNET_ID);
121 SUBNET_COPY.setId(SUBNET_ID);
122 PORT.setId(PORT_ID);
123 PORT_COPY.setId(PORT_ID);
124
125 osNetworkStore = new DistributedOpenstackNetworkStore();
126 TestUtils.setField(osNetworkStore, "coreService", new TestCoreService());
127 TestUtils.setField(osNetworkStore, "storageService", new TestStorageService());
Jian Li8f64feb2018-07-24 13:20:16 +0900128 TestUtils.setField(osNetworkStore, "preCommitPortService", new TestPreCommitPortService());
Hyunsun Moon32d471f2017-04-27 14:29:44 +0900129 TestUtils.setField(osNetworkStore, "eventExecutor", MoreExecutors.newDirectExecutorService());
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +0900130 osNetworkStore.activate();
131
132 target = new OpenstackNetworkManager();
daniel parkb5817102018-02-15 00:18:51 +0900133 TestUtils.setField(target, "coreService", new TestCoreService());
134 TestUtils.setField(target, "packetService", new PacketServiceAdapter());
135 TestUtils.setField(target, "deviceService", new DeviceServiceAdapter());
136 TestUtils.setField(target, "storageService", new TestStorageService());
137 TestUtils.setField(target, "clusterService", new ClusterServiceAdapter());
138 TestUtils.setField(target, "openstacknodeService", new TestOpenstackNodeManager());
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +0900139 target.osNetworkStore = osNetworkStore;
140 target.addListener(testListener);
141 target.activate();
142 }
143
144 @After
145 public void tearDown() {
146 target.removeListener(testListener);
147 osNetworkStore.deactivate();
148 target.deactivate();
149 osNetworkStore = null;
150 target = null;
151 }
152
153 /**
154 * Tests if getting all networks returns the correct set of networks.
155 */
156 @Test
157 public void testGetNetworks() {
158 createBasicNetworks();
159 assertEquals("Number of network did not match", 1, target.networks().size());
160 }
161
162 /**
163 * Tests if getting a network with ID returns the correct network.
164 */
165 @Test
166 public void testGetNetworkById() {
167 createBasicNetworks();
168 assertTrue("Network did not match", target.network(NETWORK_ID) != null);
169 assertTrue("Network did not match", target.network(UNKNOWN_ID) == null);
170 }
171
172 /**
173 * Tests creating and removing a network, and checks if it triggers proper events.
174 */
175 @Test
176 public void testCreateAndRemoveNetwork() {
177 target.createNetwork(NETWORK);
178 assertEquals("Number of networks did not match", 1, target.networks().size());
179 assertTrue("Network was not created", target.network(NETWORK_ID) != null);
180
181 target.removeNetwork(NETWORK_ID);
182 assertEquals("Number of networks did not match", 0, target.networks().size());
183 assertTrue("Network was not removed", target.network(NETWORK_ID) == null);
184
185 validateEvents(OPENSTACK_NETWORK_CREATED, OPENSTACK_NETWORK_REMOVED);
186 }
187
188 /**
189 * Tests updating a network, and checks if it triggers proper events.
190 */
191 @Test
192 public void testCreateAndUpdateNetwork() {
193 target.createNetwork(NETWORK);
194 assertEquals("Number of networks did not match", 1, target.networks().size());
195 assertEquals("Network did not match", NETWORK_NAME, target.network(NETWORK_ID).getName());
196
197 final Network updated = NeutronNetwork.builder()
198 .from(NETWORK_COPY)
199 .name(UPDATED_NAME)
200 .build();
201 target.updateNetwork(updated);
202
203 assertEquals("Number of networks did not match", 1, target.networks().size());
204 assertEquals("Network did not match", UPDATED_NAME, target.network(NETWORK_ID).getName());
205 validateEvents(OPENSTACK_NETWORK_CREATED, OPENSTACK_NETWORK_UPDATED);
206 }
207
208 /**
209 * Tests if creating a null network fails with an exception.
210 */
211 @Test(expected = NullPointerException.class)
212 public void testCreateNullNetwork() {
213 target.createNetwork(null);
214 }
215
216 /**
217 * Tests if creating a network with null ID fails with an exception.
218 */
219 @Test(expected = IllegalArgumentException.class)
220 public void testCreateNetworkWithNullId() {
221 final Network testNet = NeutronNetwork.builder().build();
222 target.createNetwork(testNet);
223 }
224
225 /**
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +0900226 * Tests if creating a duplicate network fails with an exception.
227 */
228 @Test(expected = IllegalArgumentException.class)
229 public void testCreateDuplicateNetwork() {
230 target.createNetwork(NETWORK);
231 target.createNetwork(NETWORK);
232 }
233
234 /**
235 * Tests if removing network with null ID fails with an exception.
236 */
237 @Test(expected = IllegalArgumentException.class)
238 public void testRemoveNetworkWithNull() {
239 target.removeNetwork(null);
240 }
241
242 /**
243 * Tests if updating a network with null name fails with an exception.
244 */
245 @Test(expected = IllegalArgumentException.class)
246 public void testUpdateNetworkWithNullName() {
247 final Network updated = NeutronNetwork.builder()
248 .name(null)
249 .build();
250 updated.setId(NETWORK_ID);
251 target.updateNetwork(updated);
252 }
253
254 /**
255 * Tests if updating an unregistered network fails with an exception.
256 */
257 @Test(expected = IllegalArgumentException.class)
258 public void testUpdateUnregisteredNetwork() {
259 target.updateNetwork(NETWORK);
260 }
261
262 /**
263 * Tests if updating a network with null ID fails with an exception.
264 */
265 @Test(expected = IllegalArgumentException.class)
266 public void testUpdateNetworkWithNullId() {
267 final Network testNet = NeutronNetwork.builder().build();
268 target.updateNetwork(testNet);
269 }
270
271
272 /**
273 * Tests if getting all subnets returns the correct set of subnets.
274 */
275 @Test
276 public void testGetSubnets() {
277 createBasicNetworks();
278 assertEquals("Number of subnet did not match", 1, target.subnets().size());
279 }
280
281 @Test
282 public void testGetSubnetsByNetworkId() {
283 createBasicNetworks();
284 assertEquals("Subnet did not match", 1, target.subnets(NETWORK_ID).size());
285 assertEquals("Subnet did not match", 0, target.subnets(UNKNOWN_ID).size());
286 }
287
288 /**
289 * Tests if getting a subnet with ID returns the correct subnet.
290 */
291 @Test
292 public void testGetSubnetById() {
293 createBasicNetworks();
294 assertTrue("Subnet did not match", target.subnet(SUBNET_ID) != null);
295 assertTrue("Subnet did not match", target.subnet(UNKNOWN_ID) == null);
296 }
297
298 /**
299 * Tests creating and removing a subnet, and checks if it triggers proper events.
300 */
301 @Test
302 public void testCreateAndRemoveSubnet() {
303 target.createSubnet(SUBNET);
304 assertEquals("Number of subnet did not match", 1, target.subnets().size());
305 assertTrue("Subnet was not created", target.subnet(SUBNET_ID) != null);
306
307 target.removeSubnet(SUBNET_ID);
308 assertEquals("Number of subnet did not match", 0, target.subnets().size());
309 assertTrue("Subnet was not removed", target.subnet(SUBNET_ID) == null);
310
311 validateEvents(OPENSTACK_SUBNET_CREATED, OPENSTACK_SUBNET_REMOVED);
312 }
313
314 /**
315 * Tests updating a subnet, and checks if it triggers proper events.
316 */
317 @Test
318 public void testCreateAndUpdateSubnet() {
319 target.createSubnet(SUBNET_COPY);
320 assertEquals("Number of subnet did not match", 1, target.subnets().size());
321 assertEquals("Subnet did not match", null, target.subnet(SUBNET_ID).getName());
322
323 // TODO fix NeutronSubnet.builder().from() in openstack4j
324 final Subnet updated = NeutronSubnet.builder()
325 .networkId(NETWORK_ID)
326 .cidr("192.168.0.0/24")
327 .name(UPDATED_NAME)
328 .build();
329 updated.setId(SUBNET_ID);
330 target.updateSubnet(updated);
331
332 assertEquals("Number of subnet did not match", 1, target.subnets().size());
333 assertEquals("Subnet did not match", UPDATED_NAME, target.subnet(SUBNET_ID).getName());
334
335 validateEvents(OPENSTACK_SUBNET_CREATED, OPENSTACK_SUBNET_UPDATED);
336 }
337
338 /**
339 * Tests if creating a null subnet fails with an exception.
340 */
341 @Test(expected = NullPointerException.class)
342 public void testCreateNullSubnet() {
343 target.createSubnet(null);
344 }
345
346 /**
347 * Tests if creating a subnet with null ID fails with an exception.
348 */
349 @Test(expected = IllegalArgumentException.class)
350 public void testCreateSubnetWithNullId() {
351 final Subnet testSubnet = NeutronSubnet.builder()
352 .networkId(NETWORK_ID)
353 .cidr("192.168.0.0/24")
354 .build();
355 target.createSubnet(testSubnet);
356 }
357
358 /**
359 * Tests if creating subnet with null network ID fails with an exception.
360 */
361 @Test(expected = IllegalArgumentException.class)
362 public void testCreateSubnetWithNullNetworkId() {
363 final Subnet testSubnet = NeutronSubnet.builder()
364 .cidr("192.168.0.0/24")
365 .build();
366 testSubnet.setId(SUBNET_ID);
367 target.createSubnet(testSubnet);
368 }
369
370 /**
371 * Tests if creating a subnet with null CIDR fails with an exception.
372 */
373 @Test(expected = IllegalArgumentException.class)
374 public void testCreateSubnetWithNullCidr() {
375 final Subnet testSubnet = NeutronSubnet.builder()
376 .networkId(NETWORK_ID)
377 .build();
378 testSubnet.setId(SUBNET_ID);
379 target.createSubnet(testSubnet);
380 }
381
382 /**
383 * Tests if creating a duplicate subnet fails with an exception.
384 */
385 @Test(expected = IllegalArgumentException.class)
386 public void testCreateDuplicateSubnet() {
387 target.createSubnet(SUBNET);
388 target.createSubnet(SUBNET);
389 }
390
391 /**
392 * Tests if updating an unregistered subnet fails with an exception.
393 */
394 @Test(expected = IllegalArgumentException.class)
395 public void testUpdateUnregisteredSubnet() {
396 target.updateSubnet(SUBNET);
397 }
398
399 /**
400 * Tests if updating a null subnet fails with an exception.
401 */
402 @Test(expected = NullPointerException.class)
403 public void testUpdateSubnetWithNull() {
404 target.updateSubnet(null);
405 }
406
407 /**
408 * Tests if updating a subnet with null ID fails with an exception.
409 */
410 @Test(expected = IllegalArgumentException.class)
411 public void testUpdateSubnetWithNullId() {
412 final Subnet testSubnet = NeutronSubnet.builder()
413 .networkId(NETWORK_ID)
414 .cidr("192.168.0.0/24")
415 .build();
416 target.updateSubnet(testSubnet);
417 }
418
419 /**
420 * Tests if updating a subnet with null network ID fails with an exception.
421 */
422 @Test(expected = IllegalArgumentException.class)
423 public void testUpdateSubnetWithNullNetworkId() {
424 final Subnet testSubnet = NeutronSubnet.builder()
425 .cidr("192.168.0.0/24")
426 .build();
427 testSubnet.setId(SUBNET_ID);
428 target.updateSubnet(testSubnet);
429 }
430
431 /**
432 * Tests if updating a subnet with null CIDR fails with an exception.
433 */
434 @Test(expected = IllegalArgumentException.class)
435 public void testUpdateSubnetWithNullCidr() {
436 final Subnet testSubnet = NeutronSubnet.builder()
437 .networkId(NETWORK_ID)
438 .build();
439 testSubnet.setId(SUBNET_ID);
440 target.updateSubnet(testSubnet);
441 }
442
443 /**
444 * Tests if getting all ports returns correct set of values.
445 */
446 @Test
447 public void testGetPorts() {
448 createBasicNetworks();
449 assertEquals("Number of port did not match", 1, target.ports().size());
450 }
451
452 /**
453 * Tests if getting a port with network ID returns correct set of values.
454 */
455 @Test
456 public void testGetPortsByNetworkId() {
457 createBasicNetworks();
458 assertEquals("Number of port did not match", 1, target.ports(NETWORK_ID).size());
459 assertEquals("Number of port did not match", 0, target.ports(UNKNOWN_ID).size());
460 }
461
462 /**
463 * Tests if getting a port with ID returns correct value.
464 */
465 @Test
466 public void testGetPortById() {
467 createBasicNetworks();
468 assertTrue("Port did not match", target.port(PORT_ID) != null);
469 assertTrue("Port did not match", target.port(UNKNOWN_ID) == null);
470 }
471
472 /**
473 * Tests creating and removing a port, and checks if proper event is triggered.
474 */
475 @Test
476 public void testCreateAndRemovePort() {
477 target.createPort(PORT);
478 assertEquals("Number of port did not match", 1, target.ports().size());
479 assertTrue("Port was not created", target.port(PORT_ID) != null);
480
481 target.removePort(PORT_ID);
482 assertEquals("Number of port did not match", 0, target.ports().size());
483 assertTrue("Port was not created", target.port(PORT_ID) == null);
484
Jian Li8f64feb2018-07-24 13:20:16 +0900485 validateEvents(OPENSTACK_PORT_CREATED, OPENSTACK_PORT_PRE_REMOVE, OPENSTACK_PORT_REMOVED);
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +0900486 }
487
488 /**
489 * Tests creating and updating a port, and checks if proper event is triggered.
490 */
491 @Test
492 public void testCreateAndUpdatePort() {
493 target.createPort(PORT);
494 assertEquals("Number of port did not match", 1, target.ports().size());
495 assertEquals("Port did not match", null, target.port(PORT_ID).getName());
496
Hyunsun Moon32d471f2017-04-27 14:29:44 +0900497 final Port updated = PORT_COPY.toBuilder()
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +0900498 .name(UPDATED_NAME)
499 .build();
500 target.updatePort(updated);
501
502 assertEquals("Number of port did not match", 1, target.ports().size());
503 assertEquals("Port did not match", UPDATED_NAME, target.port(PORT_ID).getName());
504
505 validateEvents(OPENSTACK_PORT_CREATED, OPENSTACK_PORT_UPDATED);
506 }
507
508 /**
509 * Tests if creating a null port fails with an exception.
510 */
511 @Test(expected = NullPointerException.class)
512 public void testCreateNullPort() {
513 target.createPort(null);
514 }
515
516 /**
517 * Tests if creating a port with null ID fails with an exception.
518 */
519 @Test(expected = IllegalArgumentException.class)
520 public void testCreatePortWithNullId() {
521 final Port testPort = NeutronPort.builder()
522 .networkId(NETWORK_ID)
523 .build();
524 target.createPort(testPort);
525 }
526
527 /**
528 * Tests if creating a port with null network ID fails with an exception.
529 */
530 @Test(expected = IllegalArgumentException.class)
531 public void testCreatePortWithNullNetworkId() {
532 final Port testPort = NeutronPort.builder().build();
533 testPort.setId(PORT_ID);
534 target.createPort(testPort);
535 }
536
537 /**
538 * Tests if creating a duplicate port fails with an exception.
539 */
540 @Test(expected = IllegalArgumentException.class)
541 public void createDuplicatePort() {
542 target.createPort(PORT);
543 target.createPort(PORT);
544 }
545
546 /**
547 * Tests if updating an unregistered port fails with an exception.
548 */
549 @Test(expected = IllegalArgumentException.class)
550 public void testUpdateUnregisteredPort() {
551 target.updatePort(PORT);
552 }
553
554 /**
555 * Tests if updating a null port fails with an exception.
556 */
557 @Test(expected = NullPointerException.class)
558 public void testUpdateNullPort() {
559 target.updatePort(null);
560 }
561
562 /**
563 * Tests if updating a port with null ID fails with exception.
564 */
565 @Test(expected = IllegalArgumentException.class)
566 public void testUpdatePortWithNullId() {
567 final Port testPort = NeutronPort.builder()
568 .networkId(NETWORK_ID)
569 .build();
570 target.updatePort(testPort);
571 }
572
573 /**
574 * Tests if updating a port with null network ID fails with an exception.
575 */
576 @Test(expected = IllegalArgumentException.class)
577 public void testUpdatePortWithNullNetworkId() {
578 final Port testPort = NeutronPort.builder().build();
579 testPort.setId(PORT_ID);
580 target.updatePort(testPort);
581 }
582
583 private void createBasicNetworks() {
584 target.createNetwork(NETWORK);
585 target.createSubnet(SUBNET);
586 target.createPort(PORT);
587 }
588
589 private static class TestCoreService extends CoreServiceAdapter {
590
591 @Override
592 public ApplicationId registerApplication(String name) {
593 return TEST_APP_ID;
594 }
595 }
596
daniel parkb5817102018-02-15 00:18:51 +0900597 private static class TestOpenstackNodeManager implements OpenstackNodeService, OpenstackNodeAdminService {
598 Map<String, OpenstackNode> osNodeMap = Maps.newHashMap();
599 List<OpenstackNodeListener> listeners = Lists.newArrayList();
600
601 @Override
602 public Set<OpenstackNode> nodes() {
603 return ImmutableSet.copyOf(osNodeMap.values());
604 }
605
606 @Override
607 public Set<OpenstackNode> nodes(OpenstackNode.NodeType type) {
608 return osNodeMap.values().stream()
609 .filter(osNode -> osNode.type() == type)
610 .collect(Collectors.toSet());
611 }
612
613 @Override
614 public Set<OpenstackNode> completeNodes() {
615 return osNodeMap.values().stream()
616 .filter(osNode -> osNode.state() == COMPLETE)
617 .collect(Collectors.toSet());
618 }
619
620 @Override
621 public Set<OpenstackNode> completeNodes(OpenstackNode.NodeType type) {
622 return osNodeMap.values().stream()
623 .filter(osNode -> osNode.type() == type && osNode.state() == COMPLETE)
624 .collect(Collectors.toSet());
625 }
626
627 @Override
628 public OpenstackNode node(String hostname) {
629 return osNodeMap.get(hostname);
630 }
631
632 @Override
633 public OpenstackNode node(DeviceId deviceId) {
634 return osNodeMap.values().stream()
635 .filter(osNode -> Objects.equals(osNode.intgBridge(), deviceId) ||
636 Objects.equals(osNode.ovsdb(), deviceId))
637 .findFirst().orElse(null);
638 }
639
640 @Override
Jian Li4b5048a2020-10-08 02:57:45 +0900641 public OpenstackNode node(IpAddress mgmtIp) {
642 return null;
643 }
644
645 @Override
Daniel Parkc4d06402018-05-28 15:57:37 +0900646 public void addVfPort(OpenstackNode osNode, String portName) {
647 }
648
649 @Override
650 public void removeVfPort(OpenstackNode osNode, String portName) {
651 }
652
653 @Override
daniel parkb5817102018-02-15 00:18:51 +0900654 public void addListener(OpenstackNodeListener listener) {
655 listeners.add(listener);
656 }
657
658 @Override
659 public void removeListener(OpenstackNodeListener listener) {
660 listeners.remove(listener);
661 }
662
663 @Override
664 public void createNode(OpenstackNode osNode) {
665 osNodeMap.put(osNode.hostname(), osNode);
666 }
667
668 @Override
669 public void updateNode(OpenstackNode osNode) {
670 osNodeMap.put(osNode.hostname(), osNode);
671 }
672
673 @Override
674 public OpenstackNode removeNode(String hostname) {
675 return null;
676 }
677 }
678
Jian Li8f64feb2018-07-24 13:20:16 +0900679 private static class TestPreCommitPortService implements PreCommitPortService {
680
681 @Override
682 public void subscribePreCommit(String subject, Type eventType, String className) {
683
684 }
685
686 @Override
Jian Li628a7cb2018-08-11 23:04:24 +0900687 public void unsubscribePreCommit(String subject, Type eventType,
688 InstancePortAdminService service, String className) {
Jian Li8f64feb2018-07-24 13:20:16 +0900689
690 }
691
692 @Override
693 public int subscriberCountByEventType(String subject, Type eventType) {
694 return 0;
695 }
696
697 @Override
698 public int subscriberCount(String subject) {
699 return 0;
700 }
701 }
702
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +0900703 private static class TestOpenstackNetworkListener implements OpenstackNetworkListener {
704 private List<OpenstackNetworkEvent> events = Lists.newArrayList();
705
706 @Override
707 public void event(OpenstackNetworkEvent event) {
708 events.add(event);
709 }
710 }
711
712 private void validateEvents(Enum... types) {
Hyunsun Moon32d471f2017-04-27 14:29:44 +0900713 int i = 0;
714 assertEquals("Number of events did not match", types.length, testListener.events.size());
715 for (Event event : testListener.events) {
716 assertEquals("Incorrect event received", types[i], event.type());
717 i++;
718 }
719 testListener.events.clear();
Hyunsun Moonc7eb0d02017-03-27 18:13:00 +0900720 }
721}