blob: c6e403a59feee9335eb5f582c940d72b6871e30d [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;
Jian Lic704b672018-09-04 18:52:53 +090028import org.junit.Ignore;
Jian Lidea0fdb2018-04-02 19:02:48 +090029import org.junit.Test;
Jian Li1064e4f2018-05-29 16:16:53 +090030import org.onlab.packet.Ip4Address;
31import org.onlab.packet.IpAddress;
Daniel Park95985382018-07-23 11:38:07 +090032import org.onlab.packet.MacAddress;
Daniel Park95f73312018-07-31 15:48:34 +090033import org.onosproject.net.DefaultAnnotations;
34import org.onosproject.net.DefaultPort;
Jian Li1064e4f2018-05-29 16:16:53 +090035import org.onosproject.net.Device;
36import org.onosproject.net.DeviceId;
Daniel Park95985382018-07-23 11:38:07 +090037import org.onosproject.net.PortNumber;
Daniel Park95f73312018-07-31 15:48:34 +090038import org.onosproject.net.device.DeviceService;
39import org.onosproject.net.device.DeviceServiceAdapter;
Daniel Park7e8c4d82018-08-13 23:47:49 +090040import org.onosproject.openstacknetworking.api.Constants;
Daniel Park95985382018-07-23 11:38:07 +090041import org.onosproject.openstacknetworking.api.InstancePort;
Daniel Park2ff66b42018-08-01 11:52:45 +090042import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
43import org.onosproject.openstacknetworking.api.OpenstackRouterAdminService;
Daniel Park95985382018-07-23 11:38:07 +090044import org.onosproject.openstacknetworking.impl.DefaultInstancePort;
Daniel Park2ff66b42018-08-01 11:52:45 +090045import org.onosproject.openstacknetworking.impl.OpenstackNetworkServiceAdapter;
46import org.onosproject.openstacknetworking.impl.OpenstackRouterServiceAdapter;
47import org.onosproject.openstacknetworking.impl.TestRouterInterface;
Daniel Park95985382018-07-23 11:38:07 +090048import org.onosproject.openstacknetworking.web.OpenstackFloatingIpWebResourceTest;
49import org.onosproject.openstacknetworking.web.OpenstackNetworkWebResourceTest;
Daniel Park2ff66b42018-08-01 11:52:45 +090050import org.onosproject.openstacknode.api.DefaultOpenstackAuth;
51import org.onosproject.openstacknode.api.DefaultOpenstackNode;
Jian Lic704b672018-09-04 18:52:53 +090052import org.onosproject.openstacknode.api.KeystoneConfig;
Jian Li1064e4f2018-05-29 16:16:53 +090053import org.onosproject.openstacknode.api.NodeState;
Daniel Park2ff66b42018-08-01 11:52:45 +090054import org.onosproject.openstacknode.api.OpenstackAuth;
Jian Li1064e4f2018-05-29 16:16:53 +090055import org.onosproject.openstacknode.api.OpenstackNode;
Jian Li5a38ab62018-07-02 22:34:11 +090056import org.onosproject.openstacknode.api.OpenstackNodeTest;
Jian Lic704b672018-09-04 18:52:53 +090057import org.onosproject.openstacknode.api.DefaultKeystoneConfig;
Jian Lidea0fdb2018-04-02 19:02:48 +090058import org.openstack4j.model.network.NetFloatingIP;
Daniel Park2ff66b42018-08-01 11:52:45 +090059import org.openstack4j.model.network.Network;
Daniel Park95985382018-07-23 11:38:07 +090060import org.openstack4j.model.network.Port;
Daniel Park2ff66b42018-08-01 11:52:45 +090061import org.openstack4j.model.network.RouterInterface;
Jian Lidea0fdb2018-04-02 19:02:48 +090062import org.openstack4j.openstack.networking.domain.NeutronFloatingIP;
Daniel Park2ff66b42018-08-01 11:52:45 +090063import org.openstack4j.openstack.networking.domain.NeutronNetwork;
Daniel Park95985382018-07-23 11:38:07 +090064import org.openstack4j.openstack.networking.domain.NeutronPort;
Jian Lidea0fdb2018-04-02 19:02:48 +090065
66import java.io.IOException;
67import java.io.InputStream;
68import java.nio.charset.StandardCharsets;
Daniel Park95f73312018-07-31 15:48:34 +090069import java.util.List;
Jian Li1064e4f2018-05-29 16:16:53 +090070import java.util.Map;
71import java.util.Set;
72
73import static org.junit.Assert.assertEquals;
Daniel Park95f73312018-07-31 15:48:34 +090074import static org.junit.Assert.assertFalse;
Daniel Park95985382018-07-23 11:38:07 +090075import static org.junit.Assert.assertNull;
Daniel Park95f73312018-07-31 15:48:34 +090076import static org.junit.Assert.assertTrue;
77import static org.onosproject.net.AnnotationKeys.PORT_NAME;
Daniel Parkec9d1132018-08-19 11:18:03 +090078import static org.onosproject.openstacknetworking.api.Constants.UNSUPPORTED_VENDOR;
Daniel Park2ff66b42018-08-01 11:52:45 +090079import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.addRouterIface;
80import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.associatedFloatingIp;
Jian Licad36c72018-09-13 17:44:54 +090081import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.checkActivationFlag;
Daniel Park2ff66b42018-08-01 11:52:45 +090082import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.checkArpMode;
83import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getConnectedClient;
Jian Li1064e4f2018-05-29 16:16:53 +090084import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByComputeDevId;
Daniel Park2ff66b42018-08-01 11:52:45 +090085import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByInstancePort;
86import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
87import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.isAssociatedWithVM;
88import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.jsonToModelEntity;
89import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
90import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
91import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.routerInterfacesEquals;
92import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.swapStaleLocation;
Daniel Park7e8c4d82018-08-13 23:47:49 +090093import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.vnicType;
Jian Lidea0fdb2018-04-02 19:02:48 +090094
95public final class OpenstackNetworkingUtilTest {
96
Daniel Park95985382018-07-23 11:38:07 +090097 private NetFloatingIP floatingIp1;
98 private NetFloatingIP floatingIp2;
99 private NetFloatingIP floatingIp3;
100 private Port openstackPort;
101 private Port openstackSriovPort1;
102 private Port openstackSriovPort2;
103 private Port openstackSriovPort3;
104 private InstancePort instancePort1;
105 private InstancePort instancePort2;
106 private InstancePort instancePort3;
Daniel Park2ff66b42018-08-01 11:52:45 +0900107 private Map<String, RouterInterface> routerInterfaceMap = Maps.newHashMap();
108 private OpenstackNode openstackControlNodeV2;
109 private OpenstackNode openstackControlNodeV3;
Jian Lidea0fdb2018-04-02 19:02:48 +0900110
111 @Before
112 public void setUp() {
Daniel Park95985382018-07-23 11:38:07 +0900113
114 instancePort1 = DefaultInstancePort.builder()
115 .networkId("net-id-1")
116 .portId("ce705c24-c1ef-408a-bda3-7bbd946164ab")
117 .deviceId(DeviceId.deviceId("of:000000000000000a"))
118 .portNumber(PortNumber.portNumber(1, "tap-1"))
119 .ipAddress(IpAddress.valueOf("10.0.0.3"))
120 .macAddress(MacAddress.valueOf("11:22:33:44:55:66"))
121 .state(InstancePort.State.valueOf("ACTIVE"))
Jian Lidea0fdb2018-04-02 19:02:48 +0900122 .build();
Daniel Park95985382018-07-23 11:38:07 +0900123
124 instancePort2 = DefaultInstancePort.builder()
125 .networkId("net-id-2")
126 .portId("port-id-2")
127 .deviceId(DeviceId.deviceId("of:000000000000000b"))
128 .portNumber(PortNumber.portNumber(2, "tap-2"))
129 .ipAddress(IpAddress.valueOf("10.10.10.2"))
130 .macAddress(MacAddress.valueOf("22:33:44:55:66:11"))
131 .state(InstancePort.State.valueOf("ACTIVE"))
132 .build();
133
134 instancePort3 = DefaultInstancePort.builder()
135 .networkId("net-id-3")
136 .portId("port-id-3")
137 .deviceId(DeviceId.deviceId("of:000000000000000c"))
138 .oldDeviceId(DeviceId.deviceId("of:000000000000000d"))
139 .oldPortNumber(PortNumber.portNumber(4, "tap-4"))
140 .portNumber(PortNumber.portNumber(3, "tap-3"))
141 .ipAddress(IpAddress.valueOf("10.10.10.3"))
142 .macAddress(MacAddress.valueOf("33:44:55:66:11:22"))
143 .state(InstancePort.State.valueOf("ACTIVE"))
144 .build();
145
146 InputStream floatingIpjsonStream1 = OpenstackFloatingIpWebResourceTest.class
147 .getResourceAsStream("openstack-floatingip1.json");
148 InputStream floatingIpjsonStream2 = OpenstackFloatingIpWebResourceTest.class
149 .getResourceAsStream("openstack-floatingip2.json");
150 InputStream floatingIpjsonStream3 = OpenstackFloatingIpWebResourceTest.class
151 .getResourceAsStream("openstack-floatingip3.json");
152
153 floatingIp1 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900154 jsonToModelEntity(floatingIpjsonStream1, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900155 floatingIp2 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900156 jsonToModelEntity(floatingIpjsonStream2, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900157 floatingIp3 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900158 jsonToModelEntity(floatingIpjsonStream3, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900159
Daniel Park2ff66b42018-08-01 11:52:45 +0900160 InputStream portJsonStream = OpenstackNetworkWebResourceTest.class
161 .getResourceAsStream("openstack-port.json");
162
163 InputStream sriovPortJsonStream1 = OpenstackNetworkWebResourceTest.class
164 .getResourceAsStream("openstack-port-sriov1.json");
165 InputStream sriovPortJsonStream2 = OpenstackNetworkWebResourceTest.class
166 .getResourceAsStream("openstack-port-sriov2.json");
167 InputStream sriovPortJsonStream3 = OpenstackNetworkWebResourceTest.class
168 .getResourceAsStream("openstack-port-sriov3.json");
169
170 openstackPort = (Port)
171 jsonToModelEntity(portJsonStream, NeutronPort.class);
172
173 openstackSriovPort1 = (Port)
174 jsonToModelEntity(sriovPortJsonStream1, NeutronPort.class);
175 openstackSriovPort2 = (Port)
176 jsonToModelEntity(sriovPortJsonStream2, NeutronPort.class);
177 openstackSriovPort3 = (Port)
178 jsonToModelEntity(sriovPortJsonStream3, NeutronPort.class);
Jian Lidea0fdb2018-04-02 19:02:48 +0900179 }
180
181 @After
182 public void tearDown() {
183 }
184
185 /**
186 * Tests the floatingIp translation.
187 */
188 @Test
189 public void testFloatingIp() throws IOException {
190 ObjectNode floatingIpNode =
Daniel Park2ff66b42018-08-01 11:52:45 +0900191 modelEntityToJson(floatingIp1, NeutronFloatingIP.class);
Jian Lidea0fdb2018-04-02 19:02:48 +0900192 InputStream is = IOUtils.toInputStream(floatingIpNode.toString(), StandardCharsets.UTF_8.name());
193 NetFloatingIP floatingIp2 = (NetFloatingIP)
Daniel Park2ff66b42018-08-01 11:52:45 +0900194 jsonToModelEntity(is, NeutronFloatingIP.class);
Daniel Park95985382018-07-23 11:38:07 +0900195 new EqualsTester().addEqualityGroup(floatingIp1, floatingIp2).testEquals();
196 }
197
198 /**
199 * Tests the associatedFloatingIp method.
Daniel Park95985382018-07-23 11:38:07 +0900200 */
201 @Test
202 public void testAsscoatedFloatingIp() throws NullPointerException {
203 Set<NetFloatingIP> testSet = Sets.newHashSet();
204 testSet.add(floatingIp1);
205 testSet.add(floatingIp2);
206 testSet.add(floatingIp3);
207
Daniel Park2ff66b42018-08-01 11:52:45 +0900208 NetFloatingIP floatingIp1 = associatedFloatingIp(instancePort1, testSet);
209 NetFloatingIP floatingIp2 = associatedFloatingIp(instancePort2, testSet);
Daniel Park95985382018-07-23 11:38:07 +0900210
211 assertEquals(floatingIp1, this.floatingIp1);
212 assertEquals(floatingIp2, null);
213 }
214
215 /**
Daniel Park2ff66b42018-08-01 11:52:45 +0900216 * Tests the isAssociatedWithVM method.
217 */
218 @Test
219 public void testIsAssociatedWithVM() {
220 OpenstackNetworkService service = new TestOpenstackNetworkService();
221 NetFloatingIP floatingIp4 = new NeutronFloatingIP().toBuilder().portId("portId4").build();
222
223 assertFalse(isAssociatedWithVM(service, floatingIp4));
224 assertFalse(isAssociatedWithVM(service, floatingIp3));
225 assertTrue(isAssociatedWithVM(service, floatingIp1));
226 }
227
228 /**
229 * Tests the isAssociatedWithVM method in case IllegalStateException is occurred.
230 */
231 @Test(expected = IllegalStateException.class)
232 public void testIsAssociatedWithVMexceptionCase() {
233 OpenstackNetworkService service = new TestOpenstackNetworkService();
234 isAssociatedWithVM(service, floatingIp2);
235 }
236
237
238 /**
Daniel Park95985382018-07-23 11:38:07 +0900239 * Tests the getGwByInstancePort method.
240 */
241 @Test
242 public void testGetGwByInstancePort() {
243
244 Set<OpenstackNode> gws = Sets.newConcurrentHashSet();
245 gws.add(genGateway(1));
246 gws.add(genGateway(2));
247 gws.add(genGateway(3));
248
249 int expectedGwIndex = 2;
250
Daniel Park2ff66b42018-08-01 11:52:45 +0900251 OpenstackNode gw = getGwByInstancePort(gws, instancePort1);
Daniel Park95985382018-07-23 11:38:07 +0900252
253 assertEquals(genGateway(expectedGwIndex), gw);
Daniel Park2ff66b42018-08-01 11:52:45 +0900254
255 assertNull(getGwByInstancePort(gws, null));
Jian Lidea0fdb2018-04-02 19:02:48 +0900256 }
Jian Li1064e4f2018-05-29 16:16:53 +0900257
258 /**
259 * Tests the getGwByComputeDevId method.
260 */
261 @Test
262 public void testGetGwByComputeDevId() {
263 Set<OpenstackNode> gws = Sets.newConcurrentHashSet();
Daniel Park95985382018-07-23 11:38:07 +0900264
265 OpenstackNode nullGw = getGwByComputeDevId(gws, genDeviceId(1));
266 assertNull(nullGw);
267
Jian Li1064e4f2018-05-29 16:16:53 +0900268 gws.add(genGateway(1));
269 gws.add(genGateway(2));
270 gws.add(genGateway(3));
271
272 Set<OpenstackNode> cloneOfGws = ImmutableSet.copyOf(gws);
273
274 Map<String, Integer> gwCountMap = Maps.newConcurrentMap();
275 int numOfDev = 99;
276
277 for (int i = 1; i < 1 + numOfDev; i++) {
278 OpenstackNode gw = getGwByComputeDevId(gws, genDeviceId(i));
279
280 if (gwCountMap.get(gw.hostname()) == null) {
281 gwCountMap.put(gw.hostname(), 1);
282 } else {
283 gwCountMap.compute(gw.hostname(), (k, v) -> v + 1);
284 }
285
286 new EqualsTester().addEqualityGroup(
287 getGwByComputeDevId(gws, genDeviceId(i)),
288 getGwByComputeDevId(cloneOfGws, genDeviceId(i)))
289 .testEquals();
290 }
291
292 int sum = gwCountMap.values().stream().mapToInt(Integer::intValue).sum();
293 assertEquals(numOfDev, sum);
294 }
295
Daniel Park95985382018-07-23 11:38:07 +0900296 /**
297 * Tests getIntfNameFromPciAddress method.
298 */
299 @Test
300 public void testGetIntfNameFromPciAddress() {
301
Daniel Park95985382018-07-23 11:38:07 +0900302 String expectedIntfName1 = "enp5s8";
303 String expectedIntfName2 = "enp5s8f3";
304
Daniel Park2ff66b42018-08-01 11:52:45 +0900305 assertNull(getIntfNameFromPciAddress(openstackPort));
306 assertEquals(expectedIntfName1, getIntfNameFromPciAddress(openstackSriovPort1));
307 assertEquals(expectedIntfName2, getIntfNameFromPciAddress(openstackSriovPort2));
Daniel Parkec9d1132018-08-19 11:18:03 +0900308 assertEquals(UNSUPPORTED_VENDOR, getIntfNameFromPciAddress(openstackSriovPort3));
Daniel Park95985382018-07-23 11:38:07 +0900309 }
310
311 /**
Daniel Park95f73312018-07-31 15:48:34 +0900312 * Tests swapStaleLocation method.
Daniel Park95985382018-07-23 11:38:07 +0900313 */
314 @Test
315 public void testSwapStaleLocation() {
Daniel Park2ff66b42018-08-01 11:52:45 +0900316 InstancePort swappedInstancePort = swapStaleLocation(instancePort3);
Daniel Park95985382018-07-23 11:38:07 +0900317
318 assertEquals(instancePort3.oldDeviceId(), swappedInstancePort.deviceId());
319 assertEquals(instancePort3.oldPortNumber(), swappedInstancePort.portNumber());
320
321 }
322
Daniel Park95f73312018-07-31 15:48:34 +0900323 /**
324 * Tests hasIntfAleadyInDevice method.
325 */
326 @Test
327 public void testHasIntfAleadyInDevice() {
328 DeviceService deviceService = new TestDeviceService();
329 assertTrue(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
330 "port1", deviceService));
331 assertTrue(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
332 "port2", deviceService));
333 assertTrue(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
334 "port3", deviceService));
335 assertFalse(OpenstackNetworkingUtil.hasIntfAleadyInDevice(DeviceId.deviceId("deviceId"),
336 "port4", deviceService));
337 }
338
Daniel Park2ff66b42018-08-01 11:52:45 +0900339 /**
340 * Tests addRouterIface method.
341 */
342 @Test
343 public void testAddRouterIface() {
344 OpenstackRouterAdminService service = new TestOpenstackRouterAdminService();
Jian Li1064e4f2018-05-29 16:16:53 +0900345
Daniel Park2ff66b42018-08-01 11:52:45 +0900346 addRouterIface(openstackPort, service);
347 RouterInterface initialRouterInterface = new TestRouterInterface(openstackPort.getDeviceId(),
348 openstackPort.getFixedIps().stream().findAny().get().getSubnetId(),
349 openstackPort.getId(),
350 openstackPort.getTenantId());
351
352 assertTrue(routerInterfacesEquals(initialRouterInterface, service.routerInterface(openstackPort.getId())));
353
354 addRouterIface(openstackSriovPort1, service);
355 RouterInterface updatedInitialRouterInterface = new TestRouterInterface(openstackSriovPort1.getDeviceId(),
356 openstackSriovPort1.getFixedIps().stream().findAny().get().getSubnetId(),
357 openstackSriovPort1.getId(),
358 openstackSriovPort1.getTenantId());
359
360 assertTrue(routerInterfacesEquals(
361 updatedInitialRouterInterface, service.routerInterface(openstackSriovPort1.getId())));
362 }
363
364 /**
365 * Util for generating dummy gateway node.
366 *
367 * @param index dummy gateway number
368 * @return dummy gateway node
369 */
370 public OpenstackNode genGateway(int index) {
Jian Li1064e4f2018-05-29 16:16:53 +0900371 Device intgBrg = InternalOpenstackNodeTest.createDevice(index);
372
373 String hostname = "gateway-" + index;
374 IpAddress ip = Ip4Address.valueOf("10.10.10." + index);
375 NodeState state = NodeState.COMPLETE;
376 String uplinkPort = "eth0";
377 return InternalOpenstackNodeTest.createNode(hostname,
378 OpenstackNode.NodeType.GATEWAY, intgBrg, ip, uplinkPort, state);
Daniel Park2ff66b42018-08-01 11:52:45 +0900379 }
380
381 /**
382 * Tests the testPrettyJson method.
383 */
384 @Test
385 public void testPrettyJson() {
386 String string = prettyJson(new ObjectMapper(), "{\"json\":\"json\"}");
387 String prettyJsonString = "{\n \"json\" : \"json\"\n}";
388 assertEquals(string, prettyJsonString);
389
390 assertNull(prettyJson(new ObjectMapper(), "{\"json\":\"json\""));
391 assertNull(prettyJson(new ObjectMapper(), "{\"json\"\"json\"}"));
392 }
393
394 /**
395 * Tests the checkArpMode method.
396 */
397 @Test
398 public void testCheckArpMode() {
399 assertFalse(checkArpMode(null));
400 assertTrue(checkArpMode("proxy"));
401 assertTrue(checkArpMode("broadcast"));
402 }
403
404 /**
405 * Tests the getConnectedClient method.
406 */
Jian Lic704b672018-09-04 18:52:53 +0900407 @Ignore
Jian Li6d410362018-08-17 09:41:08 +0900408 @Test
Daniel Park2ff66b42018-08-01 11:52:45 +0900409 public void testGetConnectedClient() {
410 OpenstackNode.Builder osNodeBuilderV2 = DefaultOpenstackNode.builder();
411 OpenstackAuth.Builder osNodeAuthBuilderV2 = DefaultOpenstackAuth.builder()
412 .version("v2.0")
Daniel Park2ff66b42018-08-01 11:52:45 +0900413 .protocol(OpenstackAuth.Protocol.HTTP)
414 .project("admin")
415 .username("admin")
416 .password("password")
417 .perspective(OpenstackAuth.Perspective.PUBLIC);
418
Jian Lic704b672018-09-04 18:52:53 +0900419 String endpointV2 = "1.1.1.1:35357/v2.0";
420
421 KeystoneConfig keystoneConfigV2 = DefaultKeystoneConfig.builder()
422 .authentication(osNodeAuthBuilderV2.build())
423 .endpoint(endpointV2)
424 .build();
425
Daniel Park2ff66b42018-08-01 11:52:45 +0900426 openstackControlNodeV2 = osNodeBuilderV2.hostname("controllerv2")
427 .type(OpenstackNode.NodeType.CONTROLLER)
428 .managementIp(IpAddress.valueOf("1.1.1.1"))
Jian Lic704b672018-09-04 18:52:53 +0900429 .keystoneConfig(keystoneConfigV2)
Daniel Park2ff66b42018-08-01 11:52:45 +0900430 .state(NodeState.COMPLETE)
431 .build();
432
Daniel Park2ff66b42018-08-01 11:52:45 +0900433 OpenstackNode.Builder osNodeBuilderV3 = DefaultOpenstackNode.builder();
434 OpenstackAuth.Builder osNodeAuthBuilderV3 = DefaultOpenstackAuth.builder()
435 .version("v2")
Daniel Park2ff66b42018-08-01 11:52:45 +0900436 .protocol(OpenstackAuth.Protocol.HTTP)
437 .project("admin")
438 .username("admin")
439 .password("password")
440 .perspective(OpenstackAuth.Perspective.PUBLIC);
441
Jian Lic704b672018-09-04 18:52:53 +0900442 String endpointV3 = "2.2.2.2:80/v3";
443
444 KeystoneConfig keystoneConfigV3 = DefaultKeystoneConfig.builder()
445 .authentication(osNodeAuthBuilderV3.build())
446 .endpoint(endpointV3)
447 .build();
448
Daniel Park2ff66b42018-08-01 11:52:45 +0900449 openstackControlNodeV3 = osNodeBuilderV3.hostname("controllerv3")
450 .type(OpenstackNode.NodeType.CONTROLLER)
451 .managementIp(IpAddress.valueOf("2.2.2.2"))
Jian Lic704b672018-09-04 18:52:53 +0900452 .keystoneConfig(keystoneConfigV3)
Daniel Park2ff66b42018-08-01 11:52:45 +0900453 .state(NodeState.COMPLETE)
454 .build();
455
456 getConnectedClient(openstackControlNodeV2);
457 getConnectedClient(openstackControlNodeV3);
Jian Li1064e4f2018-05-29 16:16:53 +0900458 }
459
Daniel Park7e8c4d82018-08-13 23:47:49 +0900460 /**
461 * Tests the vnicType method.
462 */
463 @Test
464 public void testVnicType() {
465 String portNameNormalTap = "tap123456789ab";
466 String portNameNormalVhu = "tap123456789ab";
467 String portNameNormalCavium = "enp1f2s3";
468 String portNameUnsupported = "123456789ab";
469
470 assertEquals(vnicType(portNameNormalTap), Constants.VnicType.NORMAL);
471 assertEquals(vnicType(portNameNormalVhu), Constants.VnicType.NORMAL);
472 assertEquals(vnicType(portNameNormalCavium), Constants.VnicType.DIRECT);
473 assertEquals(vnicType(portNameUnsupported), Constants.VnicType.UNSUPPORTED);
474 }
475
Jian Licad36c72018-09-13 17:44:54 +0900476 /**
477 * Tests the checkActivationFlag method.
478 */
479 @Test
480 public void testCheckActivationFlag() {
481 assertFalse(checkActivationFlag("disable"));
482 assertTrue(checkActivationFlag("enable"));
483 }
484
485 /**
486 * Tests the checkActivationFlag method with incorrect input parameters.
487 */
488 @Test (expected = IllegalArgumentException.class)
489 public void testCheckActivationFlagWithException() {
490 checkActivationFlag("test");
491 checkActivationFlag(null);
492 }
493
Jian Li1064e4f2018-05-29 16:16:53 +0900494 private DeviceId genDeviceId(int index) {
495 return DeviceId.deviceId("of:compute-" + index);
496 }
497
498 protected class InternalOpenstackNodeTest extends OpenstackNodeTest {
499 }
Daniel Park95f73312018-07-31 15:48:34 +0900500
501 /**
502 * Mocks the DeviceService.
503 */
504 private class TestDeviceService extends DeviceServiceAdapter {
505 @Override
506 public List<org.onosproject.net.Port> getPorts(DeviceId deviceId) {
507 List<org.onosproject.net.Port> ports = Lists.newArrayList();
508 DefaultAnnotations.Builder annotations1 = DefaultAnnotations.builder()
509 .set(PORT_NAME, "port1");
510 DefaultAnnotations.Builder annotations2 = DefaultAnnotations.builder()
511 .set(PORT_NAME, "port2");
512 DefaultAnnotations.Builder annotations3 = DefaultAnnotations.builder()
513 .set(PORT_NAME, "port3");
514
515 org.onosproject.net.Port port1 = new DefaultPort(null, PortNumber.portNumber(1),
516 true, annotations1.build());
517 org.onosproject.net.Port port2 = new DefaultPort(null, PortNumber.portNumber(2),
518 true, annotations2.build());
519 org.onosproject.net.Port port3 = new DefaultPort(null, PortNumber.portNumber(3),
520 true, annotations3.build());
521
522 ports.add(port1);
523 ports.add(port2);
524 ports.add(port3);
525
526 return ports;
527 }
528 }
Daniel Park2ff66b42018-08-01 11:52:45 +0900529
530 private class TestOpenstackNetworkService extends OpenstackNetworkServiceAdapter {
531 @Override
532 public Network network(String networkId) {
533 if (networkId.equals(openstackSriovPort1.getNetworkId())) {
534 return new NeutronNetwork().toBuilder().name("network").build();
535 } else {
536 return null;
537 }
538 }
539
540 @Override
541 public Port port(String portId) {
542 if (portId.equals(floatingIp1.getPortId())) {
543 return openstackSriovPort1;
544 } else if (portId.equals(floatingIp2.getPortId())) {
545 return openstackSriovPort2;
546 } else if (portId.equals("portId4")) {
547 return new NeutronPort().toBuilder().name("osPort4").build();
548 } else {
549 return null;
550 }
551 }
552 }
553
554 private class TestOpenstackRouterAdminService extends OpenstackRouterServiceAdapter {
555 @Override
556 public void addRouterInterface(RouterInterface osRouterIface) {
557 routerInterfaceMap.put(osRouterIface.getPortId(), osRouterIface);
558 }
559
560 @Override
561 public void updateRouterInterface(RouterInterface osRouterIface) {
562 routerInterfaceMap.put(osRouterIface.getPortId(), osRouterIface);
563 }
564
565 @Override
566 public RouterInterface routerInterface(String osRouterIfaceId) {
567 return routerInterfaceMap.get(osRouterIfaceId);
568 }
569 }
Jian Lidea0fdb2018-04-02 19:02:48 +0900570}