2 * Copyright (c) 2015 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.ovsdb.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.same;
20 import static org.mockito.Mockito.mock;
21 import static org.mockito.Mockito.times;
22 import static org.mockito.Mockito.verify;
23 import static org.mockito.Mockito.when;
25 import java.lang.reflect.Field;
26 import java.net.InetAddress;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 import org.mockito.Mock;
36 import org.mockito.Mockito;
37 import org.opendaylight.ovsdb.openstack.netvirt.translator.NeutronNetwork;
38 import org.opendaylight.ovsdb.openstack.netvirt.MdsalHelper;
39 import org.opendaylight.ovsdb.openstack.netvirt.NetworkHandler;
40 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
41 import org.opendaylight.ovsdb.openstack.netvirt.api.ClassifierProvider;
42 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
43 import org.opendaylight.ovsdb.openstack.netvirt.api.EgressAclProvider;
44 import org.opendaylight.ovsdb.openstack.netvirt.api.IngressAclProvider;
45 import org.opendaylight.ovsdb.openstack.netvirt.api.L2ForwardingProvider;
46 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
47 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
48 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
49 import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager;
50 import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
51 import org.opendaylight.ovsdb.openstack.netvirt.api.Status;
52 import org.opendaylight.ovsdb.openstack.netvirt.api.StatusCode;
53 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
54 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
56 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
57 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
58 import org.osgi.framework.BundleContext;
59 import org.osgi.framework.ServiceReference;
60 import org.powermock.api.mockito.PowerMockito;
61 import org.powermock.api.support.membermodification.MemberMatcher;
62 import org.powermock.api.support.membermodification.MemberModifier;
63 import org.powermock.core.classloader.annotations.PrepareForTest;
64 import org.powermock.modules.junit4.PowerMockRunner;
65 import org.powermock.reflect.Whitebox;
68 * Unit test for {@link OF13Provider}
70 @PrepareForTest({OF13Provider.class, InetAddress.class, MdsalHelper.class, ServiceHelper.class})
71 @RunWith(PowerMockRunner.class)
72 public class OF13ProviderTest {
74 @Mock private OF13Provider of13Provider;
76 private static final String TYPE = "gre";
77 private static final String IP = "127.0.0.1";
78 private static final String BR_INT = "br-int";
79 private static final String ID = "4";
80 private static final String PORT = "port-int";
81 private static final String SEG_ID = "5";
82 private static final String MAC_ADDRESS = "mac-address";
83 private static final long LOCAL_PORT = 3;
86 public void setUp() throws Exception{
87 of13Provider = PowerMockito.mock(OF13Provider.class, Mockito.CALLS_REAL_METHODS);
91 public void testGetName() {
92 assertEquals("Error, did not return the correct name", OF13Provider.NAME, of13Provider.getName());
96 public void testSupportsServices() {
97 assertTrue("Error, did not return the correct boolean", of13Provider.supportsServices());
101 public void testHasPerTenantTunneling() {
102 assertFalse("Error, did not return the correct boolean", of13Provider.hasPerTenantTunneling());
106 public void testGetTunnelReadinessStatus() throws Exception {
107 ConfigurationService configurationService = mock(ConfigurationService.class);
108 BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
109 TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
111 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
112 MemberModifier.field(OF13Provider.class, "bridgeConfigurationManager").set(of13Provider , bridgeConfigurationManager);
113 MemberModifier.field(OF13Provider.class, "tenantNetworkManager").set(of13Provider , tenantNetworkManager);
115 assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTFOUND), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
117 when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class));
118 when(bridgeConfigurationManager.isNodeNeutronReady(any(Node.class))).thenReturn(false, true);
120 assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTACCEPTABLE), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
122 when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), anyString())).thenReturn(false, true);
124 assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTACCEPTABLE), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
125 assertEquals("Error, did not return the correct status code", new Status(StatusCode.SUCCESS), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
129 public void testGetTunnelName() throws Exception {
130 PowerMockito.mockStatic(InetAddress.class);
131 InetAddress inetAddress = mock(InetAddress.class);
132 PowerMockito.when(inetAddress.getHostAddress()).thenReturn(IP);
134 String ret = TYPE + "-" + inetAddress.getHostAddress();
135 assertEquals("Error, did not return the correct status code", ret, Whitebox.invokeMethod(of13Provider, "getTunnelName", TYPE, inetAddress));
138 @SuppressWarnings("unchecked")
140 public void testAddTunnelPort() throws Exception {
141 ConfigurationService configurationService = mock(ConfigurationService.class);
142 when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
143 Southbound southbound = mock(Southbound.class);
144 when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString())).thenReturn(mock(OvsdbTerminationPointAugmentation.class));
145 NodeId nodeId = mock(NodeId.class);
146 when(nodeId.getValue()).thenReturn(ID);
147 Node node = mock(Node.class);
148 when(node.getNodeId()).thenReturn(nodeId);
150 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "getTunnelName", String.class, InetAddress.class));
152 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
153 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
155 assertTrue("Error, did not add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class)));
157 when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString())).thenReturn(null);
158 when(southbound.addTunnelTerminationPoint(any(Node.class), anyString(), anyString(), anyString(), any(HashMap.class))).thenReturn(false);
160 assertFalse("Error, did add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class)));
162 when(southbound.addTunnelTerminationPoint(any(Node.class), anyString(), anyString(), anyString(), any(HashMap.class))).thenReturn(true);
164 assertTrue("Error, did not add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class)));
165 PowerMockito.verifyPrivate(of13Provider, times(3)).invoke("getTunnelName", anyString(), any(InetAddress.class));
169 public void testDeletePort() throws Exception {
170 Southbound southbound = mock(Southbound.class);
171 when(southbound.deleteTerminationPoint(any(Node.class), anyString())).thenReturn(false, true);
172 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
174 assertFalse("Error, did delete the port", (boolean) Whitebox.invokeMethod(of13Provider, "deletePort", mock(Node.class), TYPE, PORT));
175 assertTrue("Error, did not delete the port", (boolean) Whitebox.invokeMethod(of13Provider, "deletePort", mock(Node.class), TYPE, PORT));
179 public void testDeleteTunnelPort() throws Exception {
180 ConfigurationService configurationService = mock(ConfigurationService.class);
181 when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
183 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
185 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "getTunnelName", String.class, InetAddress.class));
186 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deletePort", Node.class, String.class, String.class));
188 PowerMockito.when(of13Provider, "deletePort", any(Node.class), anyString(), anyString()).thenReturn(true);
190 assertTrue("Error, did not delete the tunnel", (boolean) Whitebox.invokeMethod(of13Provider, "deleteTunnelPort", mock(Node.class), TYPE, mock(InetAddress.class), mock(InetAddress.class)));
192 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("getTunnelName", anyString(), any(InetAddress.class));
193 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("deletePort", any(Node.class), anyString(), anyString());
195 PowerMockito.when(of13Provider, "deletePort", any(Node.class), anyString(), anyString()).thenReturn(false);
197 assertFalse("Error, did delete the tunnel", (boolean) Whitebox.invokeMethod(of13Provider, "deleteTunnelPort", mock(Node.class), TYPE, mock(InetAddress.class), mock(InetAddress.class)));
199 PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("getTunnelName", anyString(), any(InetAddress.class));
200 PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("deletePort", any(Node.class), anyString(), anyString());
204 public void testProgramLocalBridgeRules() throws Exception {
205 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPort", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
206 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
207 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
208 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalBcastOut", Long.class, Short.class, String.class, Long.class, boolean.class));
209 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
210 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelMiss", Long.class, Short.class, Short.class, String.class, boolean.class));
211 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalTableMiss", Long.class, Short.class, String.class, boolean.class));
214 Whitebox.invokeMethod(of13Provider, "programLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
216 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPort", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
217 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
218 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
219 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyBoolean());
220 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
221 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelMiss", anyLong(), anyShort(), anyShort(), anyString(), anyBoolean());
222 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalTableMiss", anyLong(), anyShort(), anyString(), anyBoolean());
226 public void testRemoveLocalBridgeRules() throws Exception {
227 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPort", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
228 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
229 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
230 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalBcastOut", Long.class, Short.class, String.class, Long.class, boolean.class));
231 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
234 Whitebox.invokeMethod(of13Provider, "removeLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
236 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPort", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
237 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
238 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
239 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyBoolean());
240 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
244 public void testProgramLocalIngressTunnelBridgeRules() throws Exception {
245 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
246 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
249 Whitebox.invokeMethod(of13Provider, "programLocalIngressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
251 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
252 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
256 public void testProgramRemoteEgressTunnelBridgeRules() throws Exception {
257 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelOut", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
259 Whitebox.invokeMethod(of13Provider, "programRemoteEgressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
261 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
265 public void testRemovePerTunnelRules() throws Exception {
266 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
267 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
268 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelMiss", Long.class, Short.class, Short.class, String.class, boolean.class));
269 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalTableMiss", Long.class, Short.class, String.class, boolean.class));
271 Whitebox.invokeMethod(of13Provider, "removePerTunnelRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT);
273 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
274 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
275 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelMiss", anyLong(), anyShort(), anyShort(), anyString(), anyBoolean());
276 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalTableMiss", anyLong(), anyShort(), anyString(), anyBoolean());
280 public void testProgramLocalVlanRules() throws Exception {
281 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPortSetVlan", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
282 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
283 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
285 Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
287 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPortSetVlan", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
288 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
289 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
293 public void testRemoveLocalVlanRules() throws Exception {
294 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPortSetVlan", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class));
295 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class));
296 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class));
298 Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
300 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPortSetVlan", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
301 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean());
302 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
307 public void testProgramLocalIngressVlanRules() throws Exception {
308 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
309 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanBcastOut", Long.class, Short.class, String.class, Long.class, Long.class, boolean.class));
311 Whitebox.invokeMethod(of13Provider, "programLocalIngressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
313 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
314 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyLong(), anyBoolean());
318 public void testProgramRemoteEgressVlanRules() throws Exception {
319 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanMiss", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
321 Whitebox.invokeMethod(of13Provider, "programRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
323 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanMiss", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
327 public void testRemoveRemoteEgressVlanRules() throws Exception {
328 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanBcastOut", Long.class, Short.class, String.class, Long.class, Long.class, boolean.class));
330 Whitebox.invokeMethod(of13Provider, "removeRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
332 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyLong(), anyBoolean());
336 public void testRemovePerVlanRules() throws Exception {
337 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
338 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanMiss", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class));
340 Whitebox.invokeMethod(of13Provider, "removePerVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT, LOCAL_PORT);
342 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
343 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanMiss", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
347 public void testHandleInterfaceUpdate() throws Exception{
348 NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
349 when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN, NetworkHandler.NETWORK_TYPE_GRE);
350 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
351 Map<NodeId, Node> nodes = new HashMap<>();
352 nodes.put(mock(NodeId.class), mock(Node.class));
353 when(nodeCacheManager.getOvsdbNodes()).thenReturn(nodes);
354 Southbound southbound = mock(Southbound.class);
355 when(southbound.extractBridgeOvsdbNodeId(any(Node.class))).thenReturn(mock(NodeId.class));
356 when(southbound.getBridgeNode(any(Node.class), anyString())).thenReturn(mock(Node.class));
357 ConfigurationService configurationService = mock(ConfigurationService.class);
358 when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
360 MemberModifier.field(OF13Provider.class, "nodeCacheManager").set(of13Provider , nodeCacheManager);
361 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
362 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
364 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programLocalRules", String.class, String.class, Node.class, OvsdbTerminationPointAugmentation.class));
365 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programVlanRules", NeutronNetwork.class, Node.class, OvsdbTerminationPointAugmentation.class));
367 assertTrue("Error, did not update the interface correclty", of13Provider.handleInterfaceUpdate(neutronNetwork, mock(Node.class), mock(OvsdbTerminationPointAugmentation.class)));
368 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programLocalRules", anyString(), anyString(), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
369 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programVlanRules", any(NeutronNetwork.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
371 when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class));
372 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "addTunnelPort", Node.class, String.class, InetAddress.class, InetAddress.class));
373 PowerMockito.when(of13Provider, "addTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class)).thenReturn(true);
374 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programTunnelRules", String.class, String.class, InetAddress.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class));
376 assertTrue("Error, did not update the interface correclty", of13Provider.handleInterfaceUpdate(neutronNetwork, mock(Node.class), mock(OvsdbTerminationPointAugmentation.class)));
377 PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("addTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class));
378 PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("programTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean());
381 private static final String INTF = "interface";
383 @SuppressWarnings("unchecked")
385 public void testHandlerInterfaceDelete() throws Exception {
386 NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
387 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
388 NodeId nodeId = mock(NodeId.class);
389 when(nodeId.getValue()).thenReturn(ID);
390 Node node = mock(Node.class);
391 when(node.getNodeId()).thenReturn(nodeId);
392 Map<NodeId, Node> nodes = new HashMap<>();
393 nodes.put(mock(NodeId.class), node);
394 when(nodeCacheManager.getOvsdbNodes()).thenReturn(nodes);
395 Southbound southbound = mock(Southbound.class);
396 when(southbound.extractBridgeOvsdbNodeId(any(Node.class))).thenReturn(mock(NodeId.class));
397 when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(true);
398 when(southbound.getOptionsValue(any(List.class), anyString())).thenReturn(IP);
399 OvsdbTerminationPointAugmentation intf = mock(OvsdbTerminationPointAugmentation.class);
400 when(intf.getName()).thenReturn(INTF);
401 List<String> intfs = new ArrayList<>();
403 BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
404 when(bridgeConfigurationManager.getAllPhysicalInterfaceNames(any(Node.class))).thenReturn(intfs);
405 ConfigurationService configurationService = mock(ConfigurationService.class);
406 when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class));
408 PowerMockito.mockStatic(InetAddress.class);
409 PowerMockito.when(InetAddress.getByName(anyString())).thenReturn(mock(InetAddress.class));
411 PowerMockito.mockStatic(MdsalHelper.class);
412 PowerMockito.when(MdsalHelper.createOvsdbInterfaceType(any(Class.class))).thenReturn(INTF);
414 MemberModifier.field(OF13Provider.class, "nodeCacheManager").set(of13Provider , nodeCacheManager);
415 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
416 MemberModifier.field(OF13Provider.class, "bridgeConfigurationManager").set(of13Provider , bridgeConfigurationManager);
417 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
419 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deleteTunnelPort", Node.class, String.class, InetAddress.class, InetAddress.class));
421 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false));
422 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("deleteTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class));
424 when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(false);
425 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deletePhysicalPort", Node.class, String.class));
427 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false));
428 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("deletePhysicalPort", any(Node.class), anyString());
431 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeLocalRules", String.class, String.class, Node.class, OvsdbTerminationPointAugmentation.class));
432 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeVlanRules", NeutronNetwork.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class));
433 when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN);
435 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false));
436 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("removeLocalRules", anyString(), anyString(), any(Node.class), any(OvsdbTerminationPointAugmentation.class));
437 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("removeVlanRules", any(NeutronNetwork.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean());
439 when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_GRE);
440 when(southbound.getBridgeNode(any(Node.class), anyString())).thenReturn(node);
441 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeTunnelRules", String.class, String.class, InetAddress.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class, boolean.class));
443 assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, node, intf, false));
444 PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("removeTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), any(boolean.class), any(boolean.class));
447 // Problem with methods signatures: initializeFlowRules(Node) has the same signature than initializeFlowRules(Node, String)
449 // public void testInitializeFlowRules() throws Exception {
450 // MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "initializeFlowRules", Node.class, String.class));
451 // MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "triggerInterfaceUpdates", Node.class));
453 // of13Provider.initializeFlowRules(mock(Node.class));
455 // PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("initializeFlowRules", any(Node.class), anyString());
456 // PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class));
460 public void testInitializeOFFlowRule() throws Exception{
461 Southbound southbound = mock(Southbound.class);
462 when(southbound.getBridgeName(any(Node.class))).thenReturn(BR_INT);
463 ConfigurationService configurationService = mock(ConfigurationService.class);
464 when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
466 MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
467 MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
469 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "initializeFlowRules", Node.class, String.class));
470 MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "triggerInterfaceUpdates", Node.class));
472 of13Provider.initializeOFFlowRules(mock(Node.class));
474 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("initializeFlowRules", any(Node.class), anyString());
475 PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class));
479 public void testSetDependencies() throws Exception {
480 ConfigurationService configurationService = mock(ConfigurationService.class);
481 TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
482 BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
483 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
484 ClassifierProvider classifierProvider = mock(ClassifierProvider.class);
485 IngressAclProvider ingressAclProvider = mock(IngressAclProvider.class);
486 EgressAclProvider egressAclProvider = mock(EgressAclProvider.class);
487 L2ForwardingProvider l2ForwardingProvider = mock(L2ForwardingProvider.class);
488 SecurityServicesManager securityServicesManager = mock(SecurityServicesManager.class);
489 Southbound southbound = mock(Southbound.class);
491 PowerMockito.mockStatic(ServiceHelper.class);
492 PowerMockito.when(ServiceHelper.getGlobalInstance(ConfigurationService.class, of13Provider)).thenReturn(configurationService);
493 PowerMockito.when(ServiceHelper.getGlobalInstance(TenantNetworkManager.class, of13Provider)).thenReturn(tenantNetworkManager);
494 PowerMockito.when(ServiceHelper.getGlobalInstance(BridgeConfigurationManager.class, of13Provider)).thenReturn(bridgeConfigurationManager);
495 PowerMockito.when(ServiceHelper.getGlobalInstance(NodeCacheManager.class, of13Provider)).thenReturn(nodeCacheManager);
496 PowerMockito.when(ServiceHelper.getGlobalInstance(ClassifierProvider.class, of13Provider)).thenReturn(classifierProvider);
497 PowerMockito.when(ServiceHelper.getGlobalInstance(IngressAclProvider.class, of13Provider)).thenReturn(ingressAclProvider);
498 PowerMockito.when(ServiceHelper.getGlobalInstance(EgressAclProvider.class, of13Provider)).thenReturn(egressAclProvider);
499 PowerMockito.when(ServiceHelper.getGlobalInstance(L2ForwardingProvider.class, of13Provider)).thenReturn(l2ForwardingProvider);
500 PowerMockito.when(ServiceHelper.getGlobalInstance(SecurityServicesManager.class, of13Provider)).thenReturn(securityServicesManager);
501 PowerMockito.when(ServiceHelper.getGlobalInstance(Southbound.class, of13Provider)).thenReturn(southbound);
503 of13Provider.setDependencies(mock(BundleContext.class), mock(ServiceReference.class));
505 assertEquals("Error, did not return the correct object", getField("configurationService"), configurationService);
506 assertEquals("Error, did not return the correct object", getField("tenantNetworkManager"), tenantNetworkManager);
507 assertEquals("Error, did not return the correct object", getField("bridgeConfigurationManager"), bridgeConfigurationManager);
508 assertEquals("Error, did not return the correct object", getField("nodeCacheManager"), nodeCacheManager);
509 assertEquals("Error, did not return the correct object", getField("classifierProvider"), classifierProvider);
510 assertEquals("Error, did not return the correct object", getField("ingressAclProvider"), ingressAclProvider);
511 assertEquals("Error, did not return the correct object", getField("egressAclProvider"), egressAclProvider);
512 assertEquals("Error, did not return the correct object", getField("l2ForwardingProvider"), l2ForwardingProvider);
513 assertEquals("Error, did not return the correct object", getField("securityServicesManager"), securityServicesManager);
514 assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
517 @SuppressWarnings("unchecked")
519 public void testSetDependenciesObject() throws Exception{
520 NetworkingProviderManager networkingProviderManager = mock(NetworkingProviderManager.class);
521 BundleContext bundleContext = mock(BundleContext.class);
522 when(bundleContext.getServiceReference(NetworkingProvider.class.getName())).thenReturn(mock(ServiceReference.class));
524 MemberModifier.field(OF13Provider.class, "bundleContext").set(of13Provider, bundleContext);
526 of13Provider.setDependencies(networkingProviderManager);
527 verify(networkingProviderManager).providerAdded(any(ServiceReference.class), same(of13Provider));
530 private Object getField(String fieldName) throws Exception {
531 Field field = OF13Provider.class.getDeclaredField(fieldName);
532 field.setAccessible(true);
533 return field.get(of13Provider);