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.controller.sal.core.Node;
24 import org.opendaylight.ovsdb.lib.notation.Column;
25 import org.opendaylight.ovsdb.lib.notation.Row;
26 import org.opendaylight.ovsdb.lib.notation.UUID;
27 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
28 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
29 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
30 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
31 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
32 import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
33 import org.opendaylight.ovsdb.schema.openvswitch.Port;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
35 import java.util.ArrayList;
36 import java.util.List;
37 import java.util.concurrent.ConcurrentHashMap;
39 import java.util.HashMap;
40 import java.util.HashSet;
43 import static org.junit.Assert.assertTrue;
44 import static org.junit.Assert.assertEquals;
45 import static org.mockito.Matchers.any;
46 import static org.mockito.Matchers.anyString;
47 import static org.mockito.Matchers.same;
48 import static org.mockito.Mockito.doAnswer;
49 import static org.mockito.Mockito.mock;
50 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
51 import static org.mockito.Mockito.RETURNS_MOCKS;
52 import static org.mockito.Mockito.reset;
53 import static org.mockito.Mockito.times;
54 import static org.mockito.Mockito.verify;
55 import static org.mockito.Mockito.verifyNoMoreInteractions;
56 import static org.mockito.Mockito.when;
58 /* TODO SB_MIGRATION */ @Ignore
59 @RunWith(MockitoJUnitRunner.class)
60 public class BridgeConfigurationManagerImplTest {
62 private Node nodeMock = mock(Node.class, RETURNS_DEEP_STUBS);
63 private Bridge bridgeMock = mock(Bridge.class, RETURNS_DEEP_STUBS);
65 @Mock private ConfigurationService configurationService;
66 @Mock private NetworkingProviderManager networkingProviderManager;
69 @InjectMocks public static BridgeConfigurationManagerImpl bridgeConfigurationManagerImpl;
70 @InjectMocks public static BridgeConfigurationManagerImpl bridgeConfigMock =
71 mock(BridgeConfigurationManagerImpl.class, RETURNS_DEEP_STUBS);
72 @Spy public static BridgeConfigurationManagerImpl bridgeConfigurationManagerImplSpy;
75 public void testGetBridgeUuid() throws Exception {
76 Row row = mock(Row.class);
77 Bridge bridge = mock(Bridge.class, RETURNS_DEEP_STUBS);
79 ConcurrentHashMap<String, Row> hashMap;
80 hashMap = new ConcurrentHashMap<>();
81 hashMap.put("mockUUID", row);
83 /* TODO SB_MIGRATION */
84 //verifyNoMoreInteractions(ovsdbConfigurationService);
85 verifyNoMoreInteractions(configurationService);
86 verifyNoMoreInteractions(networkingProviderManager);
88 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
89 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Bridge.class),
90 // any(Row.class))).thenReturn(bridge);
91 when(bridge.getName()).thenReturn("test-bridge");
93 /* TODO SB_MIGRATION */
94 //assertEquals("Error, did not return UUID of correct bridge", "mockUUID",
95 // bridgeConfigurationManagerImpl.getBridgeUuid(nodeMock, "test-bridge"));
97 //verify(ovsdbConfigurationService).getTableName(nodeMock, Bridge.class);
98 verifyNoMoreInteractions(configurationService);
99 verifyNoMoreInteractions(networkingProviderManager);
103 public void testIsNodeNeutronReady() throws Exception {
104 Row row = mock(Row.class);
105 Bridge bridge = mock(Bridge.class, RETURNS_DEEP_STUBS);
107 ConcurrentHashMap<String, Row> hashMap;
108 hashMap = new ConcurrentHashMap<>();
109 hashMap.put("mockUUID", row);
111 /* TODO SB_MIGRATION */
112 //verifyNoMoreInteractions(ovsdbConfigurationService);
113 verifyNoMoreInteractions(configurationService);
114 verifyNoMoreInteractions(networkingProviderManager);
116 assertEquals("Error, did not return correct boolean from isNodeNeutronReady", false,
117 bridgeConfigurationManagerImpl.isNodeNeutronReady(nodeMock));
119 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
120 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Bridge.class),
121 // any(Row.class))).thenReturn(bridge);
122 when(bridge.getName()).thenReturn("test-bridge");
123 when(configurationService.getIntegrationBridgeName()).thenReturn("test-bridge");
125 assertEquals("Error, did not return correct boolean from isNodeNeutronReady", true,
126 bridgeConfigurationManagerImpl.isNodeNeutronReady(nodeMock));
128 verify(configurationService, times(2)).getIntegrationBridgeName();
129 verifyNoMoreInteractions(networkingProviderManager);
132 /* TODO SB_MIGRATION */ @Ignore
134 public void testIsNodeOverlayReady() throws Exception {
135 Row row = mock(Row.class);
136 Bridge bridge = mock(Bridge.class, RETURNS_DEEP_STUBS);
138 ConcurrentHashMap<String, Row> hashMap;
139 hashMap = new ConcurrentHashMap<>();
140 hashMap.put("mockUUID", row);
142 /* TODO SB_MIGRATION */
143 //verifyNoMoreInteractions(ovsdbConfigurationService);
144 verifyNoMoreInteractions(configurationService);
145 verifyNoMoreInteractions(networkingProviderManager);
147 assertEquals("Error, did not return correct boolean from isNodeOverlayReady", false,
148 bridgeConfigurationManagerImpl.isNodeOverlayReady(nodeMock));
150 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
151 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Bridge.class),
152 // any(Row.class))).thenReturn(bridge);
153 when(bridge.getName()).thenReturn("test-bridge");
154 when(configurationService.getIntegrationBridgeName()).thenReturn("test-bridge");
155 when(configurationService.getNetworkBridgeName()).thenReturn("test-bridge");
157 /* TODO SB_MIGRATION */
158 //assertEquals("Error, did not return correct boolean from isNodeOverlayReady", true,
159 // bridgeConfigurationManagerImpl.isNodeOverlayReady(nodeMock));
161 verify(configurationService, times(2)).getIntegrationBridgeName();
162 verify(configurationService, times(1)).getNetworkBridgeName();
163 //verify(ovsdbConfigurationService, times(3)).getTableName(nodeMock, Bridge.class);
164 verifyNoMoreInteractions(networkingProviderManager);
167 /* TODO SB_MIGRATION */
170 public void testIsPortOnBridge() throws Exception {
171 UUID uuid = mock(UUID.class);
172 Set<UUID> uuidSet = new HashSet<>();
174 Column<GenericTableSchema, Set<UUID>> columnMock = mock(Column.class);
175 Port port = mock(Port.class, RETURNS_DEEP_STUBS);
176 String portName = "portNameMock";
178 /* TODO SB_MIGRATION */
179 //verifyNoMoreInteractions(ovsdbConfigurationService);
180 verifyNoMoreInteractions(configurationService);
181 verifyNoMoreInteractions(networkingProviderManager);
183 when(bridgeMock.getPortsColumn()).thenReturn(columnMock);
184 when(columnMock.getData()).thenReturn(uuidSet);
185 assertEquals("Error, did not return correct boolean from isPortOnBridge", false,
186 bridgeConfigurationManagerImpl.isPortOnBridge(nodeMock, bridgeMock, portName));
188 when(port.getName()).thenReturn(portName);
190 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), any(Class.class), any(Row.class))).thenReturn(port);
191 when(port.getName()).thenReturn(portName);
193 /* TODO SB_MIGRATION */
194 //assertEquals("Error, did not return correct boolean from isPortOnBridge", true,
195 // bridgeConfigurationManagerImpl.isPortOnBridge(nodeMock, bridgeMock, portName));
197 verify(bridgeMock, times(2)).getPortsColumn();
198 //verify(ovsdbConfigurationService, times(2)).getRow(any(Node.class), anyString(), anyString());
199 //verify(ovsdbConfigurationService, times(2)).getTableName(any(Node.class), any(Class.class));
200 //verify(ovsdbConfigurationService, times(2)).getTypedRow(any(Node.class), any(Class.class), any(Row.class));
201 verifyNoMoreInteractions(networkingProviderManager);
202 verifyNoMoreInteractions(configurationService);
206 public void testIsNodeTunnelReady() throws Exception {
207 String bridgeMockName = "BridgeMockName";
209 /* TODO SB_MIGRATION */
210 //verifyNoMoreInteractions(ovsdbConfigurationService);
211 verifyNoMoreInteractions(configurationService);
212 verifyNoMoreInteractions(networkingProviderManager);
214 when(configurationService.getIntegrationBridgeName()).thenReturn(bridgeMockName);
215 // getBridge() is private method - cannot be mocked with mockito
216 // when(bridgeConfigurationManagerImpl.getBridge(any(Node.class), anyString())).thenReturn(bridgeMock);
218 // Negative testing only due to private method call
219 assertEquals("Error, did not return correct boolean from isNodeTunnelReady", false,
220 bridgeConfigurationManagerImpl.isNodeTunnelReady(nodeMock));
222 verify(configurationService, times(1)).getIntegrationBridgeName();
223 verify(networkingProviderManager, times(0)).getProvider(nodeMock);
224 verify(configurationService, times(0)).getNetworkBridgeName();
225 //verify(ovsdbConfigurationService, times(1)).getRows(any(Node.class), anyString());
226 //verify(ovsdbConfigurationService, times(1)).getTableName(any(Node.class), any(Class.class));
227 //verify(ovsdbConfigurationService, times(0)).getTypedRow(any(Node.class), any(Class.class), any(Row.class));
231 public void testIsNodeVlanReady() throws Exception {
232 NeutronNetwork neutronNetworkMock = mock(NeutronNetwork.class);
234 /* TODO SB_MIGRATION */
235 //verifyNoMoreInteractions(ovsdbConfigurationService);
236 verifyNoMoreInteractions(configurationService);
237 verifyNoMoreInteractions(networkingProviderManager);
239 // getBridge() is private method - cannot be mocked with mockito
240 // Negative testing only due to private method call
241 assertEquals("Error, did not return correct boolean from isNodeVlanReady", false,
242 bridgeConfigurationManagerImpl.isNodeVlanReady(nodeMock, neutronNetworkMock));
244 verify(configurationService, times(1)).getIntegrationBridgeName();
245 verify(networkingProviderManager, times(0)).getProvider(any(Node.class));
246 verify(configurationService, times(0)).getNetworkBridgeName();
247 //verify(ovsdbConfigurationService, times(1)).getRows(any(Node.class), anyString());
248 //verify(ovsdbConfigurationService, times(1)).getTableName(any(Node.class), any(Class.class));
249 //verify(ovsdbConfigurationService, times(0)).getTypedRow(any(Node.class), any(Class.class), any(Row.class));
250 verify(neutronNetworkMock, times(0)).getProviderPhysicalNetwork();
253 /* TODO SB_MIGRATION */
256 public void testPrepareNode() throws Exception {
257 NetworkingProvider netProvider = mock(NetworkingProvider.class);
258 when(configurationService.getIntegrationBridgeName()).thenReturn("intBridgeName");
259 when(networkingProviderManager.getProvider(any(Node.class))).thenReturn(netProvider);
261 // createIntegrationBridge() is private method - cannot be mocked with mockito
262 // Negative testing only due to private method call
263 bridgeConfigurationManagerImpl.prepareNode(nodeMock);
265 verify(configurationService, times(1)).getIntegrationBridgeName();
266 /* TODO SB_MIGRATION */
267 //verify(networkingProviderManager, times(0)).getProvider(any(Node.class));
268 verify(netProvider, times(0)).initializeFlowRules(any(Node.class));
272 public void testCreateLocalNetwork() throws Exception {
273 NeutronNetwork neutronNetworkMock = mock(NeutronNetwork.class, RETURNS_MOCKS);
274 String networkTypes[] = {"vlan", "vxlan", "gre"};
276 for (String networkType : networkTypes) {
277 when(neutronNetworkMock.getProviderNetworkType()).thenReturn(networkType);
279 doAnswer(new Answer<Boolean>() {
281 public Boolean answer(InvocationOnMock invocation) {
284 }).when(bridgeConfigurationManagerImplSpy).isNodeVlanReady(any(Node.class), any(NeutronNetwork.class));
286 doAnswer(new Answer<Boolean>() {
288 public Boolean answer(InvocationOnMock invocation) {
291 }).when(bridgeConfigurationManagerImplSpy).isNodeTunnelReady(any(Node.class));
293 assertTrue("bridgeConfigMock.isNodeVlanReady is not true",
294 bridgeConfigurationManagerImplSpy.isNodeVlanReady(nodeMock, neutronNetworkMock));
295 assertTrue("bridgeConfigMock.isNodeTunnelReady is not true",
296 bridgeConfigurationManagerImplSpy.isNodeTunnelReady(nodeMock));
298 assertTrue("Error, isCreated is not true for " + networkType,
299 bridgeConfigurationManagerImplSpy.createLocalNetwork(nodeMock, neutronNetworkMock));
300 if (networkType == "vlan") {
301 verify(neutronNetworkMock, times(1)).getProviderNetworkType();
302 } else if (networkType == "vxlan") {
303 verify(neutronNetworkMock, times(2)).getProviderNetworkType();
304 } else if (networkType == "gre") {
305 verify(neutronNetworkMock, times(3)).getProviderNetworkType();
307 reset(neutronNetworkMock);
309 reset(bridgeConfigurationManagerImplSpy);
314 public void testGetPhysicalInterfaceName() throws Exception {
315 ConcurrentHashMap ovsTable = mock(ConcurrentHashMap.class, RETURNS_DEEP_STUBS);
316 Row row = mock(Row.class);
317 OpenVSwitch ovsRowOVS = mock(OpenVSwitch.class);
318 Column<GenericTableSchema, Map<String, String>> col = mock(Column.class);
319 Map<String, String> colMap = mock(Map.class);
321 HashMap<String, OpenVSwitch> hashMapOVS = new HashMap<>();
322 hashMapOVS.put("ovsRow", ovsRowOVS);
323 ConcurrentHashMap<String, Row> hashMap;
324 hashMap = new ConcurrentHashMap<>();
325 hashMap.put("row1", row);
327 String networkNames[] = {"network-0", "network-1", "network-2", "network-3"};
328 String interfaceNames[] = {"interfaceName-0", "interfaceName-1", "interfaceName-2", "interfaceName-3"};
331 for (String networkName : networkNames) {
332 /* TODO SB_MIGRATION */
333 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
334 when(ovsTable.values()).thenReturn(hashMapOVS.values());
336 when(ovsRowOVS.getOtherConfigColumn()).thenReturn(col);
337 when(col.getData()).thenReturn(colMap);
338 when(configurationService.getProviderMappingsKey()).thenReturn("network-0:interfaceName-0," +
339 "network-1:interfaceName-1,network-2:interfaceName-2,network-3:interfaceName-3");
340 when(colMap.get(anyString())).thenReturn("network-0:interfaceName-0,network-1:interfaceName-1," +
341 "network-2:interfaceName-2,network-3:interfaceName-3");
343 when(configurationService.getDefaultProviderMapping()).thenReturn("network-0:interfaceName-0," +
344 "network-1:interfaceName-1,network-2:interfaceName-2,network-3:interfaceName-3");
346 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(OpenVSwitch.class),
347 // any(Row.class))).thenReturn(ovsRowOVS);
349 assertEquals("Error, network: " + networkName + ", did not match interface: " + interfaceNames[count],
350 interfaceNames[count], bridgeConfigurationManagerImpl.getPhysicalInterfaceName(nodeMock,
353 //verify(ovsdbConfigurationService, times(count + 1)).getRows(any(Node.class), anyString());
354 //verify(ovsdbConfigurationService, times(count + 1)).getTableName(any(Node.class), any(Class.class));
355 //verify(ovsdbConfigurationService, times(count + 1)).getTypedRow(any(Node.class), any(Class.class),
357 verify(configurationService, times(count + 1)).getProviderMappingsKey();
358 verify(configurationService, times(0)).getDefaultProviderMapping();
364 public void testGetAllPhysicalInterfaceNames() throws Exception {
365 String interfaceNames[] = {"interfaceName-0", "interfaceName-1", "interfaceName-2", "interfaceName-3"};
366 List<String> intNameList = new ArrayList<>();
367 for (String name: interfaceNames){
368 intNameList.add(name);
370 Row row = mock(Row.class);
371 OpenVSwitch ovsRowOVS = mock(OpenVSwitch.class);
372 Column<GenericTableSchema, Map<String, String>> col = mock(Column.class);
373 Map<String, String> colMap = mock(Map.class);
374 ConcurrentHashMap<String, Row> hashMap;
375 hashMap = new ConcurrentHashMap<>();
376 hashMap.put("row1", row);
378 /* TODO SB_MIGRATION */
379 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
380 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(OpenVSwitch.class),
381 // any(Row.class))).thenReturn(ovsRowOVS);
382 when(ovsRowOVS.getOtherConfigColumn()).thenReturn(col);
383 when(col.getData()).thenReturn(colMap);
384 when(colMap.get(anyString())).thenReturn("network-0:interfaceName-0,network-1:interfaceName-1," +
385 "network-2:interfaceName-2,network-3:interfaceName-3");
387 assertEquals("Error, did not get all interface names", intNameList,
388 bridgeConfigurationManagerImpl.getAllPhysicalInterfaceNames(nodeMock));
389 //verify(ovsdbConfigurationService, times(1)).getRows(any(Node.class), anyString());
390 //verify(ovsdbConfigurationService, times(1)).getTableName(any(Node.class), any(Class.class));
391 //verify(ovsdbConfigurationService, times(1)).getTypedRow(any(Node.class), any(Class.class), any(Row.class));
392 verify(configurationService, times(1)).getProviderMappingsKey();
393 verify(configurationService, times(0)).getDefaultProviderMapping();
397 public void testGetBridge() throws Exception {
398 Row row = mock(Row.class);
399 Bridge bridge = mock(Bridge.class);
400 ConcurrentHashMap<String, Row> hashMap;
401 hashMap = new ConcurrentHashMap<>();
402 hashMap.put("row1", row);
404 /* TODO SB_MIGRATION */
405 //when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(hashMap);
406 //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Bridge.class),
407 // any(Row.class))).thenReturn(bridge);
408 when(bridge.getName()).thenReturn("test-bridge");
410 assertEquals("Error, did not get correct bridge", bridge,
411 bridgeConfigurationManagerImpl.getBridge(nodeMock, "test-bridge"));
412 //verify(ovsdbConfigurationService, times(1)).getRows(any(Node.class), anyString());
413 //verify(ovsdbConfigurationService, times(1)).getTableName(any(Node.class), any(Class.class));
414 //verify(ovsdbConfigurationService, times(1)).getTypedRow(any(Node.class), any(Class.class), any(Row.class));