Skip to content

Commit 3bf7459

Browse files
committed
SSL offloading: more unit tests 3
1 parent 8ebe9b1 commit 3bf7459

File tree

3 files changed

+119
-4
lines changed

3 files changed

+119
-4
lines changed

core/src/test/java/com/cloud/agent/resource/virtualnetwork/model/LoadBalancerRuleTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,24 @@ public void testSslCertEntry() {
3636
Assert.assertEquals(chain, sslCertEntry.getChain());
3737
Assert.assertEquals(password, sslCertEntry.getPassword());
3838

39+
String name2 = "name2";
40+
String cert2 = "cert2";
41+
String key2 = "key2";
42+
String chain2 = "chain2";
43+
String password2 = "password2";
44+
45+
sslCertEntry.setName(name2);
46+
sslCertEntry.setCert(cert2);
47+
sslCertEntry.setKey(key2);
48+
sslCertEntry.setChain(chain2);
49+
sslCertEntry.setPassword(password2);
50+
51+
Assert.assertEquals(name2, sslCertEntry.getName());
52+
Assert.assertEquals(cert2, sslCertEntry.getCert());
53+
Assert.assertEquals(key2, sslCertEntry.getKey());
54+
Assert.assertEquals(chain2, sslCertEntry.getChain());
55+
Assert.assertEquals(password2, sslCertEntry.getPassword());
56+
3957
LoadBalancerRule loadBalancerRule = new LoadBalancerRule();
4058
loadBalancerRule.setSslCerts(new LoadBalancerRule.SslCertEntry[]{sslCertEntry});
4159

server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1996,7 +1996,7 @@ protected boolean applyLbRules(Network network, List<LoadBalancingRule> rules) t
19961996
return handled;
19971997
}
19981998

1999-
private LoadBalancingRule getLoadBalancerRuleToApply(LoadBalancerVO lb) {
1999+
protected LoadBalancingRule getLoadBalancerRuleToApply(LoadBalancerVO lb) {
20002000

20012001
List<LbStickinessPolicy> policyList = getStickinessPolicies(lb.getId());
20022002
Ip sourceIp = getSourceIp(lb);
@@ -2268,7 +2268,7 @@ public LoadBalancer updateLoadBalancerRule(UpdateLoadBalancerRuleCmd cmd) {
22682268

22692269
// If algorithm or lb protocol is changed, have to reapply the lb config
22702270
boolean needToReApplyRule = (algorithm != null && algorithm.equals(tmplbVo.getAlgorithm()))
2271-
|| (lbProtocol != null && lbProtocol.equals(tmplbVo.getLbProtocol()));
2271+
|| (lbProtocol != null && !lbProtocol.equals(tmplbVo.getLbProtocol()));
22722272
if (needToReApplyRule) {
22732273
try {
22742274
lb.setState(FirewallRule.State.Add);

server/src/test/java/com/cloud/network/lb/LoadBalancingRulesManagerImplTest.java

Lines changed: 99 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.cloud.network.dao.NetworkDao;
2727
import com.cloud.network.dao.NetworkVO;
2828
import com.cloud.network.dao.SslCertVO;
29+
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
2930
import com.cloud.user.Account;
3031
import com.cloud.user.AccountManager;
3132
import com.cloud.user.AccountVO;
@@ -35,7 +36,9 @@
3536
import com.cloud.utils.exception.CloudRuntimeException;
3637
import com.cloud.utils.net.NetUtils;
3738
import org.apache.cloudstack.acl.SecurityChecker;
39+
import org.apache.cloudstack.api.ApiConstants;
3840
import org.apache.cloudstack.api.ServerApiException;
41+
import org.apache.cloudstack.api.command.user.loadbalancer.UpdateLoadBalancerRuleCmd;
3942
import org.apache.cloudstack.context.CallContext;
4043
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
4144
import org.junit.Assert;
@@ -46,12 +49,16 @@
4649
import org.mockito.Mockito;
4750
import org.mockito.Spy;
4851
import org.mockito.junit.MockitoJUnitRunner;
52+
import org.springframework.test.util.ReflectionTestUtils;
4953

5054
import java.util.ArrayList;
5155
import java.util.Arrays;
5256
import java.util.List;
5357
import 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;
5562
import 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

Comments
 (0)