blob: 0e291f86d4478e2e9255d8968f15af57e7eaa7aa [file] [log] [blame]
Jian Lidea0fdb2018-04-02 19:02:48 +09001/*
2 * Copyright 2018-present Open Networking Foundation
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 */
16package org.onosproject.openstacknetworking.util;
17
Daniel Park2ff66b42018-08-01 11:52:45 +090018import com.fasterxml.jackson.databind.ObjectMapper;
Jian Lidea0fdb2018-04-02 19:02:48 +090019import com.fasterxml.jackson.databind.node.ObjectNode;
Jian Li1064e4f2018-05-29 16:16:53 +090020import com.google.common.collect.ImmutableSet;
Daniel Park95f73312018-07-31 15:48:34 +090021import com.google.common.collect.Lists;
Jian Li1064e4f2018-05-29 16:16:53 +090022import com.google.common.collect.Maps;
23import com.google.common.collect.Sets;
Jian Lidea0fdb2018-04-02 19:02:48 +090024import com.google.common.testing.EqualsTester;
25import org.apache.commons.io.IOUtils;
26import org.junit.After;
27import org.junit.Before;
28import org.junit.Test;
Jian Li1064e4f2018-05-29 16:16:53 +090029import org.onlab.packet.Ip4Address;
30import org.onlab.packet.IpAddress;
Daniel Park95985382018-07-23 11:38:07 +090031import org.onlab.packet.MacAddress;
Daniel Park95f73312018-07-31 15:48:34 +090032import org.onosproject.net.DefaultAnnotations;
33import org.onosproject.net.DefaultPort;
Jian Li1064e4f2018-05-29 16:16:53 +090034import org.onosproject.net.Device;
35import org.onosproject.net.DeviceId;
Daniel Park95985382018-07-23 11:38:07 +090036import org.onosproject.net.PortNumber;
Daniel Park95f73312018-07-31 15:48:34 +090037import org.onosproject.net.device.DeviceService;
38import org.onosproject.net.device.DeviceServiceAdapter;
Daniel Park95985382018-07-23 11:38:07 +090039import org.onosproject.openstacknetworking.api.InstancePort;
Daniel Park2ff66b42018-08-01 11:52:45 +090040import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
41import org.onosproject.openstacknetworking.api.OpenstackRouterAdminService;
Daniel Park95985382018-07-23 11:38:07 +090042import org.onosproject.openstacknetworking.impl.DefaultInstancePort;
Daniel Park2ff66b42018-08-01 11:52:45 +090043import org.onosproject.openstacknetworking.impl.OpenstackNetworkServiceAdapter;
44import org.onosproject.openstacknetworking.impl.OpenstackRouterServiceAdapter;
45import org.onosproject.openstacknetworking.impl.TestRouterInterface;
Daniel Park95985382018-07-23 11:38:07 +090046import org.onosproject.openstacknetworking.web.OpenstackFloatingIpWebResourceTest;
47import org.onosproject.openstacknetworking.web.OpenstackNetworkWebResourceTest;
Daniel Park2ff66b42018-08-01 11:52:45 +090048import org.onosproject.openstacknode.api.DefaultOpenstackAuth;
49import org.onosproject.openstacknode.api.DefaultOpenstackNode;
Jian Li1064e4f2018-05-29 16:16:53 +090050import org.onosproject.openstacknode.api.NodeState;
Daniel Park2ff66b42018-08-01 11:52:45 +090051import org.onosproject.openstacknode.api.OpenstackAuth;
Jian Li1064e4f2018-05-29 16:16:53 +090052import org.onosproject.openstacknode.api.OpenstackNode;
Jian Li5a38ab62018-07-02 22:34:11 +090053import org.onosproject.openstacknode.api.OpenstackNodeTest;
Jian Lidea0fdb2018-04-02 19:02:48 +090054import org.openstack4j.model.network.NetFloatingIP;
Daniel Park2ff66b42018-08-01 11:52:45 +090055import org.openstack4j.model.network.Network;
Daniel Park95985382018-07-23 11:38:07 +090056import org.openstack4j.model.network.Port;
Daniel Park2ff66b42018-08-01 11:52:45 +090057import org.openstack4j.model.network.RouterInterface;
Jian Lidea0fdb2018-04-02 19:02:48 +090058import org.openstack4j.openstack.networking.domain.NeutronFloatingIP;
Daniel Park2ff66b42018-08-01 11:52:45 +090059import org.openstack4j.openstack.networking.domain.NeutronNetwork;
Daniel Park95985382018-07-23 11:38:07 +090060import org.openstack4j.openstack.networking.domain.NeutronPort;
Jian Lidea0fdb2018-04-02 19:02:48 +090061
62import java.io.IOException;
63import java.io.InputStream;
64import java.nio.charset.StandardCharsets;
Daniel Park95f73312018-07-31 15:48:34 +090065import java.util.List;
Jian Li1064e4f2018-05-29 16:16:53 +090066import java.util.Map;
67import java.util.Set;
68
69import static org.junit.Assert.assertEquals;
Daniel Park95f73312018-07-31 15:48:34 +090070import static org.junit.Assert.assertFalse;
Daniel Park95985382018-07-23 11:38:07 +090071import static org.junit.Assert.assertNull;
Daniel Park95f73312018-07-31 15:48:34 +090072import static org.junit.Assert.assertTrue;
73import static org.onosproject.net.AnnotationKeys.PORT_NAME;
Daniel Park2ff66b42018-08-01 11:52:45 +090074import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.addRouterIface;
75import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.associatedFloatingIp;
76import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.checkArpMode;
77import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getConnectedClient;
Jian Li1064e4f2018-05-29 16:16:53 +090078import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByComputeDevId;
Daniel Park2ff66b42018-08-01 11:52:45 +090079import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByInstancePort;
80import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
81import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.isAssociatedWithVM;
82import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.jsonToModelEntity;
83import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
84import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
85import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.routerInterfacesEquals;
86import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.swapStaleLocation;
Jian Lidea0fdb2018-04-02 19:02:48 +090087
88public final class OpenstackNetworkingUtilTest {
89
Daniel Park95985382018-07-23 11:38:07 +090090 private NetFloatingIP floatingIp1;
91 private NetFloatingIP floatingIp2;
92 private NetFloatingIP floatingIp3;
93 private Port openstackPort;
94 private Port openstackSriovPort1;
95 private Port openstackSriovPort2;
96 private Port openstackSriovPort3;
97 private InstancePort instancePort1;
98 private InstancePort instancePort2;
99 private InstancePort instancePort3;
Daniel Park2ff66b42018-08-01 11:52:45 +0900100 private Map<String, RouterInterface> routerInterfaceMap = Maps.newHashMap();
101 private OpenstackNode openstackControlNodeV2;
102 private OpenstackNode openstackControlNodeV3;
Jian Lidea0fdb2018-04-02 19:02:48 +0900103
104 @Before
105 public void setUp() {
Daniel Park95985382018-07-23 11:38:07 +0900106
107 instancePort1 = DefaultInstancePort.builder()
108 .networkId("net-id-1")
109 .portId("ce705c24-c1ef-408a-bda3-7bbd946164ab")
110 .deviceId(DeviceId.deviceId("of:000000000000000a"))
111 .portNumber(PortNumber.portNumber(1, "tap-1"))
112 .ipAddress(IpAddress.valueOf("10.0.0.3"))
113 .macAddress(MacAddress.valueOf("11:22:33:44:55:66"))
114 .state(InstancePort.State.valueOf("ACTIVE"))
Jian Lidea0fdb2018-04-02 19:02:48 +0900115 .build();
Daniel Park95985382018-07-23 11:38:07 +0900116
117 instancePort2 = DefaultInstancePort.builder()
118 .networkId("net-id-2")
119 .portId("port-id-2")
120 .deviceId(DeviceId.deviceId("of:000000000000000b"))
121 .portNumber(PortNumber.portNumber(2, "tap-2"))
122 .ipAddress(IpAddress.valueOf("10.10.10.2"))
123 .macAddress(MacAddress.valueOf("22:33:44:55:66:11"))
124 .state(InstancePort.State.valueOf("ACTIVE"))
125 .build();
126
127 instancePort3 = DefaultInstancePort.builder()
128 .networkId("net-id-3")
129 .portId("port-id-3")
130 .deviceId(DeviceId.deviceId("of:000000000000000c"))
131 .oldDeviceId(DeviceId.deviceId("of:000000000000000d"))
132 .oldPortNumber(PortNumber.portNumber(4, "tap-4"))
133 .portNumber(PortNumber.portNumber(3, "tap-3"))
134 .ipAddress(IpAddress.valueOf("10.10.10.3"))
135 .macAddress(MacAddress.valueOf("33:44:55:66:11:22"))
136 .state(InstancePort.State.valueOf("ACTIVE"))
137 .build();
138
139 InputStream floatingIpjsonStream1 = OpenstackFloatingIpWebResourceTest.class
140 .getResourceAsStream("openstack-floatingip1.json");
141 InputStream floatingIpjsonStream2 = OpenstackFloatingIpWebResourceTest.class
142 .getResourceAsStream("openstack-floatingip2.json");
143 InputStream floatingIpjsonStream3 = OpenstackFloatingIpWebResourceTest.class
144 .getResourceAsStream("openstack-floatingip3.json");
145
146 floatingIp1 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900147 jsonToModelEntity(floatingIpjsonStream1, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900148 floatingIp2 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900149 jsonToModelEntity(floatingIpjsonStream2, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900150 floatingIp3 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900151 jsonToModelEntity(floatingIpjsonStream3, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900152
Daniel Park2ff66b42018-08-01 11:52:45 +0900153 InputStream portJsonStream = OpenstackNetworkWebResourceTest.class
154 .getResourceAsStream("openstack-port.json");
155
156 InputStream sriovPortJsonStream1 = OpenstackNetworkWebResourceTest.class
157 .getResourceAsStream("openstack-port-sriov1.json");
158 InputStream sriovPortJsonStream2 = OpenstackNetworkWebResourceTest.class
159 .getResourceAsStream("openstack-port-sriov2.json");
160 InputStream sriovPortJsonStream3 = OpenstackNetworkWebResourceTest.class
161 .getResourceAsStream("openstack-port-sriov3.json");
162
163 openstackPort = (Port)
164 jsonToModelEntity(portJsonStream, NeutronPort.class);
165
166 openstackSriovPort1 = (Port)
167 jsonToModelEntity(sriovPortJsonStream1, NeutronPort.class);
168 openstackSriovPort2 = (Port)
169 jsonToModelEntity(sriovPortJsonStream2, NeutronPort.class);
170 openstackSriovPort3 = (Port)
171 jsonToModelEntity(sriovPortJsonStream3, NeutronPort.class);
Jian Lidea0fdb2018-04-02 19:02:48 +0900172 }
173
174 @After
175 public void tearDown() {
176 }
177
178 /**
179 * Tests the floatingIp translation.
180 */
181 @Test
182 public void testFloatingIp() throws IOException {
183 ObjectNode floatingIpNode =
Daniel Park2ff66b42018-08-01 11:52:45 +0900184 modelEntityToJson(floatingIp1, NeutronFloatingIP.class);
Jian Lidea0fdb2018-04-02 19:02:48 +0900185 InputStream is = IOUtils.toInputStream(floatingIpNode.toString(), StandardCharsets.UTF_8.name());
186 NetFloatingIP floatingIp2 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900187 jsonToModelEntity(is, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900188 new EqualsTester().addEqualityGroup(floatingIp1, floatingIp2).testEquals();
189 }
190
191 /**
192 * Tests the associatedFloatingIp method.
Daniel Park95985382018-07-23 11:38:07 +0900193 */
194 @Test
195 public void testAsscoatedFloatingIp() throws NullPointerException {
196 Set<NetFloatingIP> testSet = Sets.newHashSet();
197 testSet.add(floatingIp1);
198 testSet.add(floatingIp2);
199 testSet.add(floatingIp3);
200
Daniel Park2ff66b42018-08-01 11:52:45 +0900201 NetFloatingIP floatingIp1 = associatedFloatingIp(instancePort1, testSet);
202 NetFloatingIP floatingIp2 = associatedFloatingIp(instancePort2, testSet);
Daniel Park95985382018-07-23 11:38:07 +0900203
204 assertEquals(floatingIp1, this.floatingIp1);
205 assertEquals(floatingIp2, null);
206 }
207
208 /**
Daniel Park2ff66b42018-08-01 11:52:45 +0900209 * Tests the isAssociatedWithVM method.
210 */
211 @Test
212 public void testIsAssociatedWithVM() {
213 OpenstackNetworkService service = new TestOpenstackNetworkService();
214 NetFloatingIP floatingIp4 = new NeutronFloatingIP().toBuilder().portId("portId4").build();
215
216 assertFalse(isAssociatedWithVM(service, floatingIp4));
217 assertFalse(isAssociatedWithVM(service, floatingIp3));
218 assertTrue(isAssociatedWithVM(service, floatingIp1));
219 }
220
221 /**
222 * Tests the isAssociatedWithVM method in case IllegalStateException is occurred.
223 */
224 @Test(expected = IllegalStateException.class)
225 public void testIsAssociatedWithVMexceptionCase() {
226 OpenstackNetworkService service = new TestOpenstackNetworkService();
227 isAssociatedWithVM(service, floatingIp2);
228 }
229
230
231 /**
Daniel Park95985382018-07-23 11:38:07 +0900232 * Tests the getGwByInstancePort method.
233 */
234 @Test
235 public void testGetGwByInstancePort() {
236
237 Set<OpenstackNode> gws = Sets.newConcurrentHashSet();
238 gws.add(genGateway(1));
239 gws.add(genGateway(2));
240 gws.add(genGateway(3));
241
242 int expectedGwIndex = 2;
243
Daniel Park2ff66b42018-08-01 11:52:45 +0900244 OpenstackNode gw = getGwByInstancePort(gws, instancePort1);
Daniel Park95985382018-07-23 11:38:07 +0900245
246 assertEquals(genGateway(expectedGwIndex), gw);
Daniel Park2ff66b42018-08-01 11:52:45 +0900247
248 assertNull(getGwByInstancePort(gws, null));
Jian Lidea0fdb2018-04-02 19:02:48 +0900249 }
Jian Li1064e4f2018-05-29 16:16:53 +0900250
251 /**
252 * Tests the getGwByComputeDevId method.
253 */
254 @Test
255 public void testGetGwByComputeDevId() {
256 Set<OpenstackNode> gws = Sets.newConcurrentHashSet();
Daniel Park95985382018-07-23 11:38:07 +0900257
258 OpenstackNode nullGw = getGwByComputeDevId(gws, genDeviceId(1));
259 assertNull(nullGw);
260
Jian Li1064e4f2018-05-29 16:16:53 +0900261 gws.add(genGateway(1));
262 gws.add(genGateway(2));
263 gws.add(genGateway(3));
264
265 Set<OpenstackNode> cloneOfGws = ImmutableSet.copyOf(gws);
266
267 Map<String, Integer> gwCountMap = Maps.newConcurrentMap();
268 int numOfDev = 99;
269
270 for (int i = 1; i < 1 + numOfDev; i++) {
271 OpenstackNode gw = getGwByComputeDevId(gws, genDeviceId(i));
272
273 if (gwCountMap.get(gw.hostname()) == null) {
274 gwCountMap.put(gw.hostname(), 1);
275 } else {
276 gwCountMap.compute(gw.hostname(), (k, v) -> v + 1);
277 }
278
279 new EqualsTester().addEqualityGroup(
280 getGwByComputeDevId(gws, genDeviceId(i)),
281 getGwByComputeDevId(cloneOfGws, genDeviceId(i)))
282 .testEquals();
283 }
284
285 int sum = gwCountMap.values().stream().mapToInt(Integer::intValue).sum();
286 assertEquals(numOfDev, sum);
287 }
288
Daniel Park95985382018-07-23 11:38:07 +0900289 /**
290 * Tests getIntfNameFromPciAddress method.
291 */
292 @Test
293 public void testGetIntfNameFromPciAddress() {
294
Daniel Park95985382018-07-23 11:38:07 +0900295 String expectedIntfName1 = "enp5s8";
296 String expectedIntfName2 = "enp5s8f3";
297
Daniel Park2ff66b42018-08-01 11:52:45 +0900298 assertNull(getIntfNameFromPciAddress(openstackPort));
299 assertEquals(expectedIntfName1, getIntfNameFromPciAddress(openstackSriovPort1));
300 assertEquals(expectedIntfName2, getIntfNameFromPciAddress(openstackSriovPort2));
301 assertNull(getIntfNameFromPciAddress(openstackSriovPort3));
Daniel Park95985382018-07-23 11:38:07 +0900302 }
303
304 /**
Daniel Park95f73312018-07-31 15:48:34 +0900305 * Tests swapStaleLocation method.
Daniel Park95985382018-07-23 11:38:07 +0900306 */
307 @Test
308 public void testSwapStaleLocation() {
Daniel Park2ff66b42018-08-01 11:52:45 +0900309 InstancePort swappedInstancePort = swapStaleLocation(instancePort3);
Daniel Park95985382018-07-23 11:38:07 +0900310
311 assertEquals(instancePort3.oldDeviceId(), swappedInstancePort.deviceId());
312 assertEquals(instancePort3.oldPortNumber(), swappedInstancePort.portNumber());
313
314 }
315
Daniel Park95f73312018-07-31 15:48:34 +0900316 /**
317 * Tests hasIntfAleadyInDevice method.
318 */
319 @Test
320 public void testHasIntfAleadyInDevice() {
321 DeviceService deviceService = new TestDeviceService();
322 assertTrue(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
323 "port1", deviceService));
324 assertTrue(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
325 "port2", deviceService));
326 assertTrue(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
327 "port3", deviceService));
328 assertFalse(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
329 "port4", deviceService));
330 }
331
Daniel Park2ff66b42018-08-01 11:52:45 +0900332 /**
333 * Tests addRouterIface method.
334 */
335 @Test
336 public void testAddRouterIface() {
337 OpenstackRouterAdminService service = new TestOpenstackRouterAdminService();
Jian Li1064e4f2018-05-29 16:16:53 +0900338
Daniel Park2ff66b42018-08-01 11:52:45 +0900339 addRouterIface(openstackPort, service);
340 RouterInterface initialRouterInterface = new TestRouterInterface(openstackPort.getDeviceId(),
341 openstackPort.getFixedIps().stream().findAny().get().getSubnetId(),
342 openstackPort.getId(),
343 openstackPort.getTenantId());
344
345 assertTrue(routerInterfacesEquals(initialRouterInterface, service.routerInterface(openstackPort.getId())));
346
347 addRouterIface(openstackSriovPort1, service);
348 RouterInterface updatedInitialRouterInterface = new TestRouterInterface(openstackSriovPort1.getDeviceId(),
349 openstackSriovPort1.getFixedIps().stream().findAny().get().getSubnetId(),
350 openstackSriovPort1.getId(),
351 openstackSriovPort1.getTenantId());
352
353 assertTrue(routerInterfacesEquals(
354 updatedInitialRouterInterface, service.routerInterface(openstackSriovPort1.getId())));
355 }
356
357 /**
358 * Util for generating dummy gateway node.
359 *
360 * @param index dummy gateway number
361 * @return dummy gateway node
362 */
363 public OpenstackNode genGateway(int index) {
Jian Li1064e4f2018-05-29 16:16:53 +0900364 Device intgBrg = InternalOpenstackNodeTest.createDevice(index);
365
366 String hostname = "gateway-" + index;
367 IpAddress ip = Ip4Address.valueOf("10.10.10." + index);
368 NodeState state = NodeState.COMPLETE;
369 String uplinkPort = "eth0";
370 return InternalOpenstackNodeTest.createNode(hostname,
371 OpenstackNode.NodeType.GATEWAY, intgBrg, ip, uplinkPort, state);
Daniel Park2ff66b42018-08-01 11:52:45 +0900372 }
373
374 /**
375 * Tests the testPrettyJson method.
376 */
377 @Test
378 public void testPrettyJson() {
379 String string = prettyJson(new ObjectMapper(), "{\"json\":\"json\"}");
380 String prettyJsonString = "{\n \"json\" : \"json\"\n}";
381 assertEquals(string, prettyJsonString);
382
383 assertNull(prettyJson(new ObjectMapper(), "{\"json\":\"json\""));
384 assertNull(prettyJson(new ObjectMapper(), "{\"json\"\"json\"}"));
385 }
386
387 /**
388 * Tests the checkArpMode method.
389 */
390 @Test
391 public void testCheckArpMode() {
392 assertFalse(checkArpMode(null));
393 assertTrue(checkArpMode("proxy"));
394 assertTrue(checkArpMode("broadcast"));
395 }
396
397 /**
398 * Tests the getConnectedClient method.
399 */
Jian Li6d410362018-08-17 09:41:08 +0900400 @Test
Daniel Park2ff66b42018-08-01 11:52:45 +0900401 public void testGetConnectedClient() {
402 OpenstackNode.Builder osNodeBuilderV2 = DefaultOpenstackNode.builder();
403 OpenstackAuth.Builder osNodeAuthBuilderV2 = DefaultOpenstackAuth.builder()
404 .version("v2.0")
Daniel Park2ff66b42018-08-01 11:52:45 +0900405 .protocol(OpenstackAuth.Protocol.HTTP)
406 .project("admin")
407 .username("admin")
408 .password("password")
409 .perspective(OpenstackAuth.Perspective.PUBLIC);
410
411 openstackControlNodeV2 = osNodeBuilderV2.hostname("controllerv2")
412 .type(OpenstackNode.NodeType.CONTROLLER)
413 .managementIp(IpAddress.valueOf("1.1.1.1"))
Jian Li6d410362018-08-17 09:41:08 +0900414 .endpoint("1.1.1.1")
Daniel Park2ff66b42018-08-01 11:52:45 +0900415 .authentication(osNodeAuthBuilderV2.build())
416 .state(NodeState.COMPLETE)
417 .build();
418
Daniel Park2ff66b42018-08-01 11:52:45 +0900419 OpenstackNode.Builder osNodeBuilderV3 = DefaultOpenstackNode.builder();
420 OpenstackAuth.Builder osNodeAuthBuilderV3 = DefaultOpenstackAuth.builder()
421 .version("v2")
Daniel Park2ff66b42018-08-01 11:52:45 +0900422 .protocol(OpenstackAuth.Protocol.HTTP)
423 .project("admin")
424 .username("admin")
425 .password("password")
426 .perspective(OpenstackAuth.Perspective.PUBLIC);
427
428 openstackControlNodeV3 = osNodeBuilderV3.hostname("controllerv3")
429 .type(OpenstackNode.NodeType.CONTROLLER)
430 .managementIp(IpAddress.valueOf("2.2.2.2"))
Jian Li6d410362018-08-17 09:41:08 +0900431 .endpoint("2.2.2.2")
Daniel Park2ff66b42018-08-01 11:52:45 +0900432 .authentication(osNodeAuthBuilderV3.build())
433 .state(NodeState.COMPLETE)
434 .build();
435
436 getConnectedClient(openstackControlNodeV2);
437 getConnectedClient(openstackControlNodeV3);
Jian Li1064e4f2018-05-29 16:16:53 +0900438
439 }
440
441 private DeviceId genDeviceId(int index) {
442 return DeviceId.deviceId("of:compute-" + index);
443 }
444
445 protected class InternalOpenstackNodeTest extends OpenstackNodeTest {
446 }
Daniel Park95f73312018-07-31 15:48:34 +0900447
448 /**
449 * Mocks the DeviceService.
450 */
451 private class TestDeviceService extends DeviceServiceAdapter {
452 @Override
453 public List<org.onosproject.net.Port> getPorts(DeviceId deviceId) {
454 List<org.onosproject.net.Port> ports = Lists.newArrayList();
455 DefaultAnnotations.Builder annotations1 = DefaultAnnotations.builder()
456 .set(PORT_NAME, "port1");
457 DefaultAnnotations.Builder annotations2 = DefaultAnnotations.builder()
458 .set(PORT_NAME, "port2");
459 DefaultAnnotations.Builder annotations3 = DefaultAnnotations.builder()
460 .set(PORT_NAME, "port3");
461
462 org.onosproject.net.Port port1 = new DefaultPort(null, PortNumber.portNumber(1),
463 true, annotations1.build());
464 org.onosproject.net.Port port2 = new DefaultPort(null, PortNumber.portNumber(2),
465 true, annotations2.build());
466 org.onosproject.net.Port port3 = new DefaultPort(null, PortNumber.portNumber(3),
467 true, annotations3.build());
468
469 ports.add(port1);
470 ports.add(port2);
471 ports.add(port3);
472
473 return ports;
474 }
475 }
Daniel Park2ff66b42018-08-01 11:52:45 +0900476
477 private class TestOpenstackNetworkService extends OpenstackNetworkServiceAdapter {
478 @Override
479 public Network network(String networkId) {
480 if (networkId.equals(openstackSriovPort1.getNetworkId())) {
481 return new NeutronNetwork().toBuilder().name("network").build();
482 } else {
483 return null;
484 }
485 }
486
487 @Override
488 public Port port(String portId) {
489 if (portId.equals(floatingIp1.getPortId())) {
490 return openstackSriovPort1;
491 } else if (portId.equals(floatingIp2.getPortId())) {
492 return openstackSriovPort2;
493 } else if (portId.equals("portId4")) {
494 return new NeutronPort().toBuilder().name("osPort4").build();
495 } else {
496 return null;
497 }
498 }
499 }
500
501 private class TestOpenstackRouterAdminService extends OpenstackRouterServiceAdapter {
502 @Override
503 public void addRouterInterface(RouterInterface osRouterIface) {
504 routerInterfaceMap.put(osRouterIface.getPortId(), osRouterIface);
505 }
506
507 @Override
508 public void updateRouterInterface(RouterInterface osRouterIface) {
509 routerInterfaceMap.put(osRouterIface.getPortId(), osRouterIface);
510 }
511
512 @Override
513 public RouterInterface routerInterface(String osRouterIfaceId) {
514 return routerInterfaceMap.get(osRouterIfaceId);
515 }
516 }
Jian Lidea0fdb2018-04-02 19:02:48 +0900517}