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, "handleTunnelUnknownUcastFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
212 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelMiss", Long.class, Short.class, Short.class, String.class, boolean.class));
213 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalTableMiss", Long.class, Short.class, String.class, boolean.class));
216 Whitebox.invokeMethod(of13Provider, "programLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
218 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPort", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
219 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
220 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
221 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyBoolean());
222 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
223 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelUnknownUcastFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
224 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelMiss", anyLong(), anyShort(), anyShort(), anyString(), anyBoolean());
225 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalTableMiss", anyLong(), anyShort(), anyString(), anyBoolean());
229 public void testRemoveLocalBridgeRules() throws Exception {
230 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPort", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
231 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
232 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
233 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalBcastOut", Long.class, Short.class, String.class, Long.class, boolean.class));
234 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
235 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelUnknownUcastFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
238 Whitebox.invokeMethod(of13Provider, "removeLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
240 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPort", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
241 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
242 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
243 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyBoolean());
244 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
245 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelUnknownUcastFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
249 public void testProgramLocalIngressTunnelBridgeRules() throws Exception {
250 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
251 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
252 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelUnknownUcastFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
255 Whitebox.invokeMethod(of13Provider, "programLocalIngressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
257 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
258 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
259 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelUnknownUcastFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
263 public void testProgramRemoteEgressTunnelBridgeRules() throws Exception {
264 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelOut", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
266 Whitebox.invokeMethod(of13Provider, "programRemoteEgressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
268 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
272 public void testRemovePerTunnelRules() throws Exception {
273 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
274 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
275 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelUnknownUcastFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
276 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelMiss", Long.class, Short.class, Short.class, String.class, boolean.class));
277 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalTableMiss", Long.class, Short.class, String.class, boolean.class));
279 Whitebox.invokeMethod(of13Provider, "removePerTunnelRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT);
281 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
282 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
283 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelUnknownUcastFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
284 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelMiss", anyLong(), anyShort(), anyShort(), anyString(), anyBoolean());
285 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalTableMiss", anyLong(), anyShort(), anyString(), anyBoolean());
289 public void testProgramLocalVlanRules() throws Exception {
290 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPortSetVlan", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
291 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
292 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
294 Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
296 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPortSetVlan", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
297 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
298 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
302 public void testRemoveLocalVlanRules() throws Exception {
303 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPortSetVlan", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
304 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
305 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
307 Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
309 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPortSetVlan", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
310 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
311 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
316 public void testProgramLocalIngressVlanRules() throws Exception {
317 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
318 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanBcastOut", Long.class, Short.class, String.class, Long.class, Long.class, boolean.class));
320 Whitebox.invokeMethod(of13Provider, "programLocalIngressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
322 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
323 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyLong(), anyBoolean());
327 public void testProgramRemoteEgressVlanRules() throws Exception {
328 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanMiss", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
330 Whitebox.invokeMethod(of13Provider, "programRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
332 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanMiss", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
336 public void testRemoveRemoteEgressVlanRules() throws Exception {
337 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanBcastOut", Long.class, Short.class, String.class, Long.class, Long.class, boolean.class));
339 Whitebox.invokeMethod(of13Provider, "removeRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
341 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyLong(), anyBoolean());
345 public void testRemovePerVlanRules() throws Exception {
346 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
347 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanMiss", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
349 Whitebox.invokeMethod(of13Provider, "removePerVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT, LOCAL_PORT);
351 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
352 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanMiss", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
356 public void testHandleInterfaceUpdate() throws Exception{
357 NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
358 when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN, NetworkHandler.NETWORK_TYPE_GRE);
359 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
360 Map<NodeId, Node> nodes = new HashMap<>();
361 nodes.put(mock(NodeId.class), mock(Node.class));
362 when(nodeCacheManager.getOvsdbNodes()).thenReturn(nodes);
363 Southbound southbound = mock(Southbound.class);
364 when(southbound.extractBridgeOvsdbNodeId(any(Node.class))).thenReturn(mock(NodeId.class));
365 when(southbound.getBridgeNode(any(Node.class), anyString())).thenReturn(mock(Node.class));
366 ConfigurationService configurationService = mock(ConfigurationService.class);
367 when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
369 MemberModifier.field(OF13Provider.class, "nodeCacheManager").set(of13Provider , nodeCacheManager);
370 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
371 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
373 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programLocalRules", String.class, String.class, Node.class, OvsdbTerminationPointAugmentation.class));
374 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programVlanRules", NeutronNetwork.class, Node.class, OvsdbTerminationPointAugmentation.class));
376 TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
377 MemberModifier.field(OF13Provider.class, "tenantNetworkManager").set(of13Provider, tenantNetworkManager);
378 when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), eq(ID))).thenReturn(true);
380 assertTrue("Error, did not update the interface correclty", of13Provider.handleInterfaceUpdate(neutronNetwork, mock(Node.class), mock(OvsdbTerminationPointAugmentation.class)));
381 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programLocalRules", anyString(), anyString(), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
382 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programVlanRules", any(NeutronNetwork.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
384 when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class));
385 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "addTunnelPort", Node.class, String.class, InetAddress.class, InetAddress.class));
386 PowerMockito.when(of13Provider, "addTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class)).thenReturn(true);
387 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programTunnelRules", String.class, String.class, InetAddress.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class));
389 assertTrue("Error, did not update the interface correclty", of13Provider.handleInterfaceUpdate(neutronNetwork, mock(Node.class), mock(OvsdbTerminationPointAugmentation.class)));
390 PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("addTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class));
391 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean());
394 private static final String INTF = "interface";
396 @SuppressWarnings("unchecked")
398 public void testHandlerInterfaceDelete() throws Exception {
399 NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
400 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
401 NodeId nodeId = mock(NodeId.class);
402 when(nodeId.getValue()).thenReturn(ID);
403 Node node = mock(Node.class);
404 when(node.getNodeId()).thenReturn(nodeId);
405 Map<NodeId, Node> nodes = new HashMap<>();
406 nodes.put(mock(NodeId.class), node);
407 when(nodeCacheManager.getOvsdbNodes()).thenReturn(nodes);
408 Southbound southbound = mock(Southbound.class);
409 when(southbound.extractBridgeOvsdbNodeId(any(Node.class))).thenReturn(mock(NodeId.class));
410 when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(true);
411 when(southbound.getOptionsValue(any(List.class), anyString())).thenReturn(IP);
412 OvsdbTerminationPointAugmentation intf = mock(OvsdbTerminationPointAugmentation.class);
413 when(intf.getName()).thenReturn(INTF);
414 List<String> intfs = new ArrayList<>();
416 BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
417 when(bridgeConfigurationManager.getAllPhysicalInterfaceNames(any(Node.class))).thenReturn(intfs);
418 ConfigurationService configurationService = mock(ConfigurationService.class);
419 when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class));
421 PowerMockito.mockStatic(InetAddress.class);
422 PowerMockito.when(InetAddress.getByName(anyString())).thenReturn(mock(InetAddress.class));
424 PowerMockito.mockStatic(MdsalHelper.class);
425 PowerMockito.when(MdsalHelper.createOvsdbInterfaceType(any(Class.class))).thenReturn(INTF);
427 MemberModifier.field(OF13Provider.class, "nodeCacheManager").set(of13Provider , nodeCacheManager);
428 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
429 MemberModifier.field(OF13Provider.class, "bridgeConfigurationManager").set(of13Provider , bridgeConfigurationManager);
430 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
432 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deleteTunnelPort", Node.class, String.class, InetAddress.class, InetAddress.class));
434 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false));
435 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("deleteTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class));
437 when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(false);
438 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deletePhysicalPort", Node.class, String.class));
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("deletePhysicalPort", any(Node.class), anyString());
444 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeLocalRules", String.class, String.class, Node.class, OvsdbTerminationPointAugmentation.class));
445 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeVlanRules", NeutronNetwork.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class));
446 when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN);
448 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false));
449 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("removeLocalRules", anyString(), anyString(), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
450 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("removeVlanRules", any(NeutronNetwork.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean());
452 TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
453 MemberModifier.field(OF13Provider.class, "tenantNetworkManager").set(of13Provider, tenantNetworkManager);
454 when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), eq(ID))).thenReturn(true);
456 when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_GRE);
457 when(southbound.getBridgeNode(any(Node.class), anyString())).thenReturn(node);
458 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeTunnelRules", String.class, String.class, InetAddress.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class, boolean.class));
460 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, node, intf, false));
461 PowerMockito.verifyPrivate(of13Provider, times(3)).invoke("removeTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), any(boolean.class), any(boolean.class));
464 // Problem with methods signatures: initializeFlowRules(Node) has the same signature than initializeFlowRules(Node, String)
466 // public void testInitializeFlowRules() throws Exception {
467 // MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "initializeFlowRules", Node.class, String.class));
468 // MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "triggerInterfaceUpdates", Node.class));
470 // of13Provider.initializeFlowRules(mock(Node.class));
472 // PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("initializeFlowRules", any(Node.class), anyString());
473 // PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class));
477 public void testInitializeOFFlowRule() throws Exception{
478 Southbound southbound = mock(Southbound.class);
479 when(southbound.getBridgeName(any(Node.class))).thenReturn(BR_INT);
480 ConfigurationService configurationService = mock(ConfigurationService.class);
481 when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
483 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
484 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
486 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "initializeFlowRules", Node.class, String.class));
487 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "triggerInterfaceUpdates", Node.class));
489 of13Provider.initializeOFFlowRules(mock(Node.class));
491 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("initializeFlowRules", any(Node.class), anyString());
492 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class));
496 public void testSetDependencies() throws Exception {
497 ConfigurationService configurationService = mock(ConfigurationService.class);
498 TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
499 BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
500 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
501 ClassifierProvider classifierProvider = mock(ClassifierProvider.class);
502 IngressAclProvider ingressAclProvider = mock(IngressAclProvider.class);
503 EgressAclProvider egressAclProvider = mock(EgressAclProvider.class);
504 L2ForwardingProvider l2ForwardingProvider = mock(L2ForwardingProvider.class);
505 SecurityServicesManager securityServicesManager = mock(SecurityServicesManager.class);
506 Southbound southbound = mock(Southbound.class);
508 ServiceHelper.overrideGlobalInstance(ConfigurationService.class, configurationService);
509 ServiceHelper.overrideGlobalInstance(TenantNetworkManager.class, tenantNetworkManager);
510 ServiceHelper.overrideGlobalInstance(BridgeConfigurationManager.class, bridgeConfigurationManager);
511 ServiceHelper.overrideGlobalInstance(NodeCacheManager.class, nodeCacheManager);
512 ServiceHelper.overrideGlobalInstance(ClassifierProvider.class, classifierProvider);
513 ServiceHelper.overrideGlobalInstance(IngressAclProvider.class, ingressAclProvider);
514 ServiceHelper.overrideGlobalInstance(EgressAclProvider.class, egressAclProvider);
515 ServiceHelper.overrideGlobalInstance(L2ForwardingProvider.class, l2ForwardingProvider);
516 ServiceHelper.overrideGlobalInstance(SecurityServicesManager.class, securityServicesManager);
517 ServiceHelper.overrideGlobalInstance(Southbound.class, southbound);
519 of13Provider.setDependencies(mock(BundleContext.class), mock(ServiceReference.class));
521 assertEquals("Error, did not return the correct object", getField("configurationService"), configurationService);
522 assertEquals("Error, did not return the correct object", getField("tenantNetworkManager"), tenantNetworkManager);
523 assertEquals("Error, did not return the correct object", getField("bridgeConfigurationManager"), bridgeConfigurationManager);
524 assertEquals("Error, did not return the correct object", getField("nodeCacheManager"), nodeCacheManager);
525 assertEquals("Error, did not return the correct object", getField("classifierProvider"), classifierProvider);
526 assertEquals("Error, did not return the correct object", getField("ingressAclProvider"), ingressAclProvider);
527 assertEquals("Error, did not return the correct object", getField("egressAclProvider"), egressAclProvider);
528 assertEquals("Error, did not return the correct object", getField("l2ForwardingProvider"), l2ForwardingProvider);
529 assertEquals("Error, did not return the correct object", getField("securityServicesManager"), securityServicesManager);
530 assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
533 @SuppressWarnings("unchecked")
535 public void testSetDependenciesObject() throws Exception{
536 NetworkingProviderManager networkingProviderManager = mock(NetworkingProviderManager.class);
537 BundleContext bundleContext = mock(BundleContext.class);
538 when(bundleContext.getServiceReference(NetworkingProvider.class.getName())).thenReturn(mock(ServiceReference.class));
540 MemberModifier.field(OF13Provider.class, "bundleContext").set(of13Provider, bundleContext);
542 of13Provider.setDependencies(networkingProviderManager);
543 verify(networkingProviderManager).providerAdded(any(ServiceReference.class), same(of13Provider));
546 private Object getField(String fieldName) throws Exception {
547 Field field = OF13Provider.class.getDeclaredField(fieldName);
548 field.setAccessible(true);
549 return field.get(of13Provider);