From e41d51fa4bf439e003833f8765765b25b8f1f569 Mon Sep 17 00:00:00 2001 From: Sameera Wickramasekara Date: Fri, 29 Sep 2017 21:09:35 +0530 Subject: [PATCH] Adding test cases --- .../dao/CertificateManagementDAOFactory.java | 2 +- .../BaseDeviceManagementCertificateTest.java | 73 ++-- .../mgt/core/common/DataSourceConfig.java | 21 +- ...CertificateManagementServiceImplTests.java | 321 ++++++++++++++---- .../mgt/core/util/CSRGenerator.java | 19 +- .../mgt/core/util/DummyCertificate.java | 174 ++++++++++ .../src/test/resources/testng.xml | 3 +- 7 files changed, 488 insertions(+), 125 deletions(-) create mode 100644 components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/DummyCertificate.java diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/dao/CertificateManagementDAOFactory.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/dao/CertificateManagementDAOFactory.java index 5c82ea83a3d..10e70a5baa4 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/dao/CertificateManagementDAOFactory.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/dao/CertificateManagementDAOFactory.java @@ -115,7 +115,7 @@ public class CertificateManagementDAOFactory { currentTxState.set(TxState.CONNECTION_BORROWED); } - public static void openConnection() throws SQLException { + public static void openConnection() throws SQLException { Connection conn = currentConnection.get(); if (conn != null) { throw new IllegalTransactionStateException("A transaction is already active within the context of " + diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/BaseDeviceManagementCertificateTest.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/BaseDeviceManagementCertificateTest.java index 6ca1b5c383d..59e83ca5c62 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/BaseDeviceManagementCertificateTest.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/BaseDeviceManagementCertificateTest.java @@ -1,11 +1,26 @@ +/* + * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package org.wso2.carbon.certificate.mgt.core.common; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tomcat.jdbc.pool.PoolProperties; -import org.powermock.modules.testng.PowerMockTestCase; -import org.testng.Assert; -import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeSuite; import org.w3c.dom.Document; @@ -23,11 +38,10 @@ import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.File; import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; import java.sql.Statement; -public abstract class BaseDeviceManagementCertificateTest{ + +public abstract class BaseDeviceManagementCertificateTest { private DataSource dataSource; private static final Log log = LogFactory.getLog(BaseDeviceManagementCertificateTest.class); @@ -46,6 +60,12 @@ public abstract class BaseDeviceManagementCertificateTest{ GroupManagementDAOFactory.init(dataSource); } + public void initDataSource(DataSource ds) throws Exception { + this.dataSource = ds; + DeviceManagementDAOFactory.init(dataSource); + GroupManagementDAOFactory.init(dataSource); + } + @BeforeClass public abstract void init() throws Exception; @@ -76,7 +96,7 @@ public abstract class BaseDeviceManagementCertificateTest{ Statement stmt = null; try { conn = this.getDataSource().getConnection(); - stmt = conn.createStatement(); + stmt = conn.createStatement(); stmt.executeUpdate("RUNSCRIPT FROM './src/test/resources/sql/h2.sql'"); } finally { TestUtils.cleanupResources(conn, stmt, null); @@ -109,45 +129,6 @@ public abstract class BaseDeviceManagementCertificateTest{ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID); } - - - private void cleanApplicationMappingData(Connection conn) throws SQLException { - try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_DEVICE_APPLICATION_MAPPING")) { - stmt.execute(); - } - } - - private void cleanApplicationData(Connection conn) throws SQLException { - try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_APPLICATION")) { - stmt.execute(); - } - } - - - private void cleanupEnrolmentData(Connection conn) throws SQLException { - try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_ENROLMENT")) { - stmt.execute(); - } - } - - private void cleanupDeviceData(Connection conn) throws SQLException { - try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_DEVICE")) { - stmt.execute(); - } - } - - private void cleanupDeviceTypeData(Connection conn) throws SQLException { - try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_DEVICE_TYPE")) { - stmt.execute(); - } - } - - private void cleanupGroupData(Connection conn) throws SQLException { - try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_GROUP")) { - stmt.execute(); - } - } - public DataSource getDataSource() { return dataSource; diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/DataSourceConfig.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/DataSourceConfig.java index f48e6add84c..869660ee794 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/DataSourceConfig.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/DataSourceConfig.java @@ -1,6 +1,22 @@ +/* + * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ package org.wso2.carbon.certificate.mgt.core.common; - import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @@ -12,7 +28,8 @@ public class DataSourceConfig { private String user; private String password; - @Override public String toString() { + @Override + public String toString() { return "DataSourceConfig[" + " Url ='" + url + '\'' + ", DriverClassName ='" + driverClassName + '\'' + diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateManagementServiceImplTests.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateManagementServiceImplTests.java index 61d63ac0ec6..1278b48872a 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateManagementServiceImplTests.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateManagementServiceImplTests.java @@ -1,3 +1,21 @@ +/* + * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package org.wso2.carbon.certificate.mgt.core.impl; import org.apache.commons.io.FileUtils; @@ -20,43 +38,38 @@ import org.wso2.carbon.certificate.mgt.core.dto.SCEPResponse; import org.wso2.carbon.certificate.mgt.core.exception.CertificateManagementException; import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException; import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementServiceImpl; +import org.wso2.carbon.certificate.mgt.core.service.PaginationResult; import org.wso2.carbon.certificate.mgt.core.util.CSRGenerator; import org.wso2.carbon.certificate.mgt.core.util.CertificateManagementConstants; +import org.wso2.carbon.certificate.mgt.core.util.DummyCertificate; +import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager; import sun.misc.BASE64Encoder; -import javax.xml.parsers.DocumentBuilderFactory; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; -import java.math.BigInteger; import java.security.KeyPair; import java.security.PrivateKey; import java.security.Security; -import java.security.cert.Certificate; -import java.security.cert.CertificateEncodingException; -import java.security.cert.X509Certificate; +import java.security.cert.*; import java.util.ArrayList; import java.util.List; -//@RunWith(PowerMockRunner.class) - -//@PowerMockIgnore({"javax.xml.*","java.sql.*", "org.xml.sax.*", "org.w3c.dom.*", "org.springframework.context.*", "org.apache.log4j.*"}) -//@PrepareForTest(org.wso2.carbon.certificate.mgt.core.util.CommonUtil.class) public class CertificateManagementServiceImplTests extends BaseDeviceManagementCertificateTest { private static Log log = LogFactory.getLog(CertificateManagementServiceImplTests.class); private static final String CA_CERT_PEM = "src/test/resources/ca_cert.pem"; private static final String RA_CERT_PEM = "src/test/resources/ra_cert.pem"; - private static final String CA_CERT_DER = "src/test/resources/ca_cert.der"; CertificateManagementServiceImpl managementService = null; - @Test + @Test(description = "This test case tests initialization of CertificateManagementServiceImpl instance") public void testGetInstance() { try { CertificateManagementServiceImpl instance = CertificateManagementServiceImpl.getInstance(); Assert.assertNotNull(instance); - log.info("Successfully created instance"); + log.info("getInstance Test Successful"); } catch (NullPointerException e) { log.error("Error while initializing CertificateManagementService", e); @@ -68,19 +81,21 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC @BeforeClass public void initCertificateManagementService() throws DeviceManagementException { + //save certificatemanagementservice instance as class variable managementService = CertificateManagementServiceImpl.getInstance(); + //set Bouncycastle as a provider for testing Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); } - @Test + @Test(description = "This test case tests retrieval of CA Certificate from the keystore") public void testGetCACertificate() { try { CertificateManagementServiceImpl instance = CertificateManagementServiceImpl.getInstance(); Certificate caCertificate = instance.getCACertificate(); Assert.assertNotNull(caCertificate); Assert.assertEquals(caCertificate.getType(), CertificateManagementConstants.X_509); - log.info("Successfully returned CA Certificate"); + log.info("GetCACertificate Test Successful"); } catch (KeystoreException e) { String msg = "Error while getting the CA Certificate"; @@ -89,13 +104,13 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC } } - @Test + @Test(description = "This test case tests retrieval of RA Certificate from the keystore") public void testGetRACertificate() { try { Certificate raCertificate = managementService.getRACertificate(); Assert.assertNotNull(raCertificate); Assert.assertEquals(raCertificate.getType(), CertificateManagementConstants.X_509); - log.info("Successfully returned RA Certificate"); + log.info("GetRACertificate Test Successful"); } catch (KeystoreException e) { String msg = "Error while getting the RA Certificate"; log.error(msg, e); @@ -103,12 +118,13 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC } } - @Test + @Test(description = "This test case test generation of root certificates") public void testGetRootCertificate() { File caCert = new File(CA_CERT_PEM); File raCert = new File(RA_CERT_PEM); try { + //read file to byte arrays byte[] caBytes = FileUtils.readFileToByteArray(caCert); byte[] raBytes = FileUtils.readFileToByteArray(raCert); @@ -116,7 +132,7 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC Assert.assertNotNull(rootCertificates); Assert.assertEquals(rootCertificates.get(0).getType(), CertificateManagementConstants.X_509); Assert.assertEquals(rootCertificates.get(1).getType(), CertificateManagementConstants.X_509); - log.info("Successfully returned root Certificate"); + log.info("GetRootCertificate Test Successful"); } catch (IOException e) { String msg = "Error reading byte streams"; @@ -130,13 +146,14 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC } - @Test + @Test(description = "This test case tests generation of X509Certificate") public void testGenerateX509Certificate() { try { X509Certificate x509Certificate = managementService.generateX509Certificate(); Assert.assertNotNull(x509Certificate); Assert.assertEquals(x509Certificate.getType(), CertificateManagementConstants.X_509); + log.info("GenerateX509Certificate Test Successful"); } catch (KeystoreException e) { String msg = "Error while generating X509 Certificate"; @@ -145,13 +162,14 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC } } - @Test + @Test(description = "This test case tests retrieving SCEP CA Certificate") public void testGetCACertSCEP() { try { SCEPResponse caCertSCEP = managementService.getCACertSCEP(); Assert.assertNotNull(caCertSCEP); Assert.assertEquals(caCertSCEP.getResultCriteria(), CAStatus.CA_RA_CERT_RECEIVED); + log.info("GetCACertSCEP Test Successful"); } catch (KeystoreException e) { String msg = "Error while Retrieving CA Certificate"; @@ -167,11 +185,12 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC byte[] caCapsSCEP = managementService.getCACapsSCEP(); Assert.assertNotNull(caCapsSCEP); Assert.assertEquals(caCapsSCEP, CertificateManagementConstants.POST_BODY_CA_CAPS.getBytes()); + log.info("GetCACapsSCEP Test Successful"); } - @Test + @Test(description = "This test case tests generation of a X509Certificate from a CSR") public void testGenerateCertificateFromCSR() { CSRGenerator csrGeneration = new CSRGenerator(); KeyStoreReader keyStoreReader = new KeyStoreReader(); @@ -190,6 +209,7 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC Assert.assertNotNull(x509Certificate); Assert.assertEquals(x509Certificate.getType(), CertificateManagementConstants.X_509); + log.info("GenerateCertificateFromCSR Test Successful"); } catch (KeystoreException e) { String msg = "Error while reading Certificates from the keystore"; @@ -204,7 +224,7 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC } - @Test + @Test(description = "This test case tests retrieval of a Certificate from the keystore from the Serial Number") public void testGetCertificateBySerial() { X509Certificate x509Certificate = null; @@ -217,6 +237,7 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC Assert.assertNotNull(certificateBySerial); Assert.assertEquals(certificateBySerial.getSerialNumber(), x509Certificate.getSerialNumber().toString()); + log.info("GetCertificateBySerial Test Successful"); } catch (KeystoreException e) { String msg = "Error while receiving the certificate"; @@ -231,7 +252,7 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC } - @Test + @Test(description = "This test case tests retrieval of a Certificate from the keystore from the Alias") public void testGetCertificateByAlias() { X509Certificate x509Certificate = null; try { @@ -245,6 +266,7 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC Assert.assertNotNull(certificateByAlias); Assert.assertEquals(certificateByAlias.getType(), CertificateManagementConstants.X_509); + log.info("GetCertificateByAlias Test Successful"); } catch (KeystoreException e) { String msg = "Error while receiving the certificate"; @@ -257,7 +279,7 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC } } - @Test + @Test(description = "This test case tests Signature verification of a Certificate against the keystore") public void testVerifySignature() { BASE64Encoder encoder = new BASE64Encoder(); @@ -278,6 +300,7 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC Assert.assertNotNull(verifySignature); Assert.assertTrue(verifySignature); + log.info("VerifySignature Test Successful"); } catch (CertificateEncodingException e) { String msg = "Error in Certificate encoding"; @@ -300,22 +323,7 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC } - - - -// public void testVerifyPEMSignature() throws KeystoreException, DeviceManagementException { -// -// DeviceConfigurationManager.getInstance().initConfig(); -// X509Certificate x509Certificate = managementService.generateX509Certificate(); -// -// PowerMockito.mockStatic(CommonUtil.class); -// PowerMockito.when(CommonUtil.generateSerialNumber()).thenReturn(new BigInteger("12345")); -// CertificateResponse certificateResponse = managementService.verifyPEMSignature(x509Certificate); -// Assert.assertNotNull(certificateResponse); -// -// } - - @Test + @Test(description = "This test case tests DN verification of a Certificate against the keystore") public void testVerifySubjectDN() { try { DeviceConfigurationManager.getInstance().initConfig(); @@ -325,54 +333,75 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC managementService.verifySubjectDN(x509Certificate.getIssuerDN().getName()); } catch (KeystoreException e) { - e.printStackTrace(); + String msg = "Error while accessing the keystore"; + log.error(msg, e); + Assert.fail(msg, e); } catch (DeviceManagementException e) { - e.printStackTrace(); + String msg = "Error while initilizing DeviceConfigurationManager"; + log.error(msg, e); + } } - @Test - public void testRetrieveCertificate(){ + @Test(description = "This test case tests retrieval of a Certificate from the keystore from the Serial") + public void testRetrieveCertificate() { try { X509Certificate x509Certificate = managementService.generateX509Certificate(); CertificateResponse certificateResponse = managementService.retrieveCertificate(x509Certificate.getSerialNumber().toString()); Assert.assertNotNull(certificateResponse); - Assert.assertEquals(x509Certificate.getSerialNumber(),certificateResponse.getCertificateserial()); + Assert.assertEquals(x509Certificate.getSerialNumber(), certificateResponse.getCertificateserial()); } catch (KeystoreException e) { - e.printStackTrace(); + String msg = "Error while accessing the keystore"; + log.error(msg, e); + Assert.fail(msg, e); } catch (CertificateManagementException e) { - e.printStackTrace(); + String msg = " Error occurred while looking up for the certificate in the keystore"; + log.error(msg, e); + Assert.fail(msg, e); } } - @Test - public void testGetAllCertificates() throws CertificateManagementException { - managementService.getAllCertificates(1,1); + @Test(description = "This test case tests the retrieval of Certificates from keystore in desired pagination") + public void testGetAllCertificatesPaginated() throws CertificateManagementException { + try { + managementService.generateX509Certificate(); + managementService.generateX509Certificate(); + PaginationResult allCertificates = managementService.getAllCertificates(0, 2); + Assert.assertEquals(allCertificates.getData().size(), 2); + log.info("GetAllCertificatesPaginated Test Successful"); + + } catch (KeystoreException e) { + String msg = "Error while accessing the keystore"; + log.error(msg, e); + Assert.fail(msg, e); + } + + } - @Test - public void testGetCertificates(){ - try{ + @Test(description = "This test casae tests retrieval of all Certificates from keystore") + public void testGetCertificates() throws CertificateManagementException { + try { List certificatesBefore = managementService.getCertificates(); - X509Certificate x509Certificate1 = managementService.generateX509Certificate(); - X509Certificate x509Certificate2 = managementService.generateX509Certificate(); + managementService.generateX509Certificate(); + managementService.generateX509Certificate(); List certificatesAfter = managementService.getCertificates(); Assert.assertNotNull(certificatesBefore); Assert.assertNotNull(certificatesAfter); - Assert.assertEquals((certificatesBefore.size() + 2),certificatesAfter.size()); - + Assert.assertEquals((certificatesBefore.size() + 2), certificatesAfter.size()); + log.info("GetCertificates Test Successful"); - } catch (CertificateManagementException e) { - e.printStackTrace(); } catch (KeystoreException e) { - e.printStackTrace(); + String msg = "Error while accessing the keystore"; + log.error(msg, e); + Assert.fail(msg, e); } } - @Test - public void testGetCertificatesWithParams(){ + @Test(description = "This test case tests deleting Certificate from the keystore") + public void testRemoveCertificate() throws CertificateManagementException { try { X509Certificate x509Certificate = managementService.generateX509Certificate(); @@ -385,37 +414,181 @@ public class CertificateManagementServiceImplTests extends BaseDeviceManagementC Assert.assertNotNull(removed); Assert.assertTrue(removed); - Assert.assertEquals((size-1),sizeAfter); + Assert.assertEquals((size - 1), sizeAfter); + log.info("RemoveCertificate Test Successful"); - } catch (CertificateManagementException e) { - e.printStackTrace(); } catch (KeystoreException e) { - e.printStackTrace(); + String msg = "Error while accessing the keystore"; + log.error(msg, e); + Assert.fail(msg, e); } } - @Test - public void testSearchCertificates(){ + @Test(description = "This test case tests searching for a list of certificates by the serial number") + public void testSearchCertificates() throws CertificateManagementException { try { X509Certificate x509Certificate = managementService.generateX509Certificate(); List certificateResponses = managementService.searchCertificates(x509Certificate.getSerialNumber().toString()); Assert.assertNotNull(certificateResponses); - Assert.assertEquals(1,certificateResponses.size()); - Assert.assertEquals(certificateResponses.get(0).getSerialNumber(),x509Certificate.getSerialNumber().toString()); + Assert.assertEquals(1, certificateResponses.size()); + Assert.assertEquals(certificateResponses.get(0).getSerialNumber(), x509Certificate.getSerialNumber().toString()); + log.info("SearchCertificates Test Successful"); } catch (KeystoreException e) { - e.printStackTrace(); - } catch (CertificateManagementException e) { - e.printStackTrace(); + String msg = "Error while accessing the keystore"; + log.error(msg, e); + Assert.fail(msg, e); + } + } + + @Test(description = "This test case tests generation of signed Certificate from a CSR") + public void testGetSignedCertificateFromCSR() { + + CSRGenerator csrGeneration = new CSRGenerator(); + BASE64Encoder encoder = new BASE64Encoder(); + + // Generate key pair + KeyPair keyPair = csrGeneration.generateKeyPair("RSA", 1024); + byte[] csrData = csrGeneration.generateCSR("SHA256WithRSA", keyPair); + try { + X509Certificate signedCertificateFromCSR = managementService.getSignedCertificateFromCSR(encoder.encode(csrData)); + Assert.assertNotNull(signedCertificateFromCSR); + Assert.assertEquals(signedCertificateFromCSR.getType(), CertificateManagementConstants.X_509); + log.info("GetSignedCertificateFromCSR Test Successful"); + + } catch (KeystoreException e) { + String msg = "Error while accessing the keystore"; + log.error(msg, e); + Assert.fail(msg, e); + } + + + } + + @Test(description = "This test case tests the extraction of Challenge token from a Certificate") + public void testExtractChallengeToken() throws KeystoreException { + + X509Certificate x509Certificate1 = new DummyCertificate(); + String token = managementService.extractChallengeToken(x509Certificate1); + + Assert.assertNotNull(token); + Assert.assertEquals(token, DummyCertificate.EXT); + log.info("extractChallengeToken Test Successful"); + + } + + @Test(description = "This test case tests saving a list of Certificates in the keystore") + public void testSaveCertificate() throws CertificateManagementException { + File caCert = new File(CA_CERT_PEM); + try { + int before = managementService.getCertificates().size(); + byte[] caBytes = FileUtils.readFileToByteArray(caCert); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(caBytes)); + + List certificates = new ArrayList<>(); + org.wso2.carbon.certificate.mgt.core.bean.Certificate certificateToStore = + new org.wso2.carbon.certificate.mgt.core.bean.Certificate(); + certificateToStore.setTenantId(PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId()); + certificateToStore.setCertificate(cert); + certificates.add(certificateToStore); + + managementService.saveCertificate(certificates); + int after = managementService.getCertificates().size(); + Assert.assertEquals((before + 1), after); + log.info("SaveCertificate Test Successful"); + + } catch (IOException e) { + String msg = "Error while reading Pem file from the file"; + log.error(msg, e); + Assert.fail(msg, e); + + } catch (CertificateException e) { + String msg = "Error while Converting Pem file to X509 Certificate"; + log.error(msg, e); + Assert.fail(msg, e); + + } catch (KeystoreException e) { + String msg = "Error while accessing the keystore"; + log.error(msg, e); + Assert.fail(msg, e); + ; } } + @Test(description = "This test case tests converting a pem file to X509 Certificate") + public void testPemToX509Certificate() { + File caCert = new File(CA_CERT_PEM); + BASE64Encoder encoder = new BASE64Encoder(); + try { + byte[] caBytes = FileUtils.readFileToByteArray(caCert); + X509Certificate certificate = managementService.pemToX509Certificate(encoder.encode(caBytes)); + Assert.assertNotNull(certificate); + Assert.assertEquals(certificate.getType(), CertificateManagementConstants.X_509); + log.info("PemToX509Certificate Test Successful"); + + } catch (IOException e) { + String msg = "Error while reading Pem file from the file"; + log.error(msg, e); + Assert.fail(msg, e); + } catch (KeystoreException e) { + String msg = "Error while accessing the keystore"; + log.error(msg, e); + Assert.fail(msg, e); + } + } + + @Test(description = "This test case tests extracting Certificate from the header Signature") + public void testExtractCertificateFromSignature() { + BASE64Encoder encoder = new BASE64Encoder(); + + try { + //generate and save a certificate in the keystore + X509Certificate x509Certificate = managementService.generateX509Certificate(); + + //Generate CMSdata + CMSSignedDataGenerator generator = new CMSSignedDataGenerator(); + List list = new ArrayList<>(); + list.add(x509Certificate); + JcaCertStore store = new JcaCertStore(list); + generator.addCertificates(store); + CMSSignedData degenerateSd = generator.generate(new CMSAbsentContent()); + byte[] signature = degenerateSd.getEncoded(); + + X509Certificate certificate = managementService.extractCertificateFromSignature(encoder.encode(signature)); + + Assert.assertNotNull(certificate); + Assert.assertEquals(certificate.getType(), CertificateManagementConstants.X_509); + log.info("ExtractCertificateFromSignature Test Successful"); + + } catch (CertificateEncodingException e) { + String msg = "Error in Certificate encoding"; + log.error(msg, e); + Assert.fail(msg, e); + } catch (IOException e) { + String msg = "Error reading encoded signature"; + log.error(msg, e); + Assert.fail(msg, e); + } catch (CMSException e) { + String msg = "Error Adding certificates"; + log.error(msg, e); + Assert.fail(msg, e); + } catch (KeystoreException e) { + String msg = "Error while accessing the keystore"; + log.error(msg, e); + Assert.fail(msg, e); + } + + } + @BeforeClass - @Override public void init() throws Exception { initDataSource(); CertificateManagementDAOFactory.init(this.getDataSource()); + } + + } diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/CSRGenerator.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/CSRGenerator.java index 019d5a9c93e..1ee50d04ad9 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/CSRGenerator.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/CSRGenerator.java @@ -1,3 +1,21 @@ +/* + * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package org.wso2.carbon.certificate.mgt.core.util; import org.bouncycastle.operator.ContentSigner; @@ -13,7 +31,6 @@ import java.io.PrintStream; import java.security.KeyPair; import java.security.KeyPairGenerator; - public class CSRGenerator { /** diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/DummyCertificate.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/DummyCertificate.java new file mode 100644 index 00000000000..a89c4e0a7e5 --- /dev/null +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/DummyCertificate.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.wso2.carbon.certificate.mgt.core.util; + +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; + +import java.math.BigInteger; +import java.security.*; +import java.security.cert.*; +import java.util.Date; +import java.util.Set; + +public class DummyCertificate extends X509Certificate { + + public static final String EXT = "Dummy extension"; + public static final String DN = "O=WSO2,OU=Mobile,C=LK,CN=123456789"; + + + @Override + public void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException { + + } + + @Override + public void checkValidity(Date date) throws CertificateExpiredException, CertificateNotYetValidException { + + } + + @Override + public int getVersion() { + return 0; + } + + @Override + public BigInteger getSerialNumber() { + return new BigInteger("123456789"); + } + + @Override + public Principal getIssuerDN() { + return null; + } + + @Override + public Principal getSubjectDN() { + return new Principal() { + @Override + public String getName() { + return DN; + } + }; + + } + + @Override + public Date getNotBefore() { + return null; + } + + @Override + public Date getNotAfter() { + return null; + } + + @Override + public byte[] getTBSCertificate() throws CertificateEncodingException { + return new byte[0]; + } + + @Override + public byte[] getSignature() { + return new byte[0]; + } + + @Override + public String getSigAlgName() { + return null; + } + + @Override + public String getSigAlgOID() { + return null; + } + + @Override + public byte[] getSigAlgParams() { + return new byte[0]; + } + + @Override + public boolean[] getIssuerUniqueID() { + return new boolean[0]; + } + + @Override + public boolean[] getSubjectUniqueID() { + return new boolean[0]; + } + + @Override + public boolean[] getKeyUsage() { + return new boolean[0]; + } + + @Override + public int getBasicConstraints() { + return 0; + } + + @Override + public byte[] getEncoded() throws CertificateEncodingException { + return new byte[0]; + } + + @Override + public void verify(PublicKey key) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException { + + } + + @Override + public void verify(PublicKey key, String sigProvider) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException { + + } + + @Override + public String toString() { + return null; + } + + @Override + public PublicKey getPublicKey() { + return null; + } + + @Override + public boolean hasUnsupportedCriticalExtension() { + return false; + } + + @Override + public Set getCriticalExtensionOIDs() { + return null; + } + + @Override + public Set getNonCriticalExtensionOIDs() { + return null; + } + + @Override + public byte[] getExtensionValue(String oid) { + if (oid.equals(PKCSObjectIdentifiers.pkcs_9_at_challengePassword.toString())) { + return EXT.getBytes(); + } else { + return new byte[0]; + } + } +} diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/testng.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/testng.xml index f96d8b329d5..aafb64008d6 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/testng.xml +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/testng.xml @@ -13,4 +13,5 @@ - \ No newline at end of file + +