f69b61cea361d2d3f0ae6bd8b82ceb9f067844c4
[netvirt.git] / openstack / net-virt-providers / src / test / java / org / opendaylight / netvirt / openstack / netvirt / providers / openflow13 / OF13ProviderTest.java
1 /*
2  * Copyright (c) 2015, 2016 Inocybe Technologies.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.netvirt.openstack.netvirt.providers.openflow13;
10
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;
25
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;
31 import java.util.Map;
32
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;
67
68 /**
69  * Unit test for {@link OF13Provider}
70  */
71 @PrepareForTest({OF13Provider.class, InetAddress.class, MdsalHelper.class, ServiceHelper.class})
72 @RunWith(PowerMockRunner.class)
73 public class OF13ProviderTest {
74
75     @Mock private OF13Provider of13Provider;
76
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;
85
86     @Before
87     public void setUp() throws Exception{
88         of13Provider = PowerMockito.mock(OF13Provider.class, Mockito.CALLS_REAL_METHODS);
89     }
90
91     @Test
92     public void testGetName() {
93         assertEquals("Error, did not return the correct name",  OF13Provider.NAME, of13Provider.getName());
94     }
95
96     @Test
97     public void testSupportsServices() {
98         assertTrue("Error, did not return the correct boolean", of13Provider.supportsServices());
99     }
100
101     @Test
102     public void testHasPerTenantTunneling() {
103         assertFalse("Error, did not return the correct boolean", of13Provider.hasPerTenantTunneling());
104     }
105
106     @Test
107     public void testGetTunnelReadinessStatus() throws Exception {
108         ConfigurationService configurationService = mock(ConfigurationService.class);
109         BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
110         TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
111
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);
115
116         assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTFOUND), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
117
118         when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class));
119         when(bridgeConfigurationManager.isNodeNeutronReady(any(Node.class))).thenReturn(false, true);
120
121         assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTACCEPTABLE), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
122
123         when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), anyString())).thenReturn(false, true);
124
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), ""));
127     }
128
129     @Test
130     public void testGetTunnelName() throws Exception {
131         PowerMockito.mockStatic(InetAddress.class);
132         InetAddress inetAddress = mock(InetAddress.class);
133         PowerMockito.when(inetAddress.getHostAddress()).thenReturn(IP);
134
135         String ret = TYPE + "-" + inetAddress.getHostAddress();
136         assertEquals("Error, did not return the correct status code", ret, Whitebox.invokeMethod(of13Provider, "getTunnelName", TYPE, inetAddress));
137     }
138
139     @SuppressWarnings("unchecked")
140     @Test
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);
150
151         MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "getTunnelName", String.class, InetAddress.class));
152
153         MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
154         MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
155
156         assertTrue("Error, did not add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class)));
157
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);
160
161         assertFalse("Error, did add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class)));
162
163         when(southbound.addTunnelTerminationPoint(any(Node.class), anyString(), anyString(), anyString(), any(HashMap.class))).thenReturn(true);
164
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));
167     }
168
169     @Test
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);
174
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));
177     }
178
179     @Test
180     public void testDeleteTunnelPort() throws Exception {
181         ConfigurationService configurationService = mock(ConfigurationService.class);
182         when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
183
184         MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
185
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));
188
189         PowerMockito.when(of13Provider, "deletePort", any(Node.class), anyString(), anyString()).thenReturn(true);
190
191         assertTrue("Error, did not delete the tunnel", (boolean) Whitebox.invokeMethod(of13Provider, "deleteTunnelPort", mock(Node.class), TYPE, mock(InetAddress.class), mock(InetAddress.class)));
192
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());
195
196         PowerMockito.when(of13Provider, "deletePort", any(Node.class), anyString(), anyString()).thenReturn(false);
197
198         assertFalse("Error, did delete the tunnel", (boolean) Whitebox.invokeMethod(of13Provider, "deleteTunnelPort", mock(Node.class), TYPE, mock(InetAddress.class), mock(InetAddress.class)));
199
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());
202     }
203
204     @Test
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));
214
215
216         Whitebox.invokeMethod(of13Provider, "programLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
217
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());
226     }
227
228     @Test
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));
236
237
238         Whitebox.invokeMethod(of13Provider, "removeLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
239
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());
246     }
247
248     @Test
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));
253
254
255         Whitebox.invokeMethod(of13Provider, "programLocalIngressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
256
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());
260     }
261
262     @Test
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));
265
266         Whitebox.invokeMethod(of13Provider, "programRemoteEgressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
267
268         PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
269     }
270
271     @Test
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));
278
279         Whitebox.invokeMethod(of13Provider, "removePerTunnelRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT);
280
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());
286     }
287
288     @Test
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));
293
294         Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
295
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());
299     }
300
301     @Test
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));
306
307         Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
308
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());
312     }
313
314
315     @Test
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));
319
320         Whitebox.invokeMethod(of13Provider, "programLocalIngressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
321
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());
324     }
325
326     @Test
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));
329
330         Whitebox.invokeMethod(of13Provider, "programRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
331
332         PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanMiss", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
333     }
334
335     @Test
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));
338
339         Whitebox.invokeMethod(of13Provider, "removeRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
340
341         PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyLong(), anyBoolean());
342     }
343
344     @Test
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));
348
349         Whitebox.invokeMethod(of13Provider, "removePerVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT, LOCAL_PORT);
350
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());
353     }
354
355     @Test
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);
368
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);
372
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));
375
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);
379
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));
383
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));
388
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());
392     }
393
394     private static final String INTF = "interface";
395
396     @SuppressWarnings("unchecked")
397     @Test
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<>();
415         intfs.add(INTF);
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));
420
421         PowerMockito.mockStatic(InetAddress.class);
422         PowerMockito.when(InetAddress.getByName(anyString())).thenReturn(mock(InetAddress.class));
423
424         PowerMockito.mockStatic(MdsalHelper.class);
425         PowerMockito.when(MdsalHelper.createOvsdbInterfaceType(any(Class.class))).thenReturn(INTF);
426
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);
431
432         MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deleteTunnelPort", Node.class, String.class, InetAddress.class, InetAddress.class));
433
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));
436
437         when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(false);
438         MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deletePhysicalPort", Node.class, String.class));
439
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());
442
443         intfs.clear();
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);
447
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());
451
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);
455
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));
459
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));
462     }
463
464     // Problem with methods signatures: initializeFlowRules(Node) has the same signature than initializeFlowRules(Node, String)
465 //    @Test
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));
469 //
470 //        of13Provider.initializeFlowRules(mock(Node.class));
471 //
472 //        PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("initializeFlowRules", any(Node.class), anyString());
473 //        PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class));
474 //    }
475
476     @Test
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);
482
483         MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
484         MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
485
486         MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "initializeFlowRules", Node.class, String.class));
487         MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "triggerInterfaceUpdates", Node.class));
488
489         of13Provider.initializeOFFlowRules(mock(Node.class));
490
491         PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("initializeFlowRules", any(Node.class), anyString());
492         PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class));
493     }
494
495     @Test
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);
507
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);
518
519         of13Provider.setDependencies(mock(BundleContext.class), mock(ServiceReference.class));
520
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);
531     }
532
533     @SuppressWarnings("unchecked")
534     @Test
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));
539
540         MemberModifier.field(OF13Provider.class, "bundleContext").set(of13Provider, bundleContext);
541
542         of13Provider.setDependencies(networkingProviderManager);
543         verify(networkingProviderManager).providerAdded(any(ServiceReference.class), same(of13Provider));
544     }
545
546     private Object getField(String fieldName) throws Exception {
547         Field field = OF13Provider.class.getDeclaredField(fieldName);
548         field.setAccessible(true);
549         return field.get(of13Provider);
550     }
551 }