Java tutorial
/* * * * Copyright (C) 2008 Pingtel Corp., certain elements licensed under a Contributor Agreement. * Contributors retain copyright to elements licensed under a Contributor Agreement. * Licensed to the User under the LGPL license. * * $ */ package org.sipfoundry.sipxconfig.admin; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.Collection; import java.util.Properties; import java.util.Set; import junit.framework.TestCase; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.URI; import org.apache.commons.httpclient.URIException; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import static org.easymock.classextension.EasyMock.*; import org.easymock.EasyMock; import org.sipfoundry.sipxconfig.admin.commserver.Location; import org.sipfoundry.sipxconfig.admin.commserver.LocationsManager; import org.sipfoundry.sipxconfig.admin.commserver.SipxProcessContext; import org.sipfoundry.sipxconfig.service.SipxBridgeService; import org.sipfoundry.sipxconfig.service.SipxConfigService; import org.sipfoundry.sipxconfig.service.SipxImbotService; import org.sipfoundry.sipxconfig.service.SipxIvrService; import org.sipfoundry.sipxconfig.service.SipxProvisionService; import org.sipfoundry.sipxconfig.service.SipxRecordingService; import org.sipfoundry.sipxconfig.service.SipxRestService; import org.sipfoundry.sipxconfig.service.SipxService; import org.sipfoundry.sipxconfig.service.SipxServiceManager; import org.sipfoundry.sipxconfig.test.TestUtil; public class CertificateManagerTest extends TestCase { private CertificateManagerImpl m_manager; private Location m_primaryLocation; private static String DELETE = "DELETE"; @Override protected void setUp() { m_manager = createCertificateManager(); m_manager.setCertDirectory(TestUtil.getTestSourceDirectory(this.getClass())); m_manager.setSslDirectory(TestUtil.getTestSourceDirectory(this.getClass())); m_manager.setBinCertDirectory(TestUtil.getTestSourceDirectory(this.getClass())); m_manager.setSslAuthDirectory( TestUtil.getTestSourceDirectory(this.getClass()) + File.separator + "testAuthorities"); m_manager.setLibExecDirectory(TestUtil.getTestSourceDirectory(this.getClass())); m_primaryLocation = TestUtil.createDefaultLocation(); } private CertificateManagerImpl createCertificateManager() { return new CertificateManagerImpl() { @Override protected HttpClient getNewHttpClient() { return new HttpClient() { @Override public int executeMethod(HttpMethod method) { if (StringUtils.equals(method.getName(), DELETE)) { try { URI reqURI = method.getURI(); FileUtils.deleteQuietly(new File(reqURI.getPath())); } catch (URIException uex) { //do nothing } return 200; } else { return 501; } } }; } }; } public void testWriteAndLoadCertPropertiesFile() { // write properties to file Properties prop1 = new Properties(); prop1.put("countryName", "US"); prop1.put("stateOrProvinceName", "Texas"); prop1.put("localityName", "Austin"); prop1.put("organizationName", "Test Organization"); prop1.put("serverEmail", "test@test.org"); prop1.put("serverName", "example.org"); m_manager.writeCertPropertiesFile(prop1); // load properties from file Properties prop2 = m_manager.loadCertPropertiesFile(); assertEquals("US", prop2.get("countryName")); assertEquals("Texas", prop2.get("stateOrProvinceName")); assertEquals("Austin", prop2.get("localityName")); assertEquals("Test Organization", prop2.get("organizationName")); assertEquals("test@test.org", prop2.get("serverEmail")); assertEquals("example.org", prop2.get("serverName")); // cleanup File propertiesFile = new File(TestUtil.getTestSourceDirectory(this.getClass()), "webCert.properties"); assertTrue(propertiesFile.delete()); } public void testGetCRTFilePath() { assertEquals(TestUtil.getTestSourceDirectory(this.getClass()) + File.separator + m_primaryLocation.getFqdn() + "-web.crt", m_manager.getCRTFile(m_primaryLocation.getFqdn()).getPath()); } public void testWriteCRTFile() throws Exception { String certificate = new String("TEST"); m_manager.setCertDirectory(TestUtil.getTestOutputDirectory("neoconf") + File.separator + "certs"); m_manager.writeCRTFile(certificate, m_primaryLocation.getFqdn()); compareFileContents(m_manager.getCRTFile(m_primaryLocation.getFqdn()), certificate); } public void testGetExternalCRTFilePath() { assertEquals( TestUtil.getTestSourceDirectory(this.getClass()) + File.separator + "external-key-based-web.crt", m_manager.getExternalCRTFile().getAbsolutePath()); } public void testWriteExternalCRTFile() throws Exception { String certificate = new String("TEST"); m_manager.setCertDirectory(TestUtil.getTestOutputDirectory("neoconf") + File.separator + "certs"); m_manager.writeExternalCRTFile(certificate); compareFileContents(m_manager.getExternalCRTFile(), certificate); } public void testGetKeyFilePath() { assertEquals(TestUtil.getTestSourceDirectory(this.getClass()) + File.separator + m_primaryLocation.getFqdn() + "-web.key", m_manager.getKeyFile(m_primaryLocation.getFqdn()).getPath()); } public void testGetExternalKeyFilePath() { assertEquals( TestUtil.getTestSourceDirectory(this.getClass()) + File.separator + "external-key-based-web.key", m_manager.getExternalKeyFile().getAbsolutePath()); } public void testWriteKeyFile() throws Exception { String key = new String("TESTKEY"); m_manager.setCertDirectory(TestUtil.getTestOutputDirectory("neoconf") + File.separator + "certs"); m_manager.writeKeyFile(key); compareFileContents(m_manager.getExternalKeyFile(), key); } public void testValid() throws Exception { boolean valid = m_manager.validateCertificate(new File("invalidCRT.crt")); assertFalse(valid); valid = m_manager.validateCertificate(new File("validCRT.crt")); assertTrue(valid); } public void testValidCA() throws Exception { boolean valid = m_manager.validateCertificateAuthority(new File("invalidCA.crt")); assertFalse(valid); valid = m_manager.validateCertificateAuthority(new File("validCA.crt")); assertTrue(valid); } public void testShow() throws Exception { String text = m_manager.showCertificate(new File("validCA.crt")); assertEquals("VALID", text); } public void testListCertificates() throws Exception { Set<CertificateDecorator> certs = m_manager.listCertificates(); assertEquals(1, certs.size()); for (CertificateDecorator cert : certs) { assertEquals("valid1CA.crt", cert.getFileName()); } } public void testSaveDeleteCert() throws Exception { File tmpCAFile = m_manager.getCATmpFile("validCA.crt"); File caFile = m_manager.getCAFile("validCA.crt"); FileUtils.copyFile( new File(TestUtil.getTestSourceDirectory(this.getClass()) + File.separator + "validCA.crt"), tmpCAFile); FileUtils.copyFile(tmpCAFile, caFile); m_manager.deleteCRTAuthorityTmpDirectory(); LocationsManager locationsManager = EasyMock.createMock(LocationsManager.class); locationsManager.getLocations(); EasyMock.expectLastCall().andReturn(new Location[] { m_primaryLocation }).anyTimes(); m_primaryLocation.setFqdn("example.com"); m_manager.setLocationsManager(locationsManager); replay(locationsManager); Set<CertificateDecorator> certs = m_manager.listCertificates(); assertEquals(2, certs.size()); CertificateDecorator cert = new CertificateDecorator(); cert.setFileName("validCA.crt"); m_manager.deleteCA(cert); certs = m_manager.listCertificates(); assertEquals(1, certs.size()); } public void testImportKeyAndCertificate() throws Exception { SipxServiceManager sipxServiceManager = EasyMock.createMock(SipxServiceManager.class); sipxServiceManager.getServiceByBeanId(SipxConfigService.BEAN_ID); EasyMock.expectLastCall().andReturn(new SipxConfigService()).atLeastOnce(); sipxServiceManager.getServiceByBeanId(SipxBridgeService.BEAN_ID); EasyMock.expectLastCall().andReturn(new SipxBridgeService()).atLeastOnce(); sipxServiceManager.getServiceByBeanId(SipxIvrService.BEAN_ID); EasyMock.expectLastCall().andReturn(new SipxIvrService()).atLeastOnce(); sipxServiceManager.getServiceByBeanId(SipxRecordingService.BEAN_ID); EasyMock.expectLastCall().andReturn(new SipxRecordingService()).atLeastOnce(); sipxServiceManager.getServiceByBeanId(SipxImbotService.BEAN_ID); EasyMock.expectLastCall().andReturn(new SipxImbotService()).atLeastOnce(); sipxServiceManager.getServiceByBeanId("sipxOpenfireService"); EasyMock.expectLastCall().andReturn(new SipxService() { }).atLeastOnce(); sipxServiceManager.getServiceByBeanId(SipxProvisionService.BEAN_ID); EasyMock.expectLastCall().andReturn(new SipxProvisionService()).atLeastOnce(); sipxServiceManager.getServiceByBeanId(SipxRestService.BEAN_ID); EasyMock.expectLastCall().andReturn(new SipxRestService()).atLeastOnce(); LocationsManager locationsManager = EasyMock.createMock(LocationsManager.class); locationsManager.getPrimaryLocation(); EasyMock.expectLastCall().andReturn(m_primaryLocation).atLeastOnce(); SipxProcessContext processContext = EasyMock.createMock(SipxProcessContext.class); processContext.markServicesForRestart(EasyMock.eq(m_primaryLocation), (Collection) EasyMock.anyObject()); EasyMock.expectLastCall().atLeastOnce(); m_manager.setSipxServiceManager(sipxServiceManager); m_manager.setProcessContext(processContext); m_manager.setLocationsManager(locationsManager); EasyMock.replay(sipxServiceManager, locationsManager, processContext); String sslDirectory = TestUtil.getTestOutputDirectory("neoconf") + File.separator + "certs" + File.separator + "ssl"; File sslWebCert = new File(sslDirectory + File.separator + "ssl-web.crt"); File sslWebKey = new File(sslDirectory + File.separator + "ssl-web.key"); (new File(sslDirectory)).mkdirs(); sslWebCert.createNewFile(); sslWebKey.createNewFile(); m_manager.setSslDirectory(sslDirectory); m_manager.importKeyAndCertificate(m_primaryLocation.getFqdn(), true); compareFileContents(sslWebCert, "CSR_BASED_CERT"); compareFileContents(sslWebKey, "CSR_BASED_KEY"); m_manager.setSslDirectory(sslDirectory); m_manager.importKeyAndCertificate(m_primaryLocation.getAddress(), false); compareFileContents(sslWebCert, "EXTERNAL_KEY_BASED_CERT"); compareFileContents(sslWebKey, "EXTERNAL_KEY_BASED_KEY"); m_manager.setSslDirectory(sslDirectory); m_manager.importKeyAndCertificate("random.domain.org", true); compareFileContents(sslWebCert, "CSR_BASED_CERT_DIFFERNET_DOMAIN"); compareFileContents(sslWebKey, "CSR_BASED_KEY_DIFFERNET_DOMAIN"); m_manager.setSslDirectory(sslDirectory); m_manager.importKeyAndCertificate("random.domain.org", false); compareFileContents(sslWebCert, "EXTERNAL_KEY_BASED_CERT"); compareFileContents(sslWebKey, "EXTERNAL_KEY_BASED_KEY"); } private void compareFileContents(File file, String expectedOutput) throws Exception { BufferedReader reader = new BufferedReader(new FileReader(file)); String line = reader.readLine(); assertEquals(expectedOutput, line); assertNull(reader.readLine()); } }