add test case

This commit is contained in:
Mengyi Zhou 2015-11-05 16:04:45 +08:00
parent 490d6fbd31
commit 606cd74263
14 changed files with 190 additions and 45 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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())

View file

@ -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()];

View file

@ -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;
}
} }

View file

@ -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;

View file

@ -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);

View 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);
}
}

View file

@ -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()));
}
}

View file

@ -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);
}
} }

View file

@ -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());
}
}
}

View file

@ -0,0 +1 @@
CertTest.crt

View file

@ -0,0 +1 @@
CertTest.key

View file

@ -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>