Remove plugin dependencies
[ovsdb.git] / openstack / net-virt / src / test / java / org / opendaylight / ovsdb / openstack / netvirt / LBaaSPoolMemberHandlerTest.java
1 /*
2  * Copyright (c) 2015 Inocybe and others.  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;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertTrue;
13 import static org.mockito.Matchers.any;
14 import static org.mockito.Matchers.anyString;
15 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.times;
17 import static org.mockito.Mockito.verify;
18 import static org.mockito.Mockito.when;
19
20 import java.net.HttpURLConnection;
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Map.Entry;
25
26 import org.junit.Before;
27 import org.junit.Ignore;
28 import org.junit.Test;
29 import org.junit.runner.RunWith;
30 import org.mockito.InjectMocks;
31 import org.mockito.Mock;
32 import org.mockito.Mockito;
33 import org.opendaylight.neutron.spi.INeutronLoadBalancerCRUD;
34 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD;
35 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
36 import org.opendaylight.neutron.spi.INeutronPortCRUD;
37 import org.opendaylight.neutron.spi.INeutronSubnetCRUD;
38 import org.opendaylight.neutron.spi.NeutronLoadBalancer;
39 import org.opendaylight.neutron.spi.NeutronLoadBalancerPool;
40 import org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember;
41 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
42 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerConfiguration;
43 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerConfiguration.LoadBalancerPoolMember;
44 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerProvider;
45 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
47 import org.powermock.api.mockito.PowerMockito;
48 import org.powermock.core.classloader.annotations.PrepareForTest;
49 import org.powermock.modules.junit4.PowerMockRunner;
50
51 /**
52  * Unit test for {@link LBaaSPoolMemberHandler}
53  */
54 /* TODO SB_MIGRATION */ @Ignore
55 @PrepareForTest(NeutronCacheUtils.class)
56 @RunWith(PowerMockRunner.class)
57 public class LBaaSPoolMemberHandlerTest {
58
59     @InjectMocks LBaaSPoolMemberHandler lBaaSPoolMemberHandler;
60
61     @Mock private INeutronLoadBalancerPoolCRUD neutronLBPoolCache;
62     @Mock private INeutronLoadBalancerCRUD neutronLBCache;
63     @Mock private LoadBalancerProvider loadBalancerProvider;
64     @Mock private NodeCacheManager nodeCacheManager;
65
66     private NeutronLoadBalancerPoolMember neutronLBMember;
67
68     @Before
69     public void setUp() {
70         neutronLBMember = mock(NeutronLoadBalancerPoolMember.class);
71         when(neutronLBMember.getPoolMemberID()).thenReturn("pool_memberID");
72         when(neutronLBMember.getPoolMemberAddress()).thenReturn("pool_member_address");
73         when(neutronLBMember.getPoolMemberSubnetID()).thenReturn("pool_member_subnetID");
74         when(neutronLBMember.getPoolMemberProtoPort()).thenReturn(1);
75         when(neutronLBMember.getPoolID()).thenReturn("poolID");
76
77         Map.Entry<String,String> providerInfo = mock(Entry.class);
78         when(providerInfo.getKey()).thenReturn("key");
79         when(providerInfo.getValue()).thenReturn("value");
80
81         PowerMockito.mockStatic(NeutronCacheUtils.class);
82         when(NeutronCacheUtils.getMacAddress(any(INeutronPortCRUD.class), anyString(), anyString())).thenReturn("mac_address");
83         when(NeutronCacheUtils.getProviderInformation(any(INeutronNetworkCRUD.class), any(INeutronSubnetCRUD.class), anyString())).thenReturn(providerInfo);
84
85         List<NeutronLoadBalancerPoolMember> members = new ArrayList();
86         NeutronLoadBalancerPoolMember neutronLBPoolMember = mock(NeutronLoadBalancerPoolMember.class);
87         when(neutronLBPoolMember.getPoolMemberAdminStateIsUp()).thenReturn(true);
88         when(neutronLBPoolMember.getPoolMemberSubnetID()).thenReturn("subnetID");
89         when(neutronLBPoolMember.getPoolMemberID()).thenReturn("pool_memberID1");
90         when(neutronLBPoolMember.getPoolMemberProtoPort()).thenReturn(1);
91         members.add(neutronLBPoolMember);
92
93         NeutronLoadBalancerPool neutronLBPool = mock(NeutronLoadBalancerPool.class);
94         when(neutronLBPool.getLoadBalancerPoolProtocol()).thenReturn(LoadBalancerConfiguration.PROTOCOL_TCP);
95         when(neutronLBPool.getLoadBalancerPoolMembers()).thenReturn(members);
96         when(neutronLBPoolCache.getNeutronLoadBalancerPool(anyString())).thenReturn(neutronLBPool);
97
98         List<NeutronLoadBalancer> list_neutronLB = new ArrayList();
99         NeutronLoadBalancer neutronLB = mock(NeutronLoadBalancer.class);
100         when(neutronLB.getLoadBalancerName()).thenReturn("load_balancer_name");
101         when(neutronLB.getLoadBalancerVipAddress()).thenReturn("vip_address");
102         when(neutronLB.getLoadBalancerVipSubnetID()).thenReturn("subnetID");
103         list_neutronLB.add(neutronLB);
104         when(neutronLBCache.getAllNeutronLoadBalancers()).thenReturn(list_neutronLB);
105     }
106
107     /**
108      * Test method {@link LBaaSPoolMemberHandler#canCreateNeutronLoadBalancerPoolMember(NeutronLoadBalancerPoolMember)}
109      */
110     @Test
111     public void testCanCreateNeutronLoadBalancerPoolMember() {
112         when(neutronLBMember.getPoolID())
113                                     .thenReturn(null)  // to test HTTP_BAD_REQUEST
114                                     .thenReturn("poolID"); // to test HTTP_OK
115
116         Map.Entry<String,String> providerInfo = mock(Entry.class);
117         when(providerInfo.getKey()).thenReturn("key");
118         when(providerInfo.getValue()).thenReturn("value");
119         when(NeutronCacheUtils.getProviderInformation(any(INeutronNetworkCRUD.class), any(INeutronSubnetCRUD.class), anyString()))
120                                     .thenReturn(providerInfo)
121                                     .thenReturn(null); // to test HTTP_NOT_ACCEPTABLE
122
123
124         assertEquals("Error, canCreateNeutronLoadBalancerPoolMember() didn't return the correct HTTP flag", HttpURLConnection.HTTP_BAD_REQUEST, lBaaSPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(neutronLBMember));
125         assertEquals("Error, canCreateNeutronLoadBalancerPoolMember() didn't return the correct HTTP flag", HttpURLConnection.HTTP_OK, lBaaSPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(neutronLBMember));
126         assertEquals("Error, canCreateNeutronLoadBalancerPoolMember() didn't return the correct HTTP flag", HttpURLConnection.HTTP_NOT_ACCEPTABLE, lBaaSPoolMemberHandler.canCreateNeutronLoadBalancerPoolMember(neutronLBMember));
127     }
128
129     /**
130      * Test method {@link LBaaSPoolMemberHandler#canUpdateNeutronLoadBalancerPoolMember(NeutronLoadBalancerPoolMember, NeutronLoadBalancerPoolMember)}
131      */
132     @Test
133     public void testCanUpdateNeutronLoadBalancerPoolMember() {
134         assertEquals("Error, did not return the correct HTTP flag", HttpURLConnection.HTTP_NOT_IMPLEMENTED, lBaaSPoolMemberHandler.canUpdateNeutronLoadBalancerPoolMember(any(NeutronLoadBalancerPoolMember.class), any(NeutronLoadBalancerPoolMember.class)));
135     }
136
137     /**
138      * Test method {@link LBaaSPoolMemberHandler#canDeleteNeutronLoadBalancerPoolMember(NeutronLoadBalancerPoolMember)}
139      */
140     @Test
141     public void testCanDeleteNeutronLoadBalancerPoolMember() {
142         when(neutronLBMember.getPoolID())
143                                     .thenReturn(null)  // to test HTTP_BAD_REQUEST
144                                     .thenReturn("poolID"); // to test HTTP_OK
145
146         Map.Entry<String,String> providerInfo = mock(Entry.class);
147         when(providerInfo.getKey()).thenReturn("key");
148         when(providerInfo.getValue()).thenReturn("value");
149         when(NeutronCacheUtils.getProviderInformation(any(INeutronNetworkCRUD.class), any(INeutronSubnetCRUD.class), anyString()))
150                                     .thenReturn(providerInfo)
151                                     .thenReturn(null); // to test HTTP_NOT_ACCEPTABLE
152
153
154         assertEquals("Error, canDeleteNeutronLoadBalancerPoolMember() didn't return the correct HTTP flag", HttpURLConnection.HTTP_BAD_REQUEST, lBaaSPoolMemberHandler.canDeleteNeutronLoadBalancerPoolMember(neutronLBMember));
155         assertEquals("Error, canDeleteNeutronLoadBalancerPoolMember() didn't return the correct HTTP flag", HttpURLConnection.HTTP_OK, lBaaSPoolMemberHandler.canDeleteNeutronLoadBalancerPoolMember(neutronLBMember));
156         assertEquals("Error, canDeleteNeutronLoadBalancerPoolMember() didn't return the correct HTTP flag", HttpURLConnection.HTTP_NOT_ACCEPTABLE, lBaaSPoolMemberHandler.canDeleteNeutronLoadBalancerPoolMember(neutronLBMember));
157     }
158
159     /**
160      * Test method {@link LBaaSPoolMemberHandler#processEvent(AbstractEvent)}
161      */
162     @Test
163     public void testProcessEvent(){
164         LBaaSPoolMemberHandler lbaasPoolMemberHandlerSpy = Mockito.spy(lBaaSPoolMemberHandler);
165
166         NorthboundEvent ev = mock(NorthboundEvent.class);
167         when(ev.getLoadBalancerPoolMember()).thenReturn(neutronLBMember);
168
169         List<Node> list_node = new ArrayList();
170         list_node .add(mock(Node.class));
171         when(nodeCacheManager.getNodes()).thenReturn(list_node);
172
173         when(ev.getAction()).thenReturn(Action.ADD);
174         lbaasPoolMemberHandlerSpy.processEvent(ev);
175         verify(lbaasPoolMemberHandlerSpy, times(1)).extractLBConfiguration(any(NeutronLoadBalancerPoolMember.class));
176
177         when(ev.getAction()).thenReturn(Action.DELETE);
178         lbaasPoolMemberHandlerSpy.processEvent(ev);
179         verify(lbaasPoolMemberHandlerSpy, times(2)).extractLBConfiguration(any(NeutronLoadBalancerPoolMember.class)); // 1 + 1 above
180
181         when(ev.getAction()).thenReturn(Action.UPDATE);
182         lbaasPoolMemberHandlerSpy.processEvent(ev);
183         verify(lbaasPoolMemberHandlerSpy, times(2)).extractLBConfiguration(any(NeutronLoadBalancerPoolMember.class)); // same as before as nothing as been done
184     }
185
186     /**
187      * Test method {@link LBaaSPoolMemberHandler#extractLBConfiguration(NeutronLoadBalancerPoolMember)}
188      */
189     @Test
190     public void testExtractLBConfiguration() {
191         LoadBalancerConfiguration lbConfig = lBaaSPoolMemberHandler.extractLBConfiguration(neutronLBMember);
192
193         verify(neutronLBPoolCache, times(1)).getNeutronLoadBalancerPool(anyString());
194         verify(neutronLBCache, times(1)).getAllNeutronLoadBalancers();
195
196         // make sure the load balancer configuration was correctly populated
197         assertEquals("Error, did not return the correct value",  "key", lbConfig.getProviderNetworkType());
198         assertEquals("Error, did not return the correct value",  "value", lbConfig.getProviderSegmentationId());
199         assertEquals("Error, did not return the correct value",  "mac_address", lbConfig.getVmac());
200
201         // make sure the load balancer pool member was correctly populated
202         LoadBalancerPoolMember member = lbConfig.getMembers().get("pool_memberID");
203         assertEquals("Error, did not return the correct value",  "pool_member_address", member.getIP());
204         assertEquals("Error, did not return the correct value",  "mac_address", member.getMAC());
205         assertEquals("Error, did not return the correct value",  LoadBalancerConfiguration.PROTOCOL_TCP, member.getProtocol());
206         assertTrue("Error, did not return the correct value",  1 ==  member.getPort());
207     }
208 }