blob: 3545d06077f567df78b7b72a0713c0c3ca9e3e59 [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 Park7e8c4d82018-08-13 23:47:49 +090039import org.onosproject.openstacknetworking.api.Constants;
Daniel Park95985382018-07-23 11:38:07 +090040import org.onosproject.openstacknetworking.api.InstancePort;
Daniel Park2ff66b42018-08-01 11:52:45 +090041import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
42import org.onosproject.openstacknetworking.api.OpenstackRouterAdminService;
Daniel Park95985382018-07-23 11:38:07 +090043import org.onosproject.openstacknetworking.impl.DefaultInstancePort;
Daniel Park2ff66b42018-08-01 11:52:45 +090044import org.onosproject.openstacknetworking.impl.OpenstackNetworkServiceAdapter;
45import org.onosproject.openstacknetworking.impl.OpenstackRouterServiceAdapter;
46import org.onosproject.openstacknetworking.impl.TestRouterInterface;
Daniel Park95985382018-07-23 11:38:07 +090047import org.onosproject.openstacknetworking.web.OpenstackFloatingIpWebResourceTest;
48import org.onosproject.openstacknetworking.web.OpenstackNetworkWebResourceTest;
Daniel Park2ff66b42018-08-01 11:52:45 +090049import org.onosproject.openstacknode.api.DefaultOpenstackAuth;
50import org.onosproject.openstacknode.api.DefaultOpenstackNode;
Jian Li1064e4f2018-05-29 16:16:53 +090051import org.onosproject.openstacknode.api.NodeState;
Daniel Park2ff66b42018-08-01 11:52:45 +090052import org.onosproject.openstacknode.api.OpenstackAuth;
Jian Li1064e4f2018-05-29 16:16:53 +090053import org.onosproject.openstacknode.api.OpenstackNode;
Jian Li5a38ab62018-07-02 22:34:11 +090054import org.onosproject.openstacknode.api.OpenstackNodeTest;
Jian Lidea0fdb2018-04-02 19:02:48 +090055import org.openstack4j.model.network.NetFloatingIP;
Daniel Park2ff66b42018-08-01 11:52:45 +090056import org.openstack4j.model.network.Network;
Daniel Park95985382018-07-23 11:38:07 +090057import org.openstack4j.model.network.Port;
Daniel Park2ff66b42018-08-01 11:52:45 +090058import org.openstack4j.model.network.RouterInterface;
Jian Lidea0fdb2018-04-02 19:02:48 +090059import org.openstack4j.openstack.networking.domain.NeutronFloatingIP;
Daniel Park2ff66b42018-08-01 11:52:45 +090060import org.openstack4j.openstack.networking.domain.NeutronNetwork;
Daniel Park95985382018-07-23 11:38:07 +090061import org.openstack4j.openstack.networking.domain.NeutronPort;
Jian Lidea0fdb2018-04-02 19:02:48 +090062
63import java.io.IOException;
64import java.io.InputStream;
65import java.nio.charset.StandardCharsets;
Daniel Park95f73312018-07-31 15:48:34 +090066import java.util.List;
Jian Li1064e4f2018-05-29 16:16:53 +090067import java.util.Map;
68import java.util.Set;
69
70import static org.junit.Assert.assertEquals;
Daniel Park95f73312018-07-31 15:48:34 +090071import static org.junit.Assert.assertFalse;
Daniel Park95985382018-07-23 11:38:07 +090072import static org.junit.Assert.assertNull;
Daniel Park95f73312018-07-31 15:48:34 +090073import static org.junit.Assert.assertTrue;
74import static org.onosproject.net.AnnotationKeys.PORT_NAME;
Daniel Parkec9d1132018-08-19 11:18:03 +090075import static org.onosproject.openstacknetworking.api.Constants.UNSUPPORTED_VENDOR;
Daniel Park2ff66b42018-08-01 11:52:45 +090076import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.addRouterIface;
77import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.associatedFloatingIp;
78import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.checkArpMode;
79import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getConnectedClient;
Jian Li1064e4f2018-05-29 16:16:53 +090080import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByComputeDevId;
Daniel Park2ff66b42018-08-01 11:52:45 +090081import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByInstancePort;
82import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
83import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.isAssociatedWithVM;
84import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.jsonToModelEntity;
85import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
86import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
87import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.routerInterfacesEquals;
88import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.swapStaleLocation;
Daniel Park7e8c4d82018-08-13 23:47:49 +090089import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.vnicType;
Jian Lidea0fdb2018-04-02 19:02:48 +090090
91public final class OpenstackNetworkingUtilTest {
92
Daniel Park95985382018-07-23 11:38:07 +090093 private NetFloatingIP floatingIp1;
94 private NetFloatingIP floatingIp2;
95 private NetFloatingIP floatingIp3;
96 private Port openstackPort;
97 private Port openstackSriovPort1;
98 private Port openstackSriovPort2;
99 private Port openstackSriovPort3;
100 private InstancePort instancePort1;
101 private InstancePort instancePort2;
102 private InstancePort instancePort3;
Daniel Park2ff66b42018-08-01 11:52:45 +0900103 private Map<String, RouterInterface> routerInterfaceMap = Maps.newHashMap();
104 private OpenstackNode openstackControlNodeV2;
105 private OpenstackNode openstackControlNodeV3;
Jian Lidea0fdb2018-04-02 19:02:48 +0900106
107 @Before
108 public void setUp() {
Daniel Park95985382018-07-23 11:38:07 +0900109
110 instancePort1 = DefaultInstancePort.builder()
111 .networkId("net-id-1")
112 .portId("ce705c24-c1ef-408a-bda3-7bbd946164ab")
113 .deviceId(DeviceId.deviceId("of:000000000000000a"))
114 .portNumber(PortNumber.portNumber(1, "tap-1"))
115 .ipAddress(IpAddress.valueOf("10.0.0.3"))
116 .macAddress(MacAddress.valueOf("11:22:33:44:55:66"))
117 .state(InstancePort.State.valueOf("ACTIVE"))
Jian Lidea0fdb2018-04-02 19:02:48 +0900118 .build();
Daniel Park95985382018-07-23 11:38:07 +0900119
120 instancePort2 = DefaultInstancePort.builder()
121 .networkId("net-id-2")
122 .portId("port-id-2")
123 .deviceId(DeviceId.deviceId("of:000000000000000b"))
124 .portNumber(PortNumber.portNumber(2, "tap-2"))
125 .ipAddress(IpAddress.valueOf("10.10.10.2"))
126 .macAddress(MacAddress.valueOf("22:33:44:55:66:11"))
127 .state(InstancePort.State.valueOf("ACTIVE"))
128 .build();
129
130 instancePort3 = DefaultInstancePort.builder()
131 .networkId("net-id-3")
132 .portId("port-id-3")
133 .deviceId(DeviceId.deviceId("of:000000000000000c"))
134 .oldDeviceId(DeviceId.deviceId("of:000000000000000d"))
135 .oldPortNumber(PortNumber.portNumber(4, "tap-4"))
136 .portNumber(PortNumber.portNumber(3, "tap-3"))
137 .ipAddress(IpAddress.valueOf("10.10.10.3"))
138 .macAddress(MacAddress.valueOf("33:44:55:66:11:22"))
139 .state(InstancePort.State.valueOf("ACTIVE"))
140 .build();
141
142 InputStream floatingIpjsonStream1 = OpenstackFloatingIpWebResourceTest.class
143 .getResourceAsStream("openstack-floatingip1.json");
144 InputStream floatingIpjsonStream2 = OpenstackFloatingIpWebResourceTest.class
145 .getResourceAsStream("openstack-floatingip2.json");
146 InputStream floatingIpjsonStream3 = OpenstackFloatingIpWebResourceTest.class
147 .getResourceAsStream("openstack-floatingip3.json");
148
149 floatingIp1 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900150 jsonToModelEntity(floatingIpjsonStream1, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900151 floatingIp2 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900152 jsonToModelEntity(floatingIpjsonStream2, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900153 floatingIp3 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900154 jsonToModelEntity(floatingIpjsonStream3, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900155
Daniel Park2ff66b42018-08-01 11:52:45 +0900156 InputStream portJsonStream = OpenstackNetworkWebResourceTest.class
157 .getResourceAsStream("openstack-port.json");
158
159 InputStream sriovPortJsonStream1 = OpenstackNetworkWebResourceTest.class
160 .getResourceAsStream("openstack-port-sriov1.json");
161 InputStream sriovPortJsonStream2 = OpenstackNetworkWebResourceTest.class
162 .getResourceAsStream("openstack-port-sriov2.json");
163 InputStream sriovPortJsonStream3 = OpenstackNetworkWebResourceTest.class
164 .getResourceAsStream("openstack-port-sriov3.json");
165
166 openstackPort = (Port)
167 jsonToModelEntity(portJsonStream, NeutronPort.class);
168
169 openstackSriovPort1 = (Port)
170 jsonToModelEntity(sriovPortJsonStream1, NeutronPort.class);
171 openstackSriovPort2 = (Port)
172 jsonToModelEntity(sriovPortJsonStream2, NeutronPort.class);
173 openstackSriovPort3 = (Port)
174 jsonToModelEntity(sriovPortJsonStream3, NeutronPort.class);
Jian Lidea0fdb2018-04-02 19:02:48 +0900175 }
176
177 @After
178 public void tearDown() {
179 }
180
181 /**
182 * Tests the floatingIp translation.
183 */
184 @Test
185 public void testFloatingIp() throws IOException {
186 ObjectNode floatingIpNode =
Daniel Park2ff66b42018-08-01 11:52:45 +0900187 modelEntityToJson(floatingIp1, NeutronFloatingIP.class);
Jian Lidea0fdb2018-04-02 19:02:48 +0900188 InputStream is = IOUtils.toInputStream(floatingIpNode.toString(), StandardCharsets.UTF_8.name());
189 NetFloatingIP floatingIp2 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900190 jsonToModelEntity(is, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900191 new EqualsTester().addEqualityGroup(floatingIp1, floatingIp2).testEquals();
192 }
193
194 /**
195 * Tests the associatedFloatingIp method.
Daniel Park95985382018-07-23 11:38:07 +0900196 */
197 @Test
198 public void testAsscoatedFloatingIp() throws NullPointerException {
199 Set<NetFloatingIP> testSet = Sets.newHashSet();
200 testSet.add(floatingIp1);
201 testSet.add(floatingIp2);
202 testSet.add(floatingIp3);
203
Daniel Park2ff66b42018-08-01 11:52:45 +0900204 NetFloatingIP floatingIp1 = associatedFloatingIp(instancePort1, testSet);
205 NetFloatingIP floatingIp2 = associatedFloatingIp(instancePort2, testSet);
Daniel Park95985382018-07-23 11:38:07 +0900206
207 assertEquals(floatingIp1, this.floatingIp1);
208 assertEquals(floatingIp2, null);
209 }
210
211 /**
Daniel Park2ff66b42018-08-01 11:52:45 +0900212 * Tests the isAssociatedWithVM method.
213 */
214 @Test
215 public void testIsAssociatedWithVM() {
216 OpenstackNetworkService service = new TestOpenstackNetworkService();
217 NetFloatingIP floatingIp4 = new NeutronFloatingIP().toBuilder().portId("portId4").build();
218
219 assertFalse(isAssociatedWithVM(service, floatingIp4));
220 assertFalse(isAssociatedWithVM(service, floatingIp3));
221 assertTrue(isAssociatedWithVM(service, floatingIp1));
222 }
223
224 /**
225 * Tests the isAssociatedWithVM method in case IllegalStateException is occurred.
226 */
227 @Test(expected = IllegalStateException.class)
228 public void testIsAssociatedWithVMexceptionCase() {
229 OpenstackNetworkService service = new TestOpenstackNetworkService();
230 isAssociatedWithVM(service, floatingIp2);
231 }
232
233
234 /**
Daniel Park95985382018-07-23 11:38:07 +0900235 * Tests the getGwByInstancePort method.
236 */
237 @Test
238 public void testGetGwByInstancePort() {
239
240 Set<OpenstackNode> gws = Sets.newConcurrentHashSet();
241 gws.add(genGateway(1));
242 gws.add(genGateway(2));
243 gws.add(genGateway(3));
244
245 int expectedGwIndex = 2;
246
Daniel Park2ff66b42018-08-01 11:52:45 +0900247 OpenstackNode gw = getGwByInstancePort(gws, instancePort1);
Daniel Park95985382018-07-23 11:38:07 +0900248
249 assertEquals(genGateway(expectedGwIndex), gw);
Daniel Park2ff66b42018-08-01 11:52:45 +0900250
251 assertNull(getGwByInstancePort(gws, null));
Jian Lidea0fdb2018-04-02 19:02:48 +0900252 }
Jian Li1064e4f2018-05-29 16:16:53 +0900253
254 /**
255 * Tests the getGwByComputeDevId method.
256 */
257 @Test
258 public void testGetGwByComputeDevId() {
259 Set<OpenstackNode> gws = Sets.newConcurrentHashSet();
Daniel Park95985382018-07-23 11:38:07 +0900260
261 OpenstackNode nullGw = getGwByComputeDevId(gws, genDeviceId(1));
262 assertNull(nullGw);
263
Jian Li1064e4f2018-05-29 16:16:53 +0900264 gws.add(genGateway(1));
265 gws.add(genGateway(2));
266 gws.add(genGateway(3));
267
268 Set<OpenstackNode> cloneOfGws = ImmutableSet.copyOf(gws);
269
270 Map<String, Integer> gwCountMap = Maps.newConcurrentMap();
271 int numOfDev = 99;
272
273 for (int i = 1; i < 1 + numOfDev; i++) {
274 OpenstackNode gw = getGwByComputeDevId(gws, genDeviceId(i));
275
276 if (gwCountMap.get(gw.hostname()) == null) {
277 gwCountMap.put(gw.hostname(), 1);
278 } else {
279 gwCountMap.compute(gw.hostname(), (k, v) -> v + 1);
280 }
281
282 new EqualsTester().addEqualityGroup(
283 getGwByComputeDevId(gws, genDeviceId(i)),
284 getGwByComputeDevId(cloneOfGws, genDeviceId(i)))
285 .testEquals();
286 }
287
288 int sum = gwCountMap.values().stream().mapToInt(Integer::intValue).sum();
289 assertEquals(numOfDev, sum);
290 }
291
Daniel Park95985382018-07-23 11:38:07 +0900292 /**
293 * Tests getIntfNameFromPciAddress method.
294 */
295 @Test
296 public void testGetIntfNameFromPciAddress() {
297
Daniel Park95985382018-07-23 11:38:07 +0900298 String expectedIntfName1 = "enp5s8";
299 String expectedIntfName2 = "enp5s8f3";
300
Daniel Park2ff66b42018-08-01 11:52:45 +0900301 assertNull(getIntfNameFromPciAddress(openstackPort));
302 assertEquals(expectedIntfName1, getIntfNameFromPciAddress(openstackSriovPort1));
303 assertEquals(expectedIntfName2, getIntfNameFromPciAddress(openstackSriovPort2));
Daniel Parkec9d1132018-08-19 11:18:03 +0900304 assertEquals(UNSUPPORTED_VENDOR, getIntfNameFromPciAddress(openstackSriovPort3));
Daniel Park95985382018-07-23 11:38:07 +0900305 }
306
307 /**
Daniel Park95f73312018-07-31 15:48:34 +0900308 * Tests swapStaleLocation method.
Daniel Park95985382018-07-23 11:38:07 +0900309 */
310 @Test
311 public void testSwapStaleLocation() {
Daniel Park2ff66b42018-08-01 11:52:45 +0900312 InstancePort swappedInstancePort = swapStaleLocation(instancePort3);
Daniel Park95985382018-07-23 11:38:07 +0900313
314 assertEquals(instancePort3.oldDeviceId(), swappedInstancePort.deviceId());
315 assertEquals(instancePort3.oldPortNumber(), swappedInstancePort.portNumber());
316
317 }
318
Daniel Park95f73312018-07-31 15:48:34 +0900319 /**
320 * Tests hasIntfAleadyInDevice method.
321 */
322 @Test
323 public void testHasIntfAleadyInDevice() {
324 DeviceService deviceService = new TestDeviceService();
325 assertTrue(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
326 "port1", deviceService));
327 assertTrue(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
328 "port2", deviceService));
329 assertTrue(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
330 "port3", deviceService));
331 assertFalse(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
332 "port4", deviceService));
333 }
334
Daniel Park2ff66b42018-08-01 11:52:45 +0900335 /**
336 * Tests addRouterIface method.
337 */
338 @Test
339 public void testAddRouterIface() {
340 OpenstackRouterAdminService service = new TestOpenstackRouterAdminService();
Jian Li1064e4f2018-05-29 16:16:53 +0900341
Daniel Park2ff66b42018-08-01 11:52:45 +0900342 addRouterIface(openstackPort, service);
343 RouterInterface initialRouterInterface = new TestRouterInterface(openstackPort.getDeviceId(),
344 openstackPort.getFixedIps().stream().findAny().get().getSubnetId(),
345 openstackPort.getId(),
346 openstackPort.getTenantId());
347
348 assertTrue(routerInterfacesEquals(initialRouterInterface, service.routerInterface(openstackPort.getId())));
349
350 addRouterIface(openstackSriovPort1, service);
351 RouterInterface updatedInitialRouterInterface = new TestRouterInterface(openstackSriovPort1.getDeviceId(),
352 openstackSriovPort1.getFixedIps().stream().findAny().get().getSubnetId(),
353 openstackSriovPort1.getId(),
354 openstackSriovPort1.getTenantId());
355
356 assertTrue(routerInterfacesEquals(
357 updatedInitialRouterInterface, service.routerInterface(openstackSriovPort1.getId())));
358 }
359
360 /**
361 * Util for generating dummy gateway node.
362 *
363 * @param index dummy gateway number
364 * @return dummy gateway node
365 */
366 public OpenstackNode genGateway(int index) {
Jian Li1064e4f2018-05-29 16:16:53 +0900367 Device intgBrg = InternalOpenstackNodeTest.createDevice(index);
368
369 String hostname = "gateway-" + index;
370 IpAddress ip = Ip4Address.valueOf("10.10.10." + index);
371 NodeState state = NodeState.COMPLETE;
372 String uplinkPort = "eth0";
373 return InternalOpenstackNodeTest.createNode(hostname,
374 OpenstackNode.NodeType.GATEWAY, intgBrg, ip, uplinkPort, state);
Daniel Park2ff66b42018-08-01 11:52:45 +0900375 }
376
377 /**
378 * Tests the testPrettyJson method.
379 */
380 @Test
381 public void testPrettyJson() {
382 String string = prettyJson(new ObjectMapper(), "{\"json\":\"json\"}");
383 String prettyJsonString = "{\n \"json\" : \"json\"\n}";
384 assertEquals(string, prettyJsonString);
385
386 assertNull(prettyJson(new ObjectMapper(), "{\"json\":\"json\""));
387 assertNull(prettyJson(new ObjectMapper(), "{\"json\"\"json\"}"));
388 }
389
390 /**
391 * Tests the checkArpMode method.
392 */
393 @Test
394 public void testCheckArpMode() {
395 assertFalse(checkArpMode(null));
396 assertTrue(checkArpMode("proxy"));
397 assertTrue(checkArpMode("broadcast"));
398 }
399
400 /**
401 * Tests the getConnectedClient method.
402 */
Jian Li6d410362018-08-17 09:41:08 +0900403 @Test
Daniel Park2ff66b42018-08-01 11:52:45 +0900404 public void testGetConnectedClient() {
405 OpenstackNode.Builder osNodeBuilderV2 = DefaultOpenstackNode.builder();
406 OpenstackAuth.Builder osNodeAuthBuilderV2 = DefaultOpenstackAuth.builder()
407 .version("v2.0")
Daniel Park2ff66b42018-08-01 11:52:45 +0900408 .protocol(OpenstackAuth.Protocol.HTTP)
409 .project("admin")
410 .username("admin")
411 .password("password")
412 .perspective(OpenstackAuth.Perspective.PUBLIC);
413
414 openstackControlNodeV2 = osNodeBuilderV2.hostname("controllerv2")
415 .type(OpenstackNode.NodeType.CONTROLLER)
416 .managementIp(IpAddress.valueOf("1.1.1.1"))
Jian Li6d410362018-08-17 09:41:08 +0900417 .endpoint("1.1.1.1")
Daniel Park2ff66b42018-08-01 11:52:45 +0900418 .authentication(osNodeAuthBuilderV2.build())
419 .state(NodeState.COMPLETE)
420 .build();
421
Daniel Park2ff66b42018-08-01 11:52:45 +0900422 OpenstackNode.Builder osNodeBuilderV3 = DefaultOpenstackNode.builder();
423 OpenstackAuth.Builder osNodeAuthBuilderV3 = DefaultOpenstackAuth.builder()
424 .version("v2")
Daniel Park2ff66b42018-08-01 11:52:45 +0900425 .protocol(OpenstackAuth.Protocol.HTTP)
426 .project("admin")
427 .username("admin")
428 .password("password")
429 .perspective(OpenstackAuth.Perspective.PUBLIC);
430
431 openstackControlNodeV3 = osNodeBuilderV3.hostname("controllerv3")
432 .type(OpenstackNode.NodeType.CONTROLLER)
433 .managementIp(IpAddress.valueOf("2.2.2.2"))
Jian Li6d410362018-08-17 09:41:08 +0900434 .endpoint("2.2.2.2")
Daniel Park2ff66b42018-08-01 11:52:45 +0900435 .authentication(osNodeAuthBuilderV3.build())
436 .state(NodeState.COMPLETE)
437 .build();
438
439 getConnectedClient(openstackControlNodeV2);
440 getConnectedClient(openstackControlNodeV3);
Jian Li1064e4f2018-05-29 16:16:53 +0900441
442 }
443
Daniel Park7e8c4d82018-08-13 23:47:49 +0900444 /**
445 * Tests the vnicType method.
446 */
447 @Test
448 public void testVnicType() {
449 String portNameNormalTap = "tap123456789ab";
450 String portNameNormalVhu = "tap123456789ab";
451 String portNameNormalCavium = "enp1f2s3";
452 String portNameUnsupported = "123456789ab";
453
454 assertEquals(vnicType(portNameNormalTap), Constants.VnicType.NORMAL);
455 assertEquals(vnicType(portNameNormalVhu), Constants.VnicType.NORMAL);
456 assertEquals(vnicType(portNameNormalCavium), Constants.VnicType.DIRECT);
457 assertEquals(vnicType(portNameUnsupported), Constants.VnicType.UNSUPPORTED);
458 }
459
Jian Li1064e4f2018-05-29 16:16:53 +0900460 private DeviceId genDeviceId(int index) {
461 return DeviceId.deviceId("of:compute-" + index);
462 }
463
464 protected class InternalOpenstackNodeTest extends OpenstackNodeTest {
465 }
Daniel Park95f73312018-07-31 15:48:34 +0900466
467 /**
468 * Mocks the DeviceService.
469 */
470 private class TestDeviceService extends DeviceServiceAdapter {
471 @Override
472 public List<org.onosproject.net.Port> getPorts(DeviceId deviceId) {
473 List<org.onosproject.net.Port> ports = Lists.newArrayList();
474 DefaultAnnotations.Builder annotations1 = DefaultAnnotations.builder()
475 .set(PORT_NAME, "port1");
476 DefaultAnnotations.Builder annotations2 = DefaultAnnotations.builder()
477 .set(PORT_NAME, "port2");
478 DefaultAnnotations.Builder annotations3 = DefaultAnnotations.builder()
479 .set(PORT_NAME, "port3");
480
481 org.onosproject.net.Port port1 = new DefaultPort(null, PortNumber.portNumber(1),
482 true, annotations1.build());
483 org.onosproject.net.Port port2 = new DefaultPort(null, PortNumber.portNumber(2),
484 true, annotations2.build());
485 org.onosproject.net.Port port3 = new DefaultPort(null, PortNumber.portNumber(3),
486 true, annotations3.build());
487
488 ports.add(port1);
489 ports.add(port2);
490 ports.add(port3);
491
492 return ports;
493 }
494 }
Daniel Park2ff66b42018-08-01 11:52:45 +0900495
496 private class TestOpenstackNetworkService extends OpenstackNetworkServiceAdapter {
497 @Override
498 public Network network(String networkId) {
499 if (networkId.equals(openstackSriovPort1.getNetworkId())) {
500 return new NeutronNetwork().toBuilder().name("network").build();
501 } else {
502 return null;
503 }
504 }
505
506 @Override
507 public Port port(String portId) {
508 if (portId.equals(floatingIp1.getPortId())) {
509 return openstackSriovPort1;
510 } else if (portId.equals(floatingIp2.getPortId())) {
511 return openstackSriovPort2;
512 } else if (portId.equals("portId4")) {
513 return new NeutronPort().toBuilder().name("osPort4").build();
514 } else {
515 return null;
516 }
517 }
518 }
519
520 private class TestOpenstackRouterAdminService extends OpenstackRouterServiceAdapter {
521 @Override
522 public void addRouterInterface(RouterInterface osRouterIface) {
523 routerInterfaceMap.put(osRouterIface.getPortId(), osRouterIface);
524 }
525
526 @Override
527 public void updateRouterInterface(RouterInterface osRouterIface) {
528 routerInterfaceMap.put(osRouterIface.getPortId(), osRouterIface);
529 }
530
531 @Override
532 public RouterInterface routerInterface(String osRouterIfaceId) {
533 return routerInterfaceMap.get(osRouterIfaceId);
534 }
535 }
Jian Lidea0fdb2018-04-02 19:02:48 +0900536}