2 * Copyright (c) 2015, 2016 Inocybe Technologies. 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
9 package org.opendaylight.netvirt.openstack.netvirt.providers.openflow13;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
14 import static org.mockito.Matchers.any;
15 import static org.mockito.Matchers.anyBoolean;
16 import static org.mockito.Matchers.anyLong;
17 import static org.mockito.Matchers.anyShort;
18 import static org.mockito.Matchers.anyString;
19 import static org.mockito.Matchers.eq;
20 import static org.mockito.Matchers.same;
21 import static org.mockito.Mockito.mock;
22 import static org.mockito.Mockito.times;
23 import static org.mockito.Mockito.verify;
24 import static org.mockito.Mockito.when;
26 import java.lang.reflect.Field;
27 import java.net.InetAddress;
28 import java.util.ArrayList;
29 import java.util.HashMap;
30 import java.util.List;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 import org.mockito.Mock;
37 import org.mockito.Mockito;
38 import org.opendaylight.netvirt.openstack.netvirt.NetworkHandler;
39 import org.opendaylight.netvirt.openstack.netvirt.api.ClassifierProvider;
40 import org.opendaylight.netvirt.openstack.netvirt.api.L2ForwardingProvider;
41 import org.opendaylight.netvirt.openstack.netvirt.api.NodeCacheManager;
42 import org.opendaylight.netvirt.openstack.netvirt.api.TenantNetworkManager;
43 import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronNetwork;
44 import org.opendaylight.netvirt.openstack.netvirt.MdsalHelper;
45 import org.opendaylight.netvirt.openstack.netvirt.api.BridgeConfigurationManager;
46 import org.opendaylight.netvirt.openstack.netvirt.api.ConfigurationService;
47 import org.opendaylight.netvirt.openstack.netvirt.api.EgressAclProvider;
48 import org.opendaylight.netvirt.openstack.netvirt.api.IngressAclProvider;
49 import org.opendaylight.netvirt.openstack.netvirt.api.NetworkingProvider;
50 import org.opendaylight.netvirt.openstack.netvirt.api.NetworkingProviderManager;
51 import org.opendaylight.netvirt.openstack.netvirt.api.SecurityServicesManager;
52 import org.opendaylight.netvirt.openstack.netvirt.api.Southbound;
53 import org.opendaylight.netvirt.openstack.netvirt.api.Status;
54 import org.opendaylight.netvirt.openstack.netvirt.api.StatusCode;
55 import org.opendaylight.netvirt.utils.servicehelper.ServiceHelper;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
57 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
58 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
59 import org.osgi.framework.BundleContext;
60 import org.osgi.framework.ServiceReference;
61 import org.powermock.api.mockito.PowerMockito;
62 import org.powermock.api.support.membermodification.MemberMatcher;
63 import org.powermock.api.support.membermodification.MemberModifier;
64 import org.powermock.core.classloader.annotations.PrepareForTest;
65 import org.powermock.modules.junit4.PowerMockRunner;
66 import org.powermock.reflect.Whitebox;
69 * Unit test for {@link OF13Provider}
71 @PrepareForTest({OF13Provider.class, InetAddress.class, MdsalHelper.class, ServiceHelper.class})
72 @RunWith(PowerMockRunner.class)
73 public class OF13ProviderTest {
75 @Mock private OF13Provider of13Provider;
77 private static final String TYPE = "gre";
78 private static final String IP = "127.0.0.1";
79 private static final String BR_INT = "br-int";
80 private static final String ID = "4";
81 private static final String PORT = "port-int";
82 private static final String SEG_ID = "5";
83 private static final String MAC_ADDRESS = "mac-address";
84 private static final long LOCAL_PORT = 3;
87 public void setUp() throws Exception{
88 of13Provider = PowerMockito.mock(OF13Provider.class, Mockito.CALLS_REAL_METHODS);
92 public void testGetName() {
93 assertEquals("Error, did not return the correct name", OF13Provider.NAME, of13Provider.getName());
97 public void testSupportsServices() {
98 assertTrue("Error, did not return the correct boolean", of13Provider.supportsServices());
102 public void testHasPerTenantTunneling() {
103 assertFalse("Error, did not return the correct boolean", of13Provider.hasPerTenantTunneling());
107 public void testGetTunnelReadinessStatus() throws Exception {
108 ConfigurationService configurationService = mock(ConfigurationService.class);
109 BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
110 TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
112 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
113 MemberModifier.field(OF13Provider.class, "bridgeConfigurationManager").set(of13Provider , bridgeConfigurationManager);
114 MemberModifier.field(OF13Provider.class, "tenantNetworkManager").set(of13Provider , tenantNetworkManager);
116 assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTFOUND), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
118 when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class));
119 when(bridgeConfigurationManager.isNodeNeutronReady(any(Node.class))).thenReturn(false, true);
121 assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTACCEPTABLE), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
123 when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), anyString())).thenReturn(false, true);
125 assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTACCEPTABLE), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
126 assertEquals("Error, did not return the correct status code", new Status(StatusCode.SUCCESS), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
130 public void testGetTunnelName() throws Exception {
131 PowerMockito.mockStatic(InetAddress.class);
132 InetAddress inetAddress = mock(InetAddress.class);
133 PowerMockito.when(inetAddress.getHostAddress()).thenReturn(IP);
135 String ret = TYPE + "-" + inetAddress.getHostAddress();
136 assertEquals("Error, did not return the correct status code", ret, Whitebox.invokeMethod(of13Provider, "getTunnelName", TYPE, inetAddress));
139 @SuppressWarnings("unchecked")
141 public void testAddTunnelPort() throws Exception {
142 ConfigurationService configurationService = mock(ConfigurationService.class);
143 when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
144 Southbound southbound = mock(Southbound.class);
145 when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString())).thenReturn(mock(OvsdbTerminationPointAugmentation.class));
146 NodeId nodeId = mock(NodeId.class);
147 when(nodeId.getValue()).thenReturn(ID);
148 Node node = mock(Node.class);
149 when(node.getNodeId()).thenReturn(nodeId);
151 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "getTunnelName", String.class, InetAddress.class));
153 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
154 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
156 assertTrue("Error, did not add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class)));
158 when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString())).thenReturn(null);
159 when(southbound.addTunnelTerminationPoint(any(Node.class), anyString(), anyString(), anyString(), any(HashMap.class))).thenReturn(false);
161 assertFalse("Error, did add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class)));
163 when(southbound.addTunnelTerminationPoint(any(Node.class), anyString(), anyString(), anyString(), any(HashMap.class))).thenReturn(true);
165 assertTrue("Error, did not add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class)));
166 PowerMockito.verifyPrivate(of13Provider, times(3)).invoke("getTunnelName", anyString(), any(InetAddress.class));
170 public void testDeletePort() throws Exception {
171 Southbound southbound = mock(Southbound.class);
172 when(southbound.deleteTerminationPoint(any(Node.class), anyString())).thenReturn(false, true);
173 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
175 assertFalse("Error, did delete the port", (boolean) Whitebox.invokeMethod(of13Provider, "deletePort", mock(Node.class), TYPE, PORT));
176 assertTrue("Error, did not delete the port", (boolean) Whitebox.invokeMethod(of13Provider, "deletePort", mock(Node.class), TYPE, PORT));
180 public void testDeleteTunnelPort() throws Exception {
181 ConfigurationService configurationService = mock(ConfigurationService.class);
182 when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
184 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
186 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "getTunnelName", String.class, InetAddress.class));
187 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deletePort", Node.class, String.class, String.class));
189 PowerMockito.when(of13Provider, "deletePort", any(Node.class), anyString(), anyString()).thenReturn(true);
191 assertTrue("Error, did not delete the tunnel", (boolean) Whitebox.invokeMethod(of13Provider, "deleteTunnelPort", mock(Node.class), TYPE, mock(InetAddress.class), mock(InetAddress.class)));
193 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("getTunnelName", anyString(), any(InetAddress.class));
194 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("deletePort", any(Node.class), anyString(), anyString());
196 PowerMockito.when(of13Provider, "deletePort", any(Node.class), anyString(), anyString()).thenReturn(false);
198 assertFalse("Error, did delete the tunnel", (boolean) Whitebox.invokeMethod(of13Provider, "deleteTunnelPort", mock(Node.class), TYPE, mock(InetAddress.class), mock(InetAddress.class)));
200 PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("getTunnelName", anyString(), any(InetAddress.class));
201 PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("deletePort", any(Node.class), anyString(), anyString());
205 public void testProgramLocalBridgeRules() throws Exception {
206 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPort", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
207 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
208 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
209 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalBcastOut", Long.class, Short.class, String.class, Long.class, boolean.class));
210 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
211 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelMiss", Long.class, Short.class, Short.class, String.class, boolean.class));
212 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalTableMiss", Long.class, Short.class, String.class, boolean.class));
215 Whitebox.invokeMethod(of13Provider, "programLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
217 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPort", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
218 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
219 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
220 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyBoolean());
221 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
222 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelMiss", anyLong(), anyShort(), anyShort(), anyString(), anyBoolean());
223 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalTableMiss", anyLong(), anyShort(), anyString(), anyBoolean());
227 public void testRemoveLocalBridgeRules() throws Exception {
228 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPort", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
229 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
230 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
231 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalBcastOut", Long.class, Short.class, String.class, Long.class, boolean.class));
232 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
235 Whitebox.invokeMethod(of13Provider, "removeLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
237 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPort", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
238 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
239 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
240 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyBoolean());
241 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
245 public void testProgramLocalIngressTunnelBridgeRules() throws Exception {
246 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
247 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
250 Whitebox.invokeMethod(of13Provider, "programLocalIngressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
252 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
253 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
257 public void testProgramRemoteEgressTunnelBridgeRules() throws Exception {
258 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelOut", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
260 Whitebox.invokeMethod(of13Provider, "programRemoteEgressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
262 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
266 public void testRemovePerTunnelRules() throws Exception {
267 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
268 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
269 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelMiss", Long.class, Short.class, Short.class, String.class, boolean.class));
270 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalTableMiss", Long.class, Short.class, String.class, boolean.class));
272 Whitebox.invokeMethod(of13Provider, "removePerTunnelRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT);
274 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
275 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
276 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelMiss", anyLong(), anyShort(), anyShort(), anyString(), anyBoolean());
277 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalTableMiss", anyLong(), anyShort(), anyString(), anyBoolean());
281 public void testProgramLocalVlanRules() throws Exception {
282 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPortSetVlan", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
283 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
284 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
286 Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
288 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPortSetVlan", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
289 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
290 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
294 public void testRemoveLocalVlanRules() throws Exception {
295 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPortSetVlan", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
296 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
297 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
299 Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
301 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPortSetVlan", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
302 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
303 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
308 public void testProgramLocalIngressVlanRules() throws Exception {
309 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
310 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanBcastOut", Long.class, Short.class, String.class, Long.class, Long.class, boolean.class));
312 Whitebox.invokeMethod(of13Provider, "programLocalIngressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
314 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
315 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyLong(), anyBoolean());
319 public void testProgramRemoteEgressVlanRules() throws Exception {
320 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanMiss", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
322 Whitebox.invokeMethod(of13Provider, "programRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
324 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanMiss", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
328 public void testRemoveRemoteEgressVlanRules() throws Exception {
329 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanBcastOut", Long.class, Short.class, String.class, Long.class, Long.class, boolean.class));
331 Whitebox.invokeMethod(of13Provider, "removeRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
333 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyLong(), anyBoolean());
337 public void testRemovePerVlanRules() throws Exception {
338 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
339 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanMiss", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
341 Whitebox.invokeMethod(of13Provider, "removePerVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT, LOCAL_PORT);
343 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
344 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanMiss", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
348 public void testHandleInterfaceUpdate() throws Exception{
349 NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
350 when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN, NetworkHandler.NETWORK_TYPE_GRE);
351 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
352 Map<NodeId, Node> nodes = new HashMap<>();
353 nodes.put(mock(NodeId.class), mock(Node.class));
354 when(nodeCacheManager.getOvsdbNodes()).thenReturn(nodes);
355 Southbound southbound = mock(Southbound.class);
356 when(southbound.extractBridgeOvsdbNodeId(any(Node.class))).thenReturn(mock(NodeId.class));
357 when(southbound.getBridgeNode(any(Node.class), anyString())).thenReturn(mock(Node.class));
358 ConfigurationService configurationService = mock(ConfigurationService.class);
359 when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
361 MemberModifier.field(OF13Provider.class, "nodeCacheManager").set(of13Provider , nodeCacheManager);
362 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
363 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
365 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programLocalRules", String.class, String.class, Node.class, OvsdbTerminationPointAugmentation.class));
366 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programVlanRules", NeutronNetwork.class, Node.class, OvsdbTerminationPointAugmentation.class));
368 TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
369 MemberModifier.field(OF13Provider.class, "tenantNetworkManager").set(of13Provider, tenantNetworkManager);
370 when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), eq(ID))).thenReturn(true);
372 assertTrue("Error, did not update the interface correclty", of13Provider.handleInterfaceUpdate(neutronNetwork, mock(Node.class), mock(OvsdbTerminationPointAugmentation.class)));
373 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programLocalRules", anyString(), anyString(), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
374 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programVlanRules", any(NeutronNetwork.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
376 when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class));
377 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "addTunnelPort", Node.class, String.class, InetAddress.class, InetAddress.class));
378 PowerMockito.when(of13Provider, "addTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class)).thenReturn(true);
379 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programTunnelRules", String.class, String.class, InetAddress.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class));
381 assertTrue("Error, did not update the interface correclty", of13Provider.handleInterfaceUpdate(neutronNetwork, mock(Node.class), mock(OvsdbTerminationPointAugmentation.class)));
382 PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("addTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class));
383 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean());
386 private static final String INTF = "interface";
388 @SuppressWarnings("unchecked")
390 public void testHandlerInterfaceDelete() throws Exception {
391 NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
392 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
393 NodeId nodeId = mock(NodeId.class);
394 when(nodeId.getValue()).thenReturn(ID);
395 Node node = mock(Node.class);
396 when(node.getNodeId()).thenReturn(nodeId);
397 Map<NodeId, Node> nodes = new HashMap<>();
398 nodes.put(mock(NodeId.class), node);
399 when(nodeCacheManager.getOvsdbNodes()).thenReturn(nodes);
400 Southbound southbound = mock(Southbound.class);
401 when(southbound.extractBridgeOvsdbNodeId(any(Node.class))).thenReturn(mock(NodeId.class));
402 when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(true);
403 when(southbound.getOptionsValue(any(List.class), anyString())).thenReturn(IP);
404 OvsdbTerminationPointAugmentation intf = mock(OvsdbTerminationPointAugmentation.class);
405 when(intf.getName()).thenReturn(INTF);
406 List<String> intfs = new ArrayList<>();
408 BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
409 when(bridgeConfigurationManager.getAllPhysicalInterfaceNames(any(Node.class))).thenReturn(intfs);
410 ConfigurationService configurationService = mock(ConfigurationService.class);
411 when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class));
413 PowerMockito.mockStatic(InetAddress.class);
414 PowerMockito.when(InetAddress.getByName(anyString())).thenReturn(mock(InetAddress.class));
416 PowerMockito.mockStatic(MdsalHelper.class);
417 PowerMockito.when(MdsalHelper.createOvsdbInterfaceType(any(Class.class))).thenReturn(INTF);
419 MemberModifier.field(OF13Provider.class, "nodeCacheManager").set(of13Provider , nodeCacheManager);
420 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
421 MemberModifier.field(OF13Provider.class, "bridgeConfigurationManager").set(of13Provider , bridgeConfigurationManager);
422 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
424 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deleteTunnelPort", Node.class, String.class, InetAddress.class, InetAddress.class));
426 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false));
427 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("deleteTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class));
429 when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(false);
430 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deletePhysicalPort", Node.class, String.class));
432 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false));
433 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("deletePhysicalPort", any(Node.class), anyString());
436 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeLocalRules", String.class, String.class, Node.class, OvsdbTerminationPointAugmentation.class));
437 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeVlanRules", NeutronNetwork.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class));
438 when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN);
440 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false));
441 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("removeLocalRules", anyString(), anyString(), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
442 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("removeVlanRules", any(NeutronNetwork.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean());
444 TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
445 MemberModifier.field(OF13Provider.class, "tenantNetworkManager").set(of13Provider, tenantNetworkManager);
446 when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), eq(ID))).thenReturn(true);
448 when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_GRE);
449 when(southbound.getBridgeNode(any(Node.class), anyString())).thenReturn(node);
450 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeTunnelRules", String.class, String.class, InetAddress.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class, boolean.class));
452 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, node, intf, false));
453 PowerMockito.verifyPrivate(of13Provider, times(3)).invoke("removeTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), any(boolean.class), any(boolean.class));
456 // Problem with methods signatures: initializeFlowRules(Node) has the same signature than initializeFlowRules(Node, String)
458 // public void testInitializeFlowRules() throws Exception {
459 // MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "initializeFlowRules", Node.class, String.class));
460 // MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "triggerInterfaceUpdates", Node.class));
462 // of13Provider.initializeFlowRules(mock(Node.class));
464 // PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("initializeFlowRules", any(Node.class), anyString());
465 // PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class));
469 public void testInitializeOFFlowRule() throws Exception{
470 Southbound southbound = mock(Southbound.class);
471 when(southbound.getBridgeName(any(Node.class))).thenReturn(BR_INT);
472 ConfigurationService configurationService = mock(ConfigurationService.class);
473 when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
475 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
476 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
478 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "initializeFlowRules", Node.class, String.class));
479 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "triggerInterfaceUpdates", Node.class));
481 of13Provider.initializeOFFlowRules(mock(Node.class));
483 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("initializeFlowRules", any(Node.class), anyString());
484 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class));
488 public void testSetDependencies() throws Exception {
489 ConfigurationService configurationService = mock(ConfigurationService.class);
490 TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
491 BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
492 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
493 ClassifierProvider classifierProvider = mock(ClassifierProvider.class);
494 IngressAclProvider ingressAclProvider = mock(IngressAclProvider.class);
495 EgressAclProvider egressAclProvider = mock(EgressAclProvider.class);
496 L2ForwardingProvider l2ForwardingProvider = mock(L2ForwardingProvider.class);
497 SecurityServicesManager securityServicesManager = mock(SecurityServicesManager.class);
498 Southbound southbound = mock(Southbound.class);
500 ServiceHelper.overrideGlobalInstance(ConfigurationService.class, configurationService);
501 ServiceHelper.overrideGlobalInstance(TenantNetworkManager.class, tenantNetworkManager);
502 ServiceHelper.overrideGlobalInstance(BridgeConfigurationManager.class, bridgeConfigurationManager);
503 ServiceHelper.overrideGlobalInstance(NodeCacheManager.class, nodeCacheManager);
504 ServiceHelper.overrideGlobalInstance(ClassifierProvider.class, classifierProvider);
505 ServiceHelper.overrideGlobalInstance(IngressAclProvider.class, ingressAclProvider);
506 ServiceHelper.overrideGlobalInstance(EgressAclProvider.class, egressAclProvider);
507 ServiceHelper.overrideGlobalInstance(L2ForwardingProvider.class, l2ForwardingProvider);
508 ServiceHelper.overrideGlobalInstance(SecurityServicesManager.class, securityServicesManager);
509 ServiceHelper.overrideGlobalInstance(Southbound.class, southbound);
511 of13Provider.setDependencies(mock(BundleContext.class), mock(ServiceReference.class));
513 assertEquals("Error, did not return the correct object", getField("configurationService"), configurationService);
514 assertEquals("Error, did not return the correct object", getField("tenantNetworkManager"), tenantNetworkManager);
515 assertEquals("Error, did not return the correct object", getField("bridgeConfigurationManager"), bridgeConfigurationManager);
516 assertEquals("Error, did not return the correct object", getField("nodeCacheManager"), nodeCacheManager);
517 assertEquals("Error, did not return the correct object", getField("classifierProvider"), classifierProvider);
518 assertEquals("Error, did not return the correct object", getField("ingressAclProvider"), ingressAclProvider);
519 assertEquals("Error, did not return the correct object", getField("egressAclProvider"), egressAclProvider);
520 assertEquals("Error, did not return the correct object", getField("l2ForwardingProvider"), l2ForwardingProvider);
521 assertEquals("Error, did not return the correct object", getField("securityServicesManager"), securityServicesManager);
522 assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
525 @SuppressWarnings("unchecked")
527 public void testSetDependenciesObject() throws Exception{
528 NetworkingProviderManager networkingProviderManager = mock(NetworkingProviderManager.class);
529 BundleContext bundleContext = mock(BundleContext.class);
530 when(bundleContext.getServiceReference(NetworkingProvider.class.getName())).thenReturn(mock(ServiceReference.class));
532 MemberModifier.field(OF13Provider.class, "bundleContext").set(of13Provider, bundleContext);
534 of13Provider.setDependencies(networkingProviderManager);
535 verify(networkingProviderManager).providerAdded(any(ServiceReference.class), same(of13Provider));
538 private Object getField(String fieldName) throws Exception {
539 Field field = OF13Provider.class.getDeclaredField(fieldName);
540 field.setAccessible(true);
541 return field.get(of13Provider);