Skip to content

Commit 8ebe9b1

Browse files
committed
SSL offloading: add more unit tests
1 parent 0599cf6 commit 8ebe9b1

File tree

5 files changed

+137
-2
lines changed

5 files changed

+137
-2
lines changed

core/src/main/java/com/cloud/network/HAProxyConfigurator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,7 @@ public String[][] generateFwRules(final LoadBalancerConfigCommand lbCmd) {
731731

732732
@Override
733733
public SslCertEntry[] generateSslCertEntries(LoadBalancerConfigCommand lbCmd) {
734-
final Set<SslCertEntry> sslCertEntries = new HashSet<SslCertEntry>();
734+
final Set<SslCertEntry> sslCertEntries = new HashSet<>();
735735
for (final LoadBalancerTO lbTO : lbCmd.getLoadBalancers()) {
736736
if (lbTO.getSslCert() != null) {
737737
addSslCertEntry(sslCertEntries, lbTO);
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
package com.cloud.agent.resource.virtualnetwork.model;
18+
19+
import org.junit.Assert;
20+
import org.junit.Test;
21+
22+
public class LoadBalancerRuleTest {
23+
24+
@Test
25+
public void testSslCertEntry() {
26+
String name = "name";
27+
String cert = "cert";
28+
String key = "key1";
29+
String chain = "chain";
30+
String password = "password";
31+
LoadBalancerRule.SslCertEntry sslCertEntry = new LoadBalancerRule.SslCertEntry(name, cert, key, chain, password);
32+
33+
Assert.assertEquals(name, sslCertEntry.getName());
34+
Assert.assertEquals(cert, sslCertEntry.getCert());
35+
Assert.assertEquals(key, sslCertEntry.getKey());
36+
Assert.assertEquals(chain, sslCertEntry.getChain());
37+
Assert.assertEquals(password, sslCertEntry.getPassword());
38+
39+
LoadBalancerRule loadBalancerRule = new LoadBalancerRule();
40+
loadBalancerRule.setSslCerts(new LoadBalancerRule.SslCertEntry[]{sslCertEntry});
41+
42+
Assert.assertEquals(1, loadBalancerRule.getSslCerts().length);
43+
Assert.assertEquals(sslCertEntry, loadBalancerRule.getSslCerts()[0]);
44+
}
45+
}

server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1762,7 +1762,7 @@ private void updateWithLbRules(final DomainRouterJoinVO routerJoinVO, final Stri
17621762
}
17631763
}
17641764

1765-
private void updateWithLbRuleSslCertificates(final StringBuilder loadBalancingData, LoadBalancerVO loadBalancerVO, String sourceIp) {
1765+
protected void updateWithLbRuleSslCertificates(final StringBuilder loadBalancingData, LoadBalancerVO loadBalancerVO, String sourceIp) {
17661766
if (NetUtils.SSL_PROTO.equals(loadBalancerVO.getLbProtocol())) {
17671767
final LbSslCert sslCert = _lbMgr.getLbSslCert(loadBalancerVO.getId());
17681768
if (sslCert != null && ! sslCert.isRevoked()) {

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

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,25 @@
1818
package com.cloud.network.lb;
1919

2020
import com.cloud.network.Network;
21+
import com.cloud.network.NetworkModel;
22+
import com.cloud.network.dao.LoadBalancerCertMapDao;
23+
import com.cloud.network.dao.LoadBalancerCertMapVO;
24+
import com.cloud.network.dao.LoadBalancerDao;
2125
import com.cloud.network.dao.LoadBalancerVO;
2226
import com.cloud.network.dao.NetworkDao;
2327
import com.cloud.network.dao.NetworkVO;
28+
import com.cloud.network.dao.SslCertVO;
29+
import com.cloud.user.Account;
30+
import com.cloud.user.AccountManager;
31+
import com.cloud.user.AccountVO;
32+
import com.cloud.user.User;
33+
import com.cloud.user.UserVO;
34+
import com.cloud.utils.db.EntityManager;
2435
import com.cloud.utils.exception.CloudRuntimeException;
36+
import com.cloud.utils.net.NetUtils;
37+
import org.apache.cloudstack.acl.SecurityChecker;
2538
import org.apache.cloudstack.api.ServerApiException;
39+
import org.apache.cloudstack.context.CallContext;
2640
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
2741
import org.junit.Assert;
2842
import org.junit.Test;
@@ -36,6 +50,7 @@
3650
import java.util.ArrayList;
3751
import java.util.Arrays;
3852
import java.util.List;
53+
import java.util.UUID;
3954

4055
import static org.mockito.Mockito.when;
4156

@@ -48,6 +63,21 @@ public class LoadBalancingRulesManagerImplTest{
4863
@Mock
4964
NetworkOrchestrationService _networkMgr;
5065

66+
@Mock
67+
LoadBalancerDao _lbDao;
68+
69+
@Mock
70+
EntityManager _entityMgr;
71+
72+
@Mock
73+
AccountManager _accountMgr;
74+
75+
@Mock
76+
NetworkModel _networkModel;
77+
78+
@Mock
79+
LoadBalancerCertMapDao _lbCertMapDao;
80+
5181
@Spy
5282
@InjectMocks
5383
LoadBalancingRulesManagerImpl lbr = new LoadBalancingRulesManagerImpl();
@@ -101,4 +131,40 @@ public void testGetLoadBalancerServiceProviderFail() {
101131

102132
Network.Provider provider = lbr.getLoadBalancerServiceProvider(loadBalancerMock);
103133
}
134+
135+
@Test
136+
public void testAssignCertToLoadBalancer() throws Exception{
137+
long accountId = 10L;
138+
long lbRuleId = 2L;
139+
long certId = 3L;
140+
long networkId = 4L;
141+
142+
AccountVO account = new AccountVO("testaccount", 1L, "networkdomain", Account.Type.NORMAL, "uuid");
143+
account.setId(accountId);
144+
UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone",
145+
UUID.randomUUID().toString(), User.Source.UNKNOWN);
146+
CallContext.register(user, account);
147+
148+
LoadBalancerVO loadBalancerMock = Mockito.mock(LoadBalancerVO.class);
149+
when(_lbDao.findById(lbRuleId)).thenReturn(loadBalancerMock);
150+
when(loadBalancerMock.getId()).thenReturn(lbRuleId);
151+
when(loadBalancerMock.getAccountId()).thenReturn(accountId);
152+
when(loadBalancerMock.getNetworkId()).thenReturn(networkId);
153+
when(loadBalancerMock.getLbProtocol()).thenReturn(NetUtils.SSL_PROTO);
154+
155+
SslCertVO certVO = Mockito.mock(SslCertVO.class);
156+
when(_entityMgr.findById(SslCertVO.class, certId)).thenReturn(certVO);
157+
when(certVO.getAccountId()).thenReturn(accountId);
158+
159+
LoadBalancerCertMapVO certMapRule = Mockito.mock(LoadBalancerCertMapVO.class);
160+
when(_lbCertMapDao.findByLbRuleId(lbRuleId)).thenReturn(certMapRule);
161+
162+
Mockito.doNothing().when(_accountMgr).checkAccess(Mockito.any(Account.class), Mockito.isNull(SecurityChecker.AccessType.class), Mockito.eq(true), Mockito.any(LoadBalancerVO.class));
163+
164+
Mockito.doReturn("LB").when(lbr).getLBCapability(networkId, Network.Capability.SslTermination.getName());
165+
Mockito.doReturn(true).when(lbr).applyLoadBalancerConfig(lbRuleId);
166+
167+
lbr.assignCertToLoadBalancer(lbRuleId, certId, true);
168+
169+
}
104170
}

server/src/test/java/com/cloud/network/router/VirtualNetworkApplianceManagerImplTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.cloud.network.dao.IPAddressDao;
4141
import com.cloud.network.dao.LoadBalancerDao;
4242
import com.cloud.network.dao.LoadBalancerVMMapDao;
43+
import com.cloud.network.dao.LoadBalancerVO;
4344
import com.cloud.network.dao.MonitoringServiceDao;
4445
import com.cloud.network.dao.NetworkDao;
4546
import com.cloud.network.dao.NetworkVO;
@@ -54,6 +55,8 @@
5455
import com.cloud.network.dao.UserIpv6AddressDao;
5556
import com.cloud.network.dao.VirtualRouterProviderDao;
5657
import com.cloud.network.dao.VpnUserDao;
58+
import com.cloud.network.lb.LoadBalancingRule;
59+
import com.cloud.network.lb.LoadBalancingRulesManager;
5760
import com.cloud.network.rules.dao.PortForwardingRulesDao;
5861
import com.cloud.network.vpc.VpcVO;
5962
import com.cloud.network.vpc.dao.VpcDao;
@@ -67,6 +70,7 @@
6770
import com.cloud.user.dao.UserDao;
6871
import com.cloud.user.dao.UserStatisticsDao;
6972
import com.cloud.user.dao.UserStatsLogDao;
73+
import com.cloud.utils.net.NetUtils;
7074
import com.cloud.vm.DomainRouterVO;
7175
import com.cloud.vm.VirtualMachine;
7276
import com.cloud.vm.VirtualMachineManager;
@@ -259,6 +263,9 @@ public class VirtualNetworkApplianceManagerImplTest {
259263
@Mock
260264
private BGPService bgpService;
261265

266+
@Mock
267+
private LoadBalancingRulesManager _lbMgr;
268+
262269
// @InjectMocks
263270
// private VirtualNetworkApplianceManagerImpl virtualNetworkApplianceManagerImpl;
264271

@@ -391,4 +398,21 @@ public void testFinalizeNetworkRulesForVpcNetwork() {
391398

392399
Mockito.verify(_commandSetupHelper).createBgpPeersCommands(bgpPeers, router, cmds, network);
393400
}
401+
402+
@Test
403+
public void testUpdateWithLbRuleSslCertificates() {
404+
StringBuilder loadBalancingData = new StringBuilder();
405+
LoadBalancerVO loadBalancer = Mockito.mock(LoadBalancerVO.class);
406+
when(loadBalancer.getLbProtocol()).thenReturn(NetUtils.SSL_PROTO);
407+
when(loadBalancer.getId()).thenReturn(1L);
408+
when(loadBalancer.getSourcePortStart()).thenReturn(443);
409+
LoadBalancingRule.LbSslCert lbSslCert = Mockito.mock(LoadBalancingRule.LbSslCert.class);
410+
when(lbSslCert.isRevoked()).thenReturn(false);
411+
when(_lbMgr.getLbSslCert(1L)).thenReturn(lbSslCert);
412+
String sourceIp = "1.2.3.4";
413+
414+
virtualNetworkApplianceManagerImpl.updateWithLbRuleSslCertificates(loadBalancingData, loadBalancer, sourceIp);
415+
416+
Assert.assertEquals(",sslcert=1_2_3_4-443.pem", loadBalancingData.toString());
417+
}
394418
}

0 commit comments

Comments
 (0)