2626import com .cloud .network .dao .NetworkDao ;
2727import com .cloud .network .dao .NetworkVO ;
2828import com .cloud .network .dao .SslCertVO ;
29+ import com .cloud .offerings .dao .NetworkOfferingServiceMapDao ;
2930import com .cloud .user .Account ;
3031import com .cloud .user .AccountManager ;
3132import com .cloud .user .AccountVO ;
3536import com .cloud .utils .exception .CloudRuntimeException ;
3637import com .cloud .utils .net .NetUtils ;
3738import org .apache .cloudstack .acl .SecurityChecker ;
39+ import org .apache .cloudstack .api .ApiConstants ;
3840import org .apache .cloudstack .api .ServerApiException ;
41+ import org .apache .cloudstack .api .command .user .loadbalancer .UpdateLoadBalancerRuleCmd ;
3942import org .apache .cloudstack .context .CallContext ;
4043import org .apache .cloudstack .engine .orchestration .service .NetworkOrchestrationService ;
4144import org .junit .Assert ;
4649import org .mockito .Mockito ;
4750import org .mockito .Spy ;
4851import org .mockito .junit .MockitoJUnitRunner ;
52+ import org .springframework .test .util .ReflectionTestUtils ;
4953
5054import java .util .ArrayList ;
5155import java .util .Arrays ;
5256import java .util .List ;
5357import java .util .UUID ;
5458
59+ import static org .mockito .ArgumentMatchers .anyLong ;
60+ import static org .mockito .Mockito .never ;
61+ import static org .mockito .Mockito .times ;
5562import static org .mockito .Mockito .when ;
5663
5764@ RunWith (MockitoJUnitRunner .class )
@@ -78,6 +85,9 @@ public class LoadBalancingRulesManagerImplTest{
7885 @ Mock
7986 LoadBalancerCertMapDao _lbCertMapDao ;
8087
88+ @ Mock
89+ NetworkOfferingServiceMapDao _networkOfferingServiceDao ;
90+
8191 @ Spy
8292 @ InjectMocks
8393 LoadBalancingRulesManagerImpl lbr = new LoadBalancingRulesManagerImpl ();
@@ -113,7 +123,7 @@ public void testGetLoadBalancerServiceProvider() {
113123 List <Network .Provider > providers = Arrays .asList (Network .Provider .VirtualRouter );
114124
115125 when (loadBalancerMock .getNetworkId ()).thenReturn (10L );
116- when (_networkDao .findById (Mockito . anyLong ())).thenReturn (networkMock );
126+ when (_networkDao .findById (anyLong ())).thenReturn (networkMock );
117127 when (_networkMgr .getProvidersForServiceInNetwork (networkMock , Network .Service .Lb )).thenReturn (providers );
118128
119129 Network .Provider provider = lbr .getLoadBalancerServiceProvider (loadBalancerMock );
@@ -133,7 +143,7 @@ public void testGetLoadBalancerServiceProviderFail() {
133143 }
134144
135145 @ Test
136- public void testAssignCertToLoadBalancer () throws Exception {
146+ public void testAssignCertToLoadBalancer () throws Exception {
137147 long accountId = 10L ;
138148 long lbRuleId = 2L ;
139149 long certId = 3L ;
@@ -166,5 +176,92 @@ public void testAssignCertToLoadBalancer() throws Exception{
166176
167177 lbr .assignCertToLoadBalancer (lbRuleId , certId , true );
168178
179+ Mockito .verify (lbr , times (2 )).applyLoadBalancerConfig (lbRuleId );
180+ }
181+
182+ @ Test
183+ public void testUpdateLoadBalancerRule1 () throws Exception {
184+ long accountId = 10L ;
185+ long lbRuleId = 2L ;
186+ long certMapRuleId = 3L ;
187+ long networkId = 4L ;
188+
189+ AccountVO account = new AccountVO ("testaccount" , 1L , "networkdomain" , Account .Type .NORMAL , "uuid" );
190+ account .setId (accountId );
191+ UserVO user = new UserVO (1 , "testuser" , "password" , "firstname" , "lastName" , "email" , "timezone" ,
192+ UUID .randomUUID ().toString (), User .Source .UNKNOWN );
193+ CallContext .register (user , account );
194+
195+ LoadBalancerVO loadBalancerMock = Mockito .mock (LoadBalancerVO .class );
196+ when (_lbDao .findById (lbRuleId )).thenReturn (loadBalancerMock );
197+ when (loadBalancerMock .getNetworkId ()).thenReturn (networkId );
198+
199+ NetworkVO network = Mockito .mock (NetworkVO .class );
200+ when (_networkDao .findById (networkId )).thenReturn (network );
201+
202+ Mockito .doNothing ().when (_accountMgr ).checkAccess (Mockito .any (Account .class ), Mockito .isNull (SecurityChecker .AccessType .class ), Mockito .eq (true ), Mockito .any (LoadBalancerVO .class ));
203+
204+ LoadBalancingRule loadBalancingRule = Mockito .mock (LoadBalancingRule .class );
205+ Mockito .doReturn (loadBalancingRule ).when (lbr ).getLoadBalancerRuleToApply (loadBalancerMock );
206+ Mockito .doReturn (true ).when (lbr ).validateLbRule (loadBalancingRule );
207+ Mockito .doReturn (true ).when (lbr ).applyLoadBalancerConfig (lbRuleId );
208+
209+ when (_lbDao .update (lbRuleId , loadBalancerMock )).thenReturn (true );
210+
211+ // Replace TCP with SSL
212+ UpdateLoadBalancerRuleCmd cmd = new UpdateLoadBalancerRuleCmd ();
213+ ReflectionTestUtils .setField (cmd , ApiConstants .ID , lbRuleId );
214+ ReflectionTestUtils .setField (cmd , "lbProtocol" , NetUtils .SSL_PROTO );
215+ when (loadBalancerMock .getLbProtocol ()).thenReturn (NetUtils .TCP_PROTO ).thenReturn (NetUtils .SSL_PROTO );
216+
217+ lbr .updateLoadBalancerRule (cmd );
218+
219+ Mockito .verify (lbr , times (1 )).applyLoadBalancerConfig (lbRuleId );
220+ Mockito .verify (_lbCertMapDao , never ()).remove (anyLong ());
221+ }
222+
223+ @ Test
224+ public void testUpdateLoadBalancerRule2 () throws Exception {
225+ long accountId = 10L ;
226+ long lbRuleId = 2L ;
227+ long certMapRuleId = 3L ;
228+ long networkId = 4L ;
229+
230+ AccountVO account = new AccountVO ("testaccount" , 1L , "networkdomain" , Account .Type .NORMAL , "uuid" );
231+ account .setId (accountId );
232+ UserVO user = new UserVO (1 , "testuser" , "password" , "firstname" , "lastName" , "email" , "timezone" ,
233+ UUID .randomUUID ().toString (), User .Source .UNKNOWN );
234+ CallContext .register (user , account );
235+
236+ LoadBalancerVO loadBalancerMock = Mockito .mock (LoadBalancerVO .class );
237+ when (_lbDao .findById (lbRuleId )).thenReturn (loadBalancerMock );
238+ when (loadBalancerMock .getId ()).thenReturn (lbRuleId );
239+ when (loadBalancerMock .getNetworkId ()).thenReturn (networkId );
240+
241+ NetworkVO network = Mockito .mock (NetworkVO .class );
242+ when (_networkDao .findById (networkId )).thenReturn (network );
243+
244+ Mockito .doNothing ().when (_accountMgr ).checkAccess (Mockito .any (Account .class ), Mockito .isNull (SecurityChecker .AccessType .class ), Mockito .eq (true ), Mockito .any (LoadBalancerVO .class ));
245+
246+ LoadBalancingRule loadBalancingRule = Mockito .mock (LoadBalancingRule .class );
247+ Mockito .doReturn (loadBalancingRule ).when (lbr ).getLoadBalancerRuleToApply (loadBalancerMock );
248+ Mockito .doReturn (true ).when (lbr ).validateLbRule (loadBalancingRule );
249+ Mockito .doReturn (true ).when (lbr ).applyLoadBalancerConfig (lbRuleId );
250+
251+ when (_lbDao .update (lbRuleId , loadBalancerMock )).thenReturn (true );
252+
253+ // Replace SSL with TCP
254+ UpdateLoadBalancerRuleCmd cmd = new UpdateLoadBalancerRuleCmd ();
255+ ReflectionTestUtils .setField (cmd , ApiConstants .ID , lbRuleId );
256+ ReflectionTestUtils .setField (cmd , "lbProtocol" , NetUtils .TCP_PROTO );
257+ LoadBalancerCertMapVO certMapRule = Mockito .mock (LoadBalancerCertMapVO .class );
258+ when (_lbCertMapDao .findByLbRuleId (lbRuleId )).thenReturn (certMapRule );
259+ when (certMapRule .getId ()).thenReturn (certMapRuleId );
260+ when (loadBalancerMock .getLbProtocol ()).thenReturn (NetUtils .SSL_PROTO ).thenReturn (NetUtils .TCP_PROTO );
261+
262+ lbr .updateLoadBalancerRule (cmd );
263+
264+ Mockito .verify (_lbCertMapDao , times (1 )).remove (anyLong ());
265+ Mockito .verify (lbr , times (1 )).applyLoadBalancerConfig (lbRuleId );
169266 }
170267}
0 commit comments