mirror of
https://github.com/ctripcorp/zeus.git
synced 2024-09-22 00:26:05 +08:00
add test case
This commit is contained in:
parent
490d6fbd31
commit
606cd74263
|
@ -281,7 +281,7 @@ public class OperationResource {
|
||||||
if (domain == null || domain.isEmpty()) {
|
if (domain == null || domain.isEmpty()) {
|
||||||
throw new ValidationException("Domain info is required.");
|
throw new ValidationException("Domain info is required.");
|
||||||
}
|
}
|
||||||
String[] domainMembers = domain.split("|");
|
String[] domainMembers = domain.split("\\|");
|
||||||
Arrays.sort(domainMembers);
|
Arrays.sort(domainMembers);
|
||||||
domain = Joiner.on("|").join(domainMembers);
|
domain = Joiner.on("|").join(domainMembers);
|
||||||
|
|
||||||
|
@ -313,11 +313,11 @@ public class OperationResource {
|
||||||
boolean grayscale = ips == null;
|
boolean grayscale = ips == null;
|
||||||
ips = configureIps(vsId, ips);
|
ips = configureIps(vsId, ips);
|
||||||
|
|
||||||
String[] domainMembers = domain.split("|");
|
String[] domainMembers = domain.split("\\|");
|
||||||
Arrays.sort(domainMembers);
|
Arrays.sort(domainMembers);
|
||||||
domain = Joiner.on("|").join(domainMembers);
|
domain = Joiner.on("|").join(domainMembers);
|
||||||
|
|
||||||
Long certId = certificateService.upload(cert, key, domain,
|
Long certId = certificateService.uploadByReplace(cert, key, domain,
|
||||||
grayscale ? CertificateConfig.GRAYSCALE : CertificateConfig.ONBOARD);
|
grayscale ? CertificateConfig.GRAYSCALE : CertificateConfig.ONBOARD);
|
||||||
return responseHandler.handle("Certificate uploaded. New cert-id is " + certId + ". Contact slb team with the given cert-id to install the new certificate.", hh.getMediaType());
|
return responseHandler.handle("Certificate uploaded. New cert-id is " + certId + ". Contact slb team with the given cert-id to install the new certificate.", hh.getMediaType());
|
||||||
// certificateService.command(vsId, ips, certId);
|
// certificateService.command(vsId, ips, certId);
|
||||||
|
|
|
@ -19,6 +19,8 @@ public interface VirtualServerRepository {
|
||||||
|
|
||||||
void deleteVirtualServer(Long virtualServerId) throws Exception;
|
void deleteVirtualServer(Long virtualServerId) throws Exception;
|
||||||
|
|
||||||
|
void installCertificate(VirtualServer virtualServer) throws Exception;
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
List<Long> portVirtualServerRel() throws Exception;
|
List<Long> portVirtualServerRel() throws Exception;
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,12 @@ public class SlbRepositoryImpl implements SlbRepository {
|
||||||
autoFiller.autofill(slb);
|
autoFiller.autofill(slb);
|
||||||
slbEntityManager.add(slb);
|
slbEntityManager.add(slb);
|
||||||
|
|
||||||
|
for (VirtualServer virtualServer : slb.getVirtualServers()) {
|
||||||
|
if (virtualServer.getSsl().booleanValue()) {
|
||||||
|
virtualServerRepository.installCertificate(virtualServer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (SlbServer slbServer : slb.getSlbServers()) {
|
for (SlbServer slbServer : slb.getSlbServers()) {
|
||||||
nginxServerDao.insert(new NginxServerDo()
|
nginxServerDao.insert(new NginxServerDo()
|
||||||
.setIp(slbServer.getIp())
|
.setIp(slbServer.getIp())
|
||||||
|
|
|
@ -124,7 +124,8 @@ public class VirtualServerRepositoryImpl implements VirtualServerRepository {
|
||||||
virtualServerEntityManager.port(vs);
|
virtualServerEntityManager.port(vs);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void installCertificate(VirtualServer virtualServer) throws Exception {
|
@Override
|
||||||
|
public void installCertificate(VirtualServer virtualServer) throws Exception {
|
||||||
List<String> ips = slbQuery.getSlbIps(virtualServer.getSlbId());
|
List<String> ips = slbQuery.getSlbIps(virtualServer.getSlbId());
|
||||||
List<Domain> vsDomains = virtualServer.getDomains();
|
List<Domain> vsDomains = virtualServer.getDomains();
|
||||||
String[] domains = new String[vsDomains.size()];
|
String[] domains = new String[vsDomains.size()];
|
||||||
|
|
|
@ -20,7 +20,16 @@ public class CertificateConfig {
|
||||||
return installDir + vsId;
|
return installDir + vsId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setInstallDir(String installDir) {
|
||||||
|
this.installDir = installDir;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean getWriteFileOption() {
|
public boolean getWriteFileOption() {
|
||||||
return writeFileOption;
|
return writeFileOption;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setWriteFileOption(boolean writeFileOption) {
|
||||||
|
this.writeFileOption = writeFileOption;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -13,6 +13,8 @@ public interface CertificateService {
|
||||||
|
|
||||||
Long upload(InputStream cert, InputStream key, String domain, boolean state) throws Exception;
|
Long upload(InputStream cert, InputStream key, String domain, boolean state) throws Exception;
|
||||||
|
|
||||||
|
Long uploadByReplace(InputStream cert, InputStream key, String domain, boolean state) throws Exception;
|
||||||
|
|
||||||
void command(Long vsId, List<String> ips, Long certId) throws Exception;
|
void command(Long vsId, List<String> ips, Long certId) throws Exception;
|
||||||
|
|
||||||
void recall(Long vsId, List<String> ips) throws Exception;
|
void recall(Long vsId, List<String> ips) throws Exception;
|
||||||
|
|
|
@ -60,8 +60,24 @@ public class CertificateServiceImpl implements CertificateService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long upload(InputStream cert, InputStream key, String domain, boolean state) throws Exception {
|
public Long upload(InputStream cert, InputStream key, String domain, boolean state) throws Exception {
|
||||||
|
if (cert == null || key == null)
|
||||||
|
throw new ValidationException("Cert or key file is null.");
|
||||||
|
List<CertificateDo> existing = certificateDao.findByDomainAndState(new String[]{domain}, state, CertificateEntity.READSET_FULL);
|
||||||
|
if (existing.size() > 0)
|
||||||
|
throw new ValidationException("Certificate exists.");
|
||||||
|
CertificateDo d = new CertificateDo()
|
||||||
|
.setCert(IOUtils.getBytes(cert)).setKey(IOUtils.getBytes(key)).setDomain(domain).setState(state);
|
||||||
|
certificateDao.insert(d);
|
||||||
|
return d.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long uploadByReplace(InputStream cert, InputStream key, String domain, boolean state) throws Exception {
|
||||||
|
if (cert == null || key == null)
|
||||||
|
throw new ValidationException("Cert or key file is null.");
|
||||||
List<CertificateDo> abandoned = certificateDao.findByDomainAndState(new String[]{domain}, state, CertificateEntity.READSET_FULL);
|
List<CertificateDo> abandoned = certificateDao.findByDomainAndState(new String[]{domain}, state, CertificateEntity.READSET_FULL);
|
||||||
certificateDao.deleteById(abandoned.toArray(new CertificateDo[abandoned.size()]));
|
if (abandoned.size() > 0)
|
||||||
|
certificateDao.deleteById(abandoned.toArray(new CertificateDo[abandoned.size()]));
|
||||||
CertificateDo d = new CertificateDo()
|
CertificateDo d = new CertificateDo()
|
||||||
.setCert(IOUtils.getBytes(cert)).setKey(IOUtils.getBytes(key)).setDomain(domain).setState(state);
|
.setCert(IOUtils.getBytes(cert)).setKey(IOUtils.getBytes(key)).setDomain(domain).setState(state);
|
||||||
certificateDao.insert(d);
|
certificateDao.insert(d);
|
||||||
|
|
40
src/test/java/com/ctrip/zeus/AbstractServerTest.java
Normal file
40
src/test/java/com/ctrip/zeus/AbstractServerTest.java
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
package com.ctrip.zeus;
|
||||||
|
|
||||||
|
import com.ctrip.zeus.util.S;
|
||||||
|
import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
|
||||||
|
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.unidal.dal.jdbc.datasource.DataSourceManager;
|
||||||
|
import org.unidal.dal.jdbc.transaction.TransactionManager;
|
||||||
|
import org.unidal.lookup.ContainerLoader;
|
||||||
|
import support.AbstractSpringTest;
|
||||||
|
import support.MysqlDbServer;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by zhoumy on 2015/11/5.
|
||||||
|
*/
|
||||||
|
public abstract class AbstractServerTest extends AbstractSpringTest {
|
||||||
|
protected static MysqlDbServer mysqlDbServer;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void setUpDb() throws ComponentLookupException, ComponentLifecycleException {
|
||||||
|
S.setPropertyDefaultValue("CONF_DIR", new File("").getAbsolutePath() + "/conf/test");
|
||||||
|
mysqlDbServer = new MysqlDbServer();
|
||||||
|
mysqlDbServer.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void tearDownDb() throws InterruptedException, ComponentLookupException, ComponentLifecycleException {
|
||||||
|
mysqlDbServer.stop();
|
||||||
|
|
||||||
|
DataSourceManager ds = ContainerLoader.getDefaultContainer().lookup(DataSourceManager.class);
|
||||||
|
ContainerLoader.getDefaultContainer().release(ds);
|
||||||
|
TransactionManager ts = ContainerLoader.getDefaultContainer().lookup(TransactionManager.class);
|
||||||
|
ContainerLoader.getDefaultContainer().release(ts);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
package com.ctrip.zeus.service;
|
||||||
|
|
||||||
|
import com.ctrip.zeus.AbstractServerTest;
|
||||||
|
import com.ctrip.zeus.dal.core.RCertificateSlbServerDao;
|
||||||
|
import com.ctrip.zeus.dal.core.RCertificateSlbServerEntity;
|
||||||
|
import com.ctrip.zeus.dal.core.RelCertSlbServerDo;
|
||||||
|
import com.ctrip.zeus.exceptions.ValidationException;
|
||||||
|
import com.ctrip.zeus.model.entity.*;
|
||||||
|
import com.ctrip.zeus.service.model.SlbRepository;
|
||||||
|
import com.ctrip.zeus.service.nginx.CertificateConfig;
|
||||||
|
import com.ctrip.zeus.service.nginx.CertificateInstaller;
|
||||||
|
import com.ctrip.zeus.service.nginx.CertificateService;
|
||||||
|
import com.ctrip.zeus.service.nginx.impl.CertificateServiceImpl;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by zhoumy on 2015/11/5.
|
||||||
|
*/
|
||||||
|
public class CertificateServiceTest extends AbstractServerTest {
|
||||||
|
@Resource
|
||||||
|
private CertificateService certificateService;
|
||||||
|
@Resource
|
||||||
|
private SlbRepository slbRepository;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUploadCertificate() throws Exception {
|
||||||
|
InputStream cert = this.getClass().getClassLoader().getResourceAsStream("com.ctrip.zeus.service/CertTest.crt");
|
||||||
|
InputStream key = this.getClass().getClassLoader().getResourceAsStream("com.ctrip.zeus.service/CertTest.key");
|
||||||
|
|
||||||
|
Long onBoardId = certificateService.upload(cert, key, "localhost", CertificateConfig.ONBOARD);
|
||||||
|
Long grayscaleId = certificateService.upload(cert, key, "localhost", CertificateConfig.GRAYSCALE);
|
||||||
|
Long noiseId = certificateService.upload(cert, key, "testUploadCertificate.noise.com", CertificateConfig.ONBOARD);
|
||||||
|
|
||||||
|
Long pickedId = certificateService.pickCertificate(new String[]{"localhost"});
|
||||||
|
|
||||||
|
Assert.assertFalse(onBoardId.longValue() == grayscaleId.longValue()
|
||||||
|
|| grayscaleId.longValue() == noiseId.longValue()
|
||||||
|
|| onBoardId.longValue() == noiseId.longValue());
|
||||||
|
Assert.assertEquals(onBoardId, pickedId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInstallCertificate() throws Exception {
|
||||||
|
Slb tmpSlb = new Slb().setName("testInstallCertificate").setVersion(1).setStatus("TEST")
|
||||||
|
.addVip(new Vip().setIp("127.0.0.1"))
|
||||||
|
.addSlbServer(new SlbServer().setIp("127.0.0.1").setHostName("LOCALHOST"))
|
||||||
|
.addVirtualServer(new VirtualServer().setName("www.testInstallCertificate.com_443").setSsl(true).setPort("443")
|
||||||
|
.addDomain(new Domain().setName("www.testInstallCertificate.com")));
|
||||||
|
try {
|
||||||
|
tmpSlb = slbRepository.add(tmpSlb);
|
||||||
|
Assert.assertFalse(true);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Assert.assertTrue(ex instanceof ValidationException);
|
||||||
|
System.out.println(ex.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
InputStream cert = this.getClass().getClassLoader().getResourceAsStream("com.ctrip.zeus.service/CertTest.crt");
|
||||||
|
InputStream key = this.getClass().getClassLoader().getResourceAsStream("com.ctrip.zeus.service/CertTest.key");
|
||||||
|
certificateService.upload(cert, key, "www.testInstallCertificate.com", CertificateConfig.ONBOARD);
|
||||||
|
tmpSlb = slbRepository.add(tmpSlb);
|
||||||
|
Assert.assertNotNull(slbRepository.getById(tmpSlb.getId()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,23 +1,15 @@
|
||||||
package com.ctrip.zeus.service;
|
package com.ctrip.zeus.service;
|
||||||
|
|
||||||
|
import com.ctrip.zeus.AbstractServerTest;
|
||||||
import com.ctrip.zeus.exceptions.ValidationException;
|
import com.ctrip.zeus.exceptions.ValidationException;
|
||||||
import com.ctrip.zeus.model.entity.*;
|
import com.ctrip.zeus.model.entity.*;
|
||||||
import com.ctrip.zeus.service.model.*;
|
import com.ctrip.zeus.service.model.*;
|
||||||
import com.ctrip.zeus.service.query.GroupCriteriaQuery;
|
import com.ctrip.zeus.service.query.GroupCriteriaQuery;
|
||||||
import com.ctrip.zeus.service.query.VirtualServerCriteriaQuery;
|
import com.ctrip.zeus.service.query.VirtualServerCriteriaQuery;
|
||||||
import com.ctrip.zeus.util.ModelAssert;
|
import com.ctrip.zeus.util.ModelAssert;
|
||||||
import com.ctrip.zeus.util.S;
|
|
||||||
import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
|
|
||||||
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
|
|
||||||
import org.junit.*;
|
import org.junit.*;
|
||||||
import org.unidal.dal.jdbc.datasource.DataSourceManager;
|
|
||||||
import org.unidal.dal.jdbc.transaction.TransactionManager;
|
|
||||||
import org.unidal.lookup.ContainerLoader;
|
|
||||||
import support.AbstractSpringTest;
|
|
||||||
import support.MysqlDbServer;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -26,10 +18,7 @@ import java.util.Set;
|
||||||
/**
|
/**
|
||||||
* Created by zhoumy on 2015/3/24.
|
* Created by zhoumy on 2015/3/24.
|
||||||
*/
|
*/
|
||||||
public class ModelServiceTest extends AbstractSpringTest {
|
public class ModelServiceTest extends AbstractServerTest {
|
||||||
|
|
||||||
private static MysqlDbServer mysqlDbServer;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private GroupRepository groupRepository;
|
private GroupRepository groupRepository;
|
||||||
@Resource
|
@Resource
|
||||||
|
@ -47,19 +36,18 @@ public class ModelServiceTest extends AbstractSpringTest {
|
||||||
private Group testGroup;
|
private Group testGroup;
|
||||||
private long insertedTestGroupId;
|
private long insertedTestGroupId;
|
||||||
|
|
||||||
@BeforeClass
|
|
||||||
public static void setUpDb() throws ComponentLookupException, ComponentLifecycleException {
|
|
||||||
S.setPropertyDefaultValue("CONF_DIR", new File("").getAbsolutePath() + "/conf/test");
|
|
||||||
mysqlDbServer = new MysqlDbServer();
|
|
||||||
mysqlDbServer.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void fillDb() throws Exception {
|
public void fillDb() throws Exception {
|
||||||
addSlb();
|
addSlb();
|
||||||
addGroups();
|
addGroups();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void clearDb() throws Exception {
|
||||||
|
deleteGroups();
|
||||||
|
deleteSlb();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ****************** test SlbRepository ********************
|
* ****************** test SlbRepository ********************
|
||||||
*/
|
*/
|
||||||
|
@ -460,24 +448,4 @@ public class ModelServiceTest extends AbstractSpringTest {
|
||||||
Archive archive = archiveService.getLatestSlbArchive(defaultSlb.getId());
|
Archive archive = archiveService.getLatestSlbArchive(defaultSlb.getId());
|
||||||
Assert.assertTrue(archive.getVersion() > 0);
|
Assert.assertTrue(archive.getVersion() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* ****************** test end ********************
|
|
||||||
*/
|
|
||||||
|
|
||||||
@After
|
|
||||||
public void clearDb() throws Exception {
|
|
||||||
deleteGroups();
|
|
||||||
deleteSlb();
|
|
||||||
}
|
|
||||||
|
|
||||||
@AfterClass
|
|
||||||
public static void tearDownDb() throws InterruptedException, ComponentLookupException, ComponentLifecycleException {
|
|
||||||
mysqlDbServer.stop();
|
|
||||||
|
|
||||||
DataSourceManager ds = ContainerLoader.getDefaultContainer().lookup(DataSourceManager.class);
|
|
||||||
ContainerLoader.getDefaultContainer().release(ds);
|
|
||||||
TransactionManager ts = ContainerLoader.getDefaultContainer().lookup(TransactionManager.class);
|
|
||||||
ContainerLoader.getDefaultContainer().release(ts);
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.ctrip.zeus.service.nginx;
|
||||||
|
|
||||||
|
import com.ctrip.zeus.dal.core.RCertificateSlbServerDao;
|
||||||
|
import com.ctrip.zeus.dal.core.RCertificateSlbServerEntity;
|
||||||
|
import com.ctrip.zeus.dal.core.RelCertSlbServerDo;
|
||||||
|
import com.ctrip.zeus.service.nginx.impl.CertificateServiceImpl;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by zhoumy on 2015/11/5.
|
||||||
|
*/
|
||||||
|
public class CertificateTestService extends CertificateServiceImpl {
|
||||||
|
@Resource
|
||||||
|
private RCertificateSlbServerDao rCertificateSlbServerDao;
|
||||||
|
@Resource
|
||||||
|
private CertificateInstaller certificateInstaller;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void install(Long vsId) throws Exception {
|
||||||
|
List<RelCertSlbServerDo> dos = rCertificateSlbServerDao.findByVs(vsId, RCertificateSlbServerEntity.READSET_FULL);
|
||||||
|
for (RelCertSlbServerDo d : dos) {
|
||||||
|
if (d.getCertId() == d.getCommand())
|
||||||
|
continue;
|
||||||
|
certificateInstaller.localInstall(vsId, d.getCommand());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
src/test/resources/com.ctrip.zeus.service/CertTest.crt
Normal file
1
src/test/resources/com.ctrip.zeus.service/CertTest.crt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
CertTest.crt
|
1
src/test/resources/com.ctrip.zeus.service/CertTest.key
Normal file
1
src/test/resources/com.ctrip.zeus.service/CertTest.key
Normal file
|
@ -0,0 +1 @@
|
||||||
|
CertTest.key
|
|
@ -17,4 +17,5 @@
|
||||||
<!--For unit tests-->
|
<!--For unit tests-->
|
||||||
<import resource="classpath*:spring-context.xml"/>
|
<import resource="classpath*:spring-context.xml"/>
|
||||||
<bean id="applicationContextProvider" class="support.SpringApplicationContextProvider"/>
|
<bean id="applicationContextProvider" class="support.SpringApplicationContextProvider"/>
|
||||||
|
<bean id="certificateService" class="com.ctrip.zeus.service.nginx.CertificateTestService"/>
|
||||||
</beans>
|
</beans>
|
||||||
|
|
Loading…
Reference in a new issue