2 * Copyright (c) 2014 Intel Corp. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 * Authors : Marcus Koontz
10 package org.opendaylight.ovsdb.openstack.netvirt.impl;
12 //import com.fasterxml.jackson.annotation.JsonIgnoreType;
13 import org.junit.Ignore;
14 import org.junit.runner.RunWith;
15 import org.junit.Test;
16 import org.mockito.InjectMocks;
17 import org.mockito.Mock;
18 import org.mockito.Spy;
19 import org.mockito.invocation.InvocationOnMock;
20 import org.mockito.runners.MockitoJUnitRunner;
21 import org.mockito.stubbing.Answer;
22 import org.opendaylight.neutron.spi.NeutronNetwork;
23 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
24 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
25 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
27 import java.util.ArrayList;
28 import java.util.List;
29 import java.util.concurrent.ConcurrentHashMap;
31 import java.util.HashMap;
32 import java.util.HashSet;
35 import static org.junit.Assert.assertTrue;
36 import static org.junit.Assert.assertEquals;
37 import static org.mockito.Matchers.any;
38 import static org.mockito.Matchers.anyString;
39 import static org.mockito.Matchers.same;
40 import static org.mockito.Mockito.doAnswer;
41 import static org.mockito.Mockito.mock;
42 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
43 import static org.mockito.Mockito.RETURNS_MOCKS;
44 import static org.mockito.Mockito.reset;
45 import static org.mockito.Mockito.times;
46 import static org.mockito.Mockito.verify;
47 import static org.mockito.Mockito.verifyNoMoreInteractions;
48 import static org.mockito.Mockito.when;
50 @Ignore // TODO SB_MIGRATION
51 @RunWith(MockitoJUnitRunner.class)
52 public class BridgeConfigurationManagerImplTest {
54 private Node nodeMock = mock(Node.class, RETURNS_DEEP_STUBS);
55 //private Bridge bridgeMock = mock(Bridge.class, RETURNS_DEEP_STUBS);
57 @Mock private ConfigurationService configurationService;
58 @Mock private NetworkingProviderManager networkingProviderManager;
61 @InjectMocks public static BridgeConfigurationManagerImpl bridgeConfigurationManagerImpl;
62 @InjectMocks public static BridgeConfigurationManagerImpl bridgeConfigMock =
63 mock(BridgeConfigurationManagerImpl.class, RETURNS_DEEP_STUBS);
64 @Spy public static BridgeConfigurationManagerImpl bridgeConfigurationManagerImplSpy;
67 public void testGetBridgeUuid() throws Exception {
68 //Row row = mock(Row.class);
69 //Bridge bridge = mock(Bridge.class, RETURNS_DEEP_STUBS);
71 //ConcurrentHashMap<String, Row> hashMap;
72 //hashMap = new ConcurrentHashMap<>();
73 //hashMap.put("mockUUID", row);
75 /* TODO SB_MIGRATION */
76 //verifyNoMoreInteractions(ovsdbConfigurationService);
77 verifyNoMoreInteractions(configurationService);
78 verifyNoMoreInteractions(networkingProviderManager);
80 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
81 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Bridge.class),
82 // any(Row.class))).thenReturn(bridge);
83 //when(bridge.getName()).thenReturn("test-bridge");
85 /* TODO SB_MIGRATION */
86 //assertEquals("Error, did not return UUID of correct bridge", "mockUUID",
87 // bridgeConfigurationManagerImpl.getBridgeUuid(nodeMock, "test-bridge"));
89 //verify(ovsdbConfigurationService).getTableName(nodeMock, Bridge.class);
90 verifyNoMoreInteractions(configurationService);
91 verifyNoMoreInteractions(networkingProviderManager);
95 public void testIsNodeNeutronReady() throws Exception {
96 //Row row = mock(Row.class);
97 //Bridge bridge = mock(Bridge.class, RETURNS_DEEP_STUBS);
99 //ConcurrentHashMap<String, Row> hashMap;
100 //hashMap = new ConcurrentHashMap<>();
101 //hashMap.put("mockUUID", row);
103 /* TODO SB_MIGRATION */
104 //verifyNoMoreInteractions(ovsdbConfigurationService);
105 verifyNoMoreInteractions(configurationService);
106 verifyNoMoreInteractions(networkingProviderManager);
108 assertEquals("Error, did not return correct boolean from isNodeNeutronReady", false,
109 bridgeConfigurationManagerImpl.isNodeNeutronReady(nodeMock));
111 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
112 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Bridge.class),
113 // any(Row.class))).thenReturn(bridge);
114 //when(bridge.getName()).thenReturn("test-bridge");
115 when(configurationService.getIntegrationBridgeName()).thenReturn("test-bridge");
117 assertEquals("Error, did not return correct boolean from isNodeNeutronReady", true,
118 bridgeConfigurationManagerImpl.isNodeNeutronReady(nodeMock));
120 verify(configurationService, times(2)).getIntegrationBridgeName();
121 verifyNoMoreInteractions(networkingProviderManager);
124 /* TODO SB_MIGRATION */ @Ignore
126 public void testIsNodeOverlayReady() throws Exception {
127 //Row row = mock(Row.class);
128 //Bridge bridge = mock(Bridge.class, RETURNS_DEEP_STUBS);
130 //ConcurrentHashMap<String, Row> hashMap;
131 //hashMap = new ConcurrentHashMap<>();
132 //hashMap.put("mockUUID", row);
134 /* TODO SB_MIGRATION */
135 //verifyNoMoreInteractions(ovsdbConfigurationService);
136 verifyNoMoreInteractions(configurationService);
137 verifyNoMoreInteractions(networkingProviderManager);
139 assertEquals("Error, did not return correct boolean from isNodeOverlayReady", false,
140 bridgeConfigurationManagerImpl.isNodeOverlayReady(nodeMock));
142 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
143 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Bridge.class),
144 // any(Row.class))).thenReturn(bridge);
145 //when(bridge.getName()).thenReturn("test-bridge");
146 when(configurationService.getIntegrationBridgeName()).thenReturn("test-bridge");
147 when(configurationService.getNetworkBridgeName()).thenReturn("test-bridge");
149 /* TODO SB_MIGRATION */
150 //assertEquals("Error, did not return correct boolean from isNodeOverlayReady", true,
151 // bridgeConfigurationManagerImpl.isNodeOverlayReady(nodeMock));
153 verify(configurationService, times(2)).getIntegrationBridgeName();
154 verify(configurationService, times(1)).getNetworkBridgeName();
155 //verify(ovsdbConfigurationService, times(3)).getTableName(nodeMock, Bridge.class);
156 verifyNoMoreInteractions(networkingProviderManager);
159 @Ignore // TODO SB_MIGRATION
161 public void testIsPortOnBridge() throws Exception {
163 UUID uuid = mock(UUID.class);
164 Set<UUID> uuidSet = new HashSet<>();
166 Column<GenericTableSchema, Set<UUID>> columnMock = mock(Column.class);
167 Port port = mock(Port.class, RETURNS_DEEP_STUBS);
168 String portName = "portNameMock";
170 //verifyNoMoreInteractions(ovsdbConfigurationService);
171 verifyNoMoreInteractions(configurationService);
172 verifyNoMoreInteractions(networkingProviderManager);
174 when(bridgeMock.getPortsColumn()).thenReturn(columnMock);
175 when(columnMock.getData()).thenReturn(uuidSet);
176 assertEquals("Error, did not return correct boolean from isPortOnBridge", false,
177 bridgeConfigurationManagerImpl.isPortOnBridge(nodeMock, bridgeMock, portName));
179 when(port.getName()).thenReturn(portName);
181 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), any(Class.class), any(Row.class))).thenReturn(port);
182 when(port.getName()).thenReturn(portName);
184 //assertEquals("Error, did not return correct boolean from isPortOnBridge", true,
185 // bridgeConfigurationManagerImpl.isPortOnBridge(nodeMock, bridgeMock, portName));
187 verify(bridgeMock, times(2)).getPortsColumn();
188 //verify(ovsdbConfigurationService, times(2)).getRow(any(Node.class), anyString(), anyString());
189 //verify(ovsdbConfigurationService, times(2)).getTableName(any(Node.class), any(Class.class));
190 //verify(ovsdbConfigurationService, times(2)).getTypedRow(any(Node.class), any(Class.class), any(Row.class));
191 verifyNoMoreInteractions(networkingProviderManager);
192 verifyNoMoreInteractions(configurationService);*/
196 public void testIsNodeTunnelReady() throws Exception {
197 String bridgeMockName = "BridgeMockName";
199 /* TODO SB_MIGRATION */
200 //verifyNoMoreInteractions(ovsdbConfigurationService);
201 verifyNoMoreInteractions(configurationService);
202 verifyNoMoreInteractions(networkingProviderManager);
204 when(configurationService.getIntegrationBridgeName()).thenReturn(bridgeMockName);
205 // readBridge() is private method - cannot be mocked with mockito
206 // when(bridgeConfigurationManagerImpl.readBridge(any(Node.class), anyString())).thenReturn(bridgeMock);
208 // Negative testing only due to private method call
209 assertEquals("Error, did not return correct boolean from isNodeTunnelReady", false,
210 bridgeConfigurationManagerImpl.isNodeTunnelReady(nodeMock));
212 verify(configurationService, times(1)).getIntegrationBridgeName();
213 verify(networkingProviderManager, times(0)).getProvider(nodeMock);
214 verify(configurationService, times(0)).getNetworkBridgeName();
215 //verify(ovsdbConfigurationService, times(1)).getRows(any(Node.class), anyString());
216 //verify(ovsdbConfigurationService, times(1)).getTableName(any(Node.class), any(Class.class));
217 //verify(ovsdbConfigurationService, times(0)).getTypedRow(any(Node.class), any(Class.class), any(Row.class));
221 public void testIsNodeVlanReady() throws Exception {
222 NeutronNetwork neutronNetworkMock = mock(NeutronNetwork.class);
224 /* TODO SB_MIGRATION */
225 //verifyNoMoreInteractions(ovsdbConfigurationService);
226 verifyNoMoreInteractions(configurationService);
227 verifyNoMoreInteractions(networkingProviderManager);
229 // readBridge() is private method - cannot be mocked with mockito
230 // Negative testing only due to private method call
231 assertEquals("Error, did not return correct boolean from isNodeVlanReady", false,
232 bridgeConfigurationManagerImpl.isNodeVlanReady(nodeMock, neutronNetworkMock));
234 verify(configurationService, times(1)).getIntegrationBridgeName();
235 verify(networkingProviderManager, times(0)).getProvider(any(Node.class));
236 verify(configurationService, times(0)).getNetworkBridgeName();
237 //verify(ovsdbConfigurationService, times(1)).getRows(any(Node.class), anyString());
238 //verify(ovsdbConfigurationService, times(1)).getTableName(any(Node.class), any(Class.class));
239 //verify(ovsdbConfigurationService, times(0)).getTypedRow(any(Node.class), any(Class.class), any(Row.class));
240 verify(neutronNetworkMock, times(0)).getProviderPhysicalNetwork();
243 /* TODO SB_MIGRATION */
246 public void testPrepareNode() throws Exception {
247 NetworkingProvider netProvider = mock(NetworkingProvider.class);
248 when(configurationService.getIntegrationBridgeName()).thenReturn("intBridgeName");
249 when(networkingProviderManager.getProvider(any(Node.class))).thenReturn(netProvider);
251 // createIntegrationBridge() is private method - cannot be mocked with mockito
252 // Negative testing only due to private method call
253 bridgeConfigurationManagerImpl.prepareNode(nodeMock);
255 verify(configurationService, times(1)).getIntegrationBridgeName();
256 /* TODO SB_MIGRATION */
257 //verify(networkingProviderManager, times(0)).getProvider(any(Node.class));
258 verify(netProvider, times(0)).initializeFlowRules(any(Node.class));
262 public void testCreateLocalNetwork() throws Exception {
263 NeutronNetwork neutronNetworkMock = mock(NeutronNetwork.class, RETURNS_MOCKS);
264 String networkTypes[] = {"vlan", "vxlan", "gre"};
266 for (String networkType : networkTypes) {
267 when(neutronNetworkMock.getProviderNetworkType()).thenReturn(networkType);
269 doAnswer(new Answer<Boolean>() {
271 public Boolean answer(InvocationOnMock invocation) {
274 }).when(bridgeConfigurationManagerImplSpy).isNodeVlanReady(any(Node.class), any(NeutronNetwork.class));
276 doAnswer(new Answer<Boolean>() {
278 public Boolean answer(InvocationOnMock invocation) {
281 }).when(bridgeConfigurationManagerImplSpy).isNodeTunnelReady(any(Node.class));
283 assertTrue("bridgeConfigMock.isNodeVlanReady is not true",
284 bridgeConfigurationManagerImplSpy.isNodeVlanReady(nodeMock, neutronNetworkMock));
285 assertTrue("bridgeConfigMock.isNodeTunnelReady is not true",
286 bridgeConfigurationManagerImplSpy.isNodeTunnelReady(nodeMock));
288 assertTrue("Error, isCreated is not true for " + networkType,
289 bridgeConfigurationManagerImplSpy.createLocalNetwork(nodeMock, neutronNetworkMock));
290 if (networkType == "vlan") {
291 verify(neutronNetworkMock, times(1)).getProviderNetworkType();
292 } else if (networkType == "vxlan") {
293 verify(neutronNetworkMock, times(2)).getProviderNetworkType();
294 } else if (networkType == "gre") {
295 verify(neutronNetworkMock, times(3)).getProviderNetworkType();
297 reset(neutronNetworkMock);
299 reset(bridgeConfigurationManagerImplSpy);
303 @Ignore // TODO SB_MIGRATION
305 public void testGetPhysicalInterfaceName() throws Exception {
306 ConcurrentHashMap ovsTable = mock(ConcurrentHashMap.class, RETURNS_DEEP_STUBS);
307 //Row row = mock(Row.class);
308 //OpenVSwitch ovsRowOVS = mock(OpenVSwitch.class);
309 //Column<GenericTableSchema, Map<String, String>> col = mock(Column.class);
310 Map<String, String> colMap = mock(Map.class);
312 //HashMap<String, OpenVSwitch> hashMapOVS = new HashMap<>();
313 //hashMapOVS.put("ovsRow", ovsRowOVS);
314 //ConcurrentHashMap<String, Row> hashMap;
315 //hashMap = new ConcurrentHashMap<>();
316 //hashMap.put("row1", row);
318 String networkNames[] = {"network-0", "network-1", "network-2", "network-3"};
319 String interfaceNames[] = {"interfaceName-0", "interfaceName-1", "interfaceName-2", "interfaceName-3"};
322 for (String networkName : networkNames) {
323 /* TODO SB_MIGRATION */
324 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
325 //when(ovsTable.values()).thenReturn(hashMapOVS.values());
327 //when(ovsRowOVS.getOtherConfigColumn()).thenReturn(col);
328 //when(col.getData()).thenReturn(colMap);
329 when(configurationService.getProviderMappingsKey()).thenReturn("network-0:interfaceName-0," +
330 "network-1:interfaceName-1,network-2:interfaceName-2,network-3:interfaceName-3");
331 when(colMap.get(anyString())).thenReturn("network-0:interfaceName-0,network-1:interfaceName-1," +
332 "network-2:interfaceName-2,network-3:interfaceName-3");
334 when(configurationService.getDefaultProviderMapping()).thenReturn("network-0:interfaceName-0," +
335 "network-1:interfaceName-1,network-2:interfaceName-2,network-3:interfaceName-3");
337 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(OpenVSwitch.class),
338 // any(Row.class))).thenReturn(ovsRowOVS);
340 assertEquals("Error, network: " + networkName + ", did not match interface: " + interfaceNames[count],
341 interfaceNames[count], bridgeConfigurationManagerImpl.getPhysicalInterfaceName(nodeMock,
344 //verify(ovsdbConfigurationService, times(count + 1)).getRows(any(Node.class), anyString());
345 //verify(ovsdbConfigurationService, times(count + 1)).getTableName(any(Node.class), any(Class.class));
346 //verify(ovsdbConfigurationService, times(count + 1)).getTypedRow(any(Node.class), any(Class.class),
348 verify(configurationService, times(count + 1)).getProviderMappingsKey();
349 verify(configurationService, times(0)).getDefaultProviderMapping();
355 public void testGetAllPhysicalInterfaceNames() throws Exception {
356 String interfaceNames[] = {"interfaceName-0", "interfaceName-1", "interfaceName-2", "interfaceName-3"};
357 List<String> intNameList = new ArrayList<>();
358 for (String name: interfaceNames){
359 intNameList.add(name);
361 //Row row = mock(Row.class);
362 //OpenVSwitch ovsRowOVS = mock(OpenVSwitch.class);
363 //Column<GenericTableSchema, Map<String, String>> col = mock(Column.class);
364 Map<String, String> colMap = mock(Map.class);
365 //ConcurrentHashMap<String, Row> hashMap;
366 //hashMap = new ConcurrentHashMap<>();
367 //hashMap.put("row1", row);
369 /* TODO SB_MIGRATION */
370 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
371 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(OpenVSwitch.class),
372 // any(Row.class))).thenReturn(ovsRowOVS);
373 //when(ovsRowOVS.getOtherConfigColumn()).thenReturn(col);
374 //when(col.getData()).thenReturn(colMap);
375 when(colMap.get(anyString())).thenReturn("network-0:interfaceName-0,network-1:interfaceName-1," +
376 "network-2:interfaceName-2,network-3:interfaceName-3");
378 assertEquals("Error, did not get all interface names", intNameList,
379 bridgeConfigurationManagerImpl.getAllPhysicalInterfaceNames(nodeMock));
380 //verify(ovsdbConfigurationService, times(1)).getRows(any(Node.class), anyString());
381 //verify(ovsdbConfigurationService, times(1)).getTableName(any(Node.class), any(Class.class));
382 //verify(ovsdbConfigurationService, times(1)).getTypedRow(any(Node.class), any(Class.class), any(Row.class));
383 verify(configurationService, times(1)).getProviderMappingsKey();
384 verify(configurationService, times(0)).getDefaultProviderMapping();
388 public void testGetBridge() throws Exception {
389 Row row = mock(Row.class);
390 Bridge bridge = mock(Bridge.class);
391 ConcurrentHashMap<String, Row> hashMap;
392 hashMap = new ConcurrentHashMap<>();
393 hashMap.put("row1", row);
395 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
396 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Bridge.class),
397 // any(Row.class))).thenReturn(bridge);
398 when(bridge.getName()).thenReturn("test-bridge");
400 assertEquals("Error, did not get correct bridge", bridge,
401 bridgeConfigurationManagerImpl.getBridge(nodeMock, "test-bridge"));
402 //verify(ovsdbConfigurationService, times(1)).getRows(any(Node.class), anyString());
403 //verify(ovsdbConfigurationService, times(1)).getTableName(any(Node.class), any(Class.class));
404 //verify(ovsdbConfigurationService, times(1)).getTypedRow(any(Node.class), any(Class.class), any(Row.class));