Merge branch 'topic/master/neutron-yang-migration' to branch 'master'
[ovsdb.git] / openstack / net-virt-providers / src / test / java / org / opendaylight / ovsdb / openstack / netvirt / providers / openflow13 / OF13ProviderTest.java
1 /*
2  * Copyright (c) 2015 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.ovsdb.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.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;
24
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;
30 import java.util.Map;
31
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;
66
67 /**
68  * Unit test for {@link OF13Provider}
69  */
70 @PrepareForTest({OF13Provider.class, InetAddress.class, MdsalHelper.class, ServiceHelper.class})
71 @RunWith(PowerMockRunner.class)
72 public class OF13ProviderTest {
73
74     @Mock private OF13Provider of13Provider;
75
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;
84
85     @Before
86     public void setUp() throws Exception{
87         of13Provider = PowerMockito.mock(OF13Provider.class, Mockito.CALLS_REAL_METHODS);
88     }
89
90     @Test
91     public void testGetName() {
92         assertEquals("Error, did not return the correct name",  OF13Provider.NAME, of13Provider.getName());
93     }
94
95     @Test
96     public void testSupportsServices() {
97         assertTrue("Error, did not return the correct boolean", of13Provider.supportsServices());
98     }
99
100     @Test
101     public void testHasPerTenantTunneling() {
102         assertFalse("Error, did not return the correct boolean", of13Provider.hasPerTenantTunneling());
103     }
104
105     @Test
106     public void testGetTunnelReadinessStatus() throws Exception {
107         ConfigurationService configurationService = mock(ConfigurationService.class);
108         BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
109         TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
110
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);
114
115         assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTFOUND), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
116
117         when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class));
118         when(bridgeConfigurationManager.isNodeNeutronReady(any(Node.class))).thenReturn(false, true);
119
120         assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTACCEPTABLE), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), ""));
121
122         when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), anyString())).thenReturn(false, true);
123
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), ""));
126     }
127
128     @Test
129     public void testGetTunnelName() throws Exception {
130         PowerMockito.mockStatic(InetAddress.class);
131         InetAddress inetAddress = mock(InetAddress.class);
132         PowerMockito.when(inetAddress.getHostAddress()).thenReturn(IP);
133
134         String ret = TYPE + "-" + inetAddress.getHostAddress();
135         assertEquals("Error, did not return the correct status code", ret, Whitebox.invokeMethod(of13Provider, "getTunnelName", TYPE, inetAddress));
136     }
137
138     @SuppressWarnings("unchecked")
139     @Test
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);
149
150         MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "getTunnelName", String.class, InetAddress.class));
151
152         MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
153         MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
154
155         assertTrue("Error, did not add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class)));
156
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);
159
160         assertFalse("Error, did add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class)));
161
162         when(southbound.addTunnelTerminationPoint(any(Node.class), anyString(), anyString(), anyString(), any(HashMap.class))).thenReturn(true);
163
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));
166     }
167
168     @Test
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);
173
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));
176     }
177
178     @Test
179     public void testDeleteTunnelPort() throws Exception {
180         ConfigurationService configurationService = mock(ConfigurationService.class);
181         when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
182
183         MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
184
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));
187
188         PowerMockito.when(of13Provider, "deletePort", any(Node.class), anyString(), anyString()).thenReturn(true);
189
190         assertTrue("Error, did not delete the tunnel", (boolean) Whitebox.invokeMethod(of13Provider, "deleteTunnelPort", mock(Node.class), TYPE, mock(InetAddress.class), mock(InetAddress.class)));
191
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());
194
195         PowerMockito.when(of13Provider, "deletePort", any(Node.class), anyString(), anyString()).thenReturn(false);
196
197         assertFalse("Error, did delete the tunnel", (boolean) Whitebox.invokeMethod(of13Provider, "deleteTunnelPort", mock(Node.class), TYPE, mock(InetAddress.class), mock(InetAddress.class)));
198
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());
201     }
202
203     @Test
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));
212
213
214         Whitebox.invokeMethod(of13Provider, "programLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
215
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());
223     }
224
225     @Test
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));
232
233
234         Whitebox.invokeMethod(of13Provider, "removeLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
235
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());
241     }
242
243     @Test
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));
247
248
249         Whitebox.invokeMethod(of13Provider, "programLocalIngressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
250
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());
253     }
254
255     @Test
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));
258
259         Whitebox.invokeMethod(of13Provider, "programRemoteEgressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
260
261         PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean());
262     }
263
264     @Test
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));
270
271         Whitebox.invokeMethod(of13Provider, "removePerTunnelRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT);
272
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());
277     }
278
279     @Test
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));
284
285         Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
286
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());
290     }
291
292     @Test
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));
297
298         Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
299
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());
303     }
304
305
306     @Test
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));
310
311         Whitebox.invokeMethod(of13Provider, "programLocalIngressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
312
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());
315     }
316
317     @Test
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));
320
321         Whitebox.invokeMethod(of13Provider, "programRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT);
322
323         PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanMiss", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean());
324     }
325
326     @Test
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));
329
330         Whitebox.invokeMethod(of13Provider, "removeRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
331
332         PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyLong(), anyBoolean());
333     }
334
335     @Test
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));
339
340         Whitebox.invokeMethod(of13Provider, "removePerVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT, LOCAL_PORT);
341
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());
344     }
345
346     @Test
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);
359
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);
363
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));
366
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));
370
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));
375
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());
379     }
380
381     private static final String INTF = "interface";
382
383     @SuppressWarnings("unchecked")
384     @Test
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<>();
402         intfs.add(INTF);
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));
407
408         PowerMockito.mockStatic(InetAddress.class);
409         PowerMockito.when(InetAddress.getByName(anyString())).thenReturn(mock(InetAddress.class));
410
411         PowerMockito.mockStatic(MdsalHelper.class);
412         PowerMockito.when(MdsalHelper.createOvsdbInterfaceType(any(Class.class))).thenReturn(INTF);
413
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);
418
419         MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deleteTunnelPort", Node.class, String.class, InetAddress.class, InetAddress.class));
420
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));
423
424         when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(false);
425         MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deletePhysicalPort", Node.class, String.class));
426
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());
429
430         intfs.clear();
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);
434
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());
438
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));
442
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));
445     }
446
447     // Problem with methods signatures: initializeFlowRules(Node) has the same signature than initializeFlowRules(Node, String)
448 //    @Test
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));
452 //
453 //        of13Provider.initializeFlowRules(mock(Node.class));
454 //
455 //        PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("initializeFlowRules", any(Node.class), anyString());
456 //        PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class));
457 //    }
458
459     @Test
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);
465
466         MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound);
467         MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService);
468
469         MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "initializeFlowRules", Node.class, String.class));
470         MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "triggerInterfaceUpdates", Node.class));
471
472         of13Provider.initializeOFFlowRules(mock(Node.class));
473
474         PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("initializeFlowRules", any(Node.class), anyString());
475         PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class));
476     }
477
478     @Test
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);
490
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);
502
503         of13Provider.setDependencies(mock(BundleContext.class), mock(ServiceReference.class));
504
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);
515     }
516
517     @SuppressWarnings("unchecked")
518     @Test
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));
523
524         MemberModifier.field(OF13Provider.class, "bundleContext").set(of13Provider, bundleContext);
525
526         of13Provider.setDependencies(networkingProviderManager);
527         verify(networkingProviderManager).providerAdded(any(ServiceReference.class), same(of13Provider));
528     }
529
530     private Object getField(String fieldName) throws Exception {
531         Field field = OF13Provider.class.getDeclaredField(fieldName);
532         field.setAccessible(true);
533         return field.get(of13Provider);
534     }
535 }