Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package cz.muni.ics.remsig.impl; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import static cz.muni.ics.remsig.impl.CertificateManagerImpl.STATE_EXPIRED; import static cz.muni.ics.remsig.impl.CertificateManagerImpl.STATE_NOT_YET_VALID; import static cz.muni.ics.remsig.impl.CertificateManagerImpl.STATE_PASSWORD_RESET; import static cz.muni.ics.remsig.impl.CertificateManagerImpl.STATE_REVOKED; import static cz.muni.ics.remsig.impl.CertificateManagerImpl.STATE_SUSPENDED; import static cz.muni.ics.remsig.impl.CertificateManagerImpl.STATE_VALID; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.Security; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Properties; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.dbunit.DBTestCase; import org.dbunit.IDatabaseTester; import org.dbunit.JdbcDatabaseTester; import org.dbunit.PropertiesBasedJdbcDatabaseTester; import org.dbunit.database.IDatabaseConnection; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.ITable; import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; import org.dbunit.operation.DatabaseOperation; import org.junit.After; import org.junit.AfterClass; import static org.junit.Assert.*; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.Mock; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.w3c.dom.Document; import javax.xml.transform.TransformerException; import org.dbunit.database.DatabaseConfig; import org.dbunit.database.DatabaseConnection; import org.dbunit.ext.mysql.MySqlDataTypeFactory; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.core.IsNot.not; /** * * @author Miroslav */ public class CertificateManagerImplTestRefact extends DBTestCase { private CertificateManagerImpl manager; private Properties configuration; public static final String CONFIG_FILE = "/etc/remsig/remsig.properties"; private final static org.slf4j.Logger logger = LoggerFactory.getLogger(CertificateManagerImplTest.class); private IDatabaseTester databaseTester; private IDatabaseConnection dbUnitConnection; private Connection connection; private java.sql.Statement statement; TestManager testManager = new TestManager(); org.w3c.dom.Document testDocument1 = null; org.w3c.dom.Document testDocument2 = null; org.w3c.dom.Document testDocument3 = null; org.w3c.dom.Document testDocument4 = null; org.w3c.dom.Document testDocument5 = null; org.w3c.dom.Document testDocument6 = null; org.w3c.dom.Document testDocument7 = null; org.w3c.dom.Document testDocument8 = null; org.w3c.dom.Document testDocument9 = null; Person anderson = new Person(1); Person bobaFet = new Person(2); Person cyril = new Person(3); Person daryl = new Person(4); Person eva = new Person(5); Person frank = new Person(6); Person gregor = new Person(7); Person helena = new Person(8); Person igor = new Person(9); Person jane = new Person(10); String andersonDefPass = "123456"; String bobaFetDefPass = "bobaFet1"; String cyrilDefPass = "654321"; String darylDefPass = "g8r4d2"; String evaDefPass = "strongpassword"; String frankDefPass = "frankrulles"; String gregorDefPass = "password"; String helenaDefPass = ""; String igorDefPass = "forever"; String janeDefPass = "h86fds"; int andersonCerId = 0; int bobaFetCerId = 0; int cyrilCerId = 0; private String initXmlDoc = "test/testFiles/NewInitDatabase.xml"; // dataset private String workingDatabase = "test/testFiles/NewInitDatabase.xml"; private ITable expectedTable = null; @Mock Service service; @Override protected IDataSet getDataSet() throws Exception { return new FlatXmlDataSetBuilder().build(new FileInputStream(initXmlDoc)); } public CertificateManagerImplTestRefact() { } public CertificateManagerImplTestRefact(String name) { super(name); System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "com.mysql.jdbc.Driver"); // in case of trouble this need to be changedcom.mysql.jdbc.Driver System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:mysql://localhost:3306/Remsig?zeroDateTimeBehavior=convertToNull"); System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "remsig"); System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, ""); // } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } @Override protected DatabaseOperation getSetUpOperation() throws Exception { return DatabaseOperation.DELETE_ALL; } @Before @Override public void setUp() throws Exception { getSetUpOperation(); configuration = new Properties(); try (FileInputStream input = new FileInputStream(CONFIG_FILE)) { configuration.load(input); } catch (FileNotFoundException ex) { throw new RemSigException("Configuration properties file not found", ex, ErrorCode.ERROR258EN); } catch (IOException ex) { throw new RemSigException("Error while loading configuration properties", ex, ErrorCode.ERROR259EN); } databaseTester = new JdbcDatabaseTester("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/Remsig?zeroDateTimeBehavior=convertToNull", "remsig", "") { @Override public IDatabaseConnection getConnection() throws Exception { IDatabaseConnection connection = super.getConnection(); connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory()); return connection; } }; IDataSet dataSet = new FlatXmlDataSetBuilder().setColumnSensing(true) .build(new FileInputStream(initXmlDoc)); databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL); databaseTester.setDataSet(dataSet); databaseTester.setSetUpOperation(DatabaseOperation.REFRESH); databaseTester.onSetup(); dbUnitConnection = databaseTester.getConnection(); connection = dbUnitConnection.getConnection(); statement = connection.createStatement(); expectedTable = dataSet.getTable("credentials"); } @Override protected void setUpDatabaseConfig(DatabaseConfig config) { config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory()); } @After @Override public void tearDown() throws Exception { databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL); databaseTester.onTearDown(); } /** * Test of generateRequest method, of class CertificateManagerImpl. */ @Test public void testGenerateRequest() throws Exception { docInit(); // one way to clear database databaseTester.setSetUpOperation(DatabaseOperation.DELETE_ALL); databaseTester.onSetup(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); Person person = new Person(5); String password = "weakpassword"; int numberOfInsertedRecords = 5; try { testDocument5 = manager.generateRequest(person, password); testDocument1 = manager.generateRequest(new Person(83512), "K845F234J98"); testDocument2 = manager.generateRequest(new Person(7), "mIKp443SDJI"); testDocument3 = manager.generateRequest(new Person(6), password); testDocument4 = manager.generateRequest(person, password); try { manager.generateRequest(null, "somepass"); manager.generateRequest(person, null); manager.generateRequest(null, null); } catch (NullPointerException e) { fail("UncaughtNullPointerException" + e.getMessage()); } ResultSet r = statement.executeQuery("SELECT COUNT(*) AS rowcount FROM credentials"); r.next(); int count = r.getInt("rowcount"); assertEquals("Inserting into empty database failed either somerecords " + "werent inserted or some null value were" + "expected count" + numberOfInsertedRecords + "row value " + count, numberOfInsertedRecords, count); IDataSet dataSet = new FlatXmlDataSetBuilder().build(new FileInputStream(workingDatabase)); databaseTester.setDataSet(dataSet); databaseTester.setSetUpOperation(DatabaseOperation.REFRESH); databaseTester.onSetup(); r = statement.executeQuery("SELECT COUNT(*) AS newRowCount FROM credentials"); r.next(); int finalRowCount = r.getInt("newRowCount") + numberOfInsertedRecords; // inserting additional request testDocument5 = manager.generateRequest(person, "greatPass"); testDocument6 = manager.generateRequest(new Person(83512), "K845F234J98"); testDocument7 = manager.generateRequest(new Person(8), "mIKp443SDJI"); manager.generateRequest(new Person(9), "greatPass"); manager.generateRequest(person, "greatPass"); try { manager.generateRequest(null, "somepass"); manager.generateRequest(person, null); manager.generateRequest(null, null); } catch (NullPointerException e) { } r = statement.executeQuery("SELECT COUNT(*) AS rowcount FROM credentials"); r.next(); count = r.getInt("rowcount"); assertEquals(finalRowCount, count); r = statement.executeQuery( "SELECT userID,private_key,request,pubkey_hash,salt, key_backup" + " FROM credentials"); String[] dataBaseEntry = new String[] { "userID", "private_key", "pubkey_hash", "salt", "key_backup" }; testManager.chcekNullValuesOfDatabase(r, dataBaseEntry); r.close(); } catch (RemSigException ex) { System.out.println("remsign exception was thrown while generating request" + ex); } } @Test public void testImportPKCS12() throws Exception { docInit(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); /** * Standard for loading p12 files * In order to test multiple p12 certificates it is nessacery to set proper * name and pass to certificates they are not included in any files * */ // 1 and 2 are the same certificates String p12Certificate1 = testManager.loadPKCS12("test/testFiles/sub1-cert.p12"); String p12Certificate2 = testManager.loadPKCS12("test/testFiles/sub1-cert.p12"); // In case of multiple certificates to test String p12Certificate3 = testManager.loadPKCS12("test/testFiles/sub2-cert.p12"); String p12Certificate4 = testManager.loadPKCS12("test/testFiles/sub3-cert.p12"); String p12Certificate5 = testManager.loadPKCS12("test/testFiles/sub1-cert.p12"); String p12Certificate6 = testManager.loadPKCS12("test/testFiles/sub2-cert.p12"); String p12passToCer3 = "123456"; String p12passToCer4 = "123456"; String p12passToCer5 = "123456"; String p12passToCer6 = "123456"; String p12passToCer1 = "123456"; String p12passToCer2 = "123456"; /** * Test with one working certificate */ testDocument1 = manager.importPKCS12(anderson, p12Certificate1, andersonDefPass, p12passToCer1); testDocument2 = manager.importPKCS12(bobaFet, p12Certificate2, bobaFetDefPass, p12passToCer2); int doc1 = Integer.parseInt(testManager.extractElementFromXmlDoc(testDocument1, "requestId")); int doc2 = Integer.parseInt(testManager.extractElementFromXmlDoc(testDocument2, "requestId")); ResultSet r = statement.executeQuery("SELECT userId, certificate, private_key, dn, serial, issuer," + "expiration_from, expiration_to, pubkey_hash, key_backup, salt," + "chain FROM credentials WHERE (userId = 1 AND id = " + doc1 + ") OR (userId = 2 AND id = " + doc2 + ") "); String[] dataBaseEntry = new String[] { "userId", "certificate", "private_key", "dn", "serial", "issuer", "expiration_from", "expiration_to", "pubkey_hash", "key_backup", "salt", "chain" }; testManager.chcekNullValuesOfDatabase(r, dataBaseEntry); r.close(); try { manager.importPKCS12(anderson, p12passToCer2, null, p12passToCer2); manager.importPKCS12(null, p12passToCer2, andersonDefPass, p12passToCer2); manager.importPKCS12(anderson, null, andersonDefPass, p12passToCer2); manager.importPKCS12(anderson, p12passToCer2, andersonDefPass, p12passToCer2); manager.importPKCS12(anderson, p12passToCer2, andersonDefPass, null); manager.importPKCS12(null, p12passToCer2, null, p12passToCer2); manager.importPKCS12(anderson, null, andersonDefPass, null); manager.importPKCS12(null, null, null, null); } catch (Exception e) { //fail("Uncaucght nullPointerException" +e); } ResultSet r1 = statement.executeQuery("SELECT certificate,dn, serial, issuer," + "expiration_from, expiration_to" + " FROM credentials WHERE (userId = 1 AND id = " + doc1 + ") OR (userId = 2 AND id = " + doc2 + ") "); String[] dataBaseEntry1 = new String[] { "certificate", "dn", "serial", "issuer", "expiration_from", "expiration_to" }; testManager.chcekValuesOfTwoDatabaseEntries(r1, dataBaseEntry1); r1.close(); testDocument3 = manager.importPKCS12(cyril, p12Certificate3, cyrilDefPass, p12passToCer3); testDocument4 = manager.importPKCS12(daryl, p12Certificate4, darylDefPass, p12passToCer4); testDocument5 = manager.importPKCS12(eva, p12Certificate5, evaDefPass, p12passToCer5); testDocument6 = manager.importPKCS12(frank, p12Certificate6, frankDefPass, p12passToCer6); int doc3 = Integer.parseInt(testManager.extractElementFromXmlDoc(testDocument3, "requestId")); int doc4 = Integer.parseInt(testManager.extractElementFromXmlDoc(testDocument4, "requestId")); int doc5 = Integer.parseInt(testManager.extractElementFromXmlDoc(testDocument5, "requestId")); int doc6 = Integer.parseInt(testManager.extractElementFromXmlDoc(testDocument6, "requestId")); ResultSet r2 = statement.executeQuery("SELECT userId, certificate, private_key, dn, serial, issuer," + "expiration_from, expiration_to, pubkey_hash, key_backup, salt," + "chain FROM credentials WHERE (userId = 1 AND id = " + doc1 + ") OR (userId = 2 AND id = " + doc2 + ") OR " + "(userId = 3 AND id = " + doc3 + ") OR (userId = 4 AND id = " + doc4 + ") OR" + "(userId = 5 AND id = " + doc5 + ") OR (userId = 4 AND id = " + doc4 + ")"); testManager.chcekNullValuesOfDatabase(r2, dataBaseEntry1); ResultSet r3 = statement .executeQuery("SELECT certificate,dn, serial, issuer," + "expiration_from, expiration_to" + " FROM credentials WHERE (userId = 1 AND id = " + doc1 + ") OR (userId = 2 AND id = " + doc2 + ") OR " + "(userId = 3 AND id = " + doc3 + ") OR (userId = 4 AND id = " + doc4 + ") OR" + "(userId = 5 AND id = " + doc5 + ") OR (userId = 4 AND id = " + doc4 + ")"); String[] dataBaseEntry3 = new String[] { "certificate", "dn", "serial", "issuer", "expiration_from", "expiration_to" }; testManager.chcekNonEqualValuesOfDatabase(r3, dataBaseEntry3, 5); r2.close(); r3.close(); try { testDocument1 = manager.importPKCS12(anderson, p12Certificate1, bobaFetDefPass, p12passToCer1); testDocument1 = manager.importPKCS12(anderson, "notfile", andersonDefPass, p12passToCer1); testDocument1 = manager.importPKCS12(anderson, p12Certificate1, andersonDefPass, "wrongpass"); testDocument1 = manager.importPKCS12(bobaFet, p12Certificate1, andersonDefPass, p12passToCer1); testDocument1 = manager.importPKCS12(anderson, "notfile", andersonDefPass, "wrongpass"); testDocument1 = manager.importPKCS12(anderson, "notfile", cyrilDefPass, "wrongpass"); } catch (Exception e) { } } /** * This test works under assumption that in database already exist 3 records * of imported p12 certificates, Method generateXmlForSetUp() generates * xml database entry necessary for this test * @throws Exception */ @Test public void testExportPKCS12() throws Exception { docInit(); setUpId(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); String p12passToCer1 = "123456"; String p12passToCer2 = "123456"; String p12passToCer3 = "123456"; try { testDocument1 = manager.exportPKCS12(null, andersonCerId, andersonDefPass, p12passToCer1); testDocument2 = manager.exportPKCS12(anderson, andersonCerId, null, p12passToCer1); testDocument3 = manager.exportPKCS12(anderson, andersonCerId, andersonDefPass, null); testDocument4 = manager.exportPKCS12(null, andersonCerId, null, p12passToCer1); testDocument5 = manager.exportPKCS12(null, andersonCerId, andersonDefPass, null); testDocument6 = manager.exportPKCS12(anderson, andersonCerId, null, null); testDocument7 = manager.exportPKCS12(null, andersonCerId, null, null); Document[] allDoc = new Document[] { testDocument1, testDocument2, testDocument3, testDocument4, testDocument5, testDocument6, testDocument7 }; if (0 != testManager.chceckDocuments(allDoc, 0, 0)) { fail("some key was uploaded with null values"); } } catch (NullPointerException e) { fail("Uncaught nullPointerException"); } try { testDocument1 = manager.exportPKCS12(anderson, andersonCerId, andersonDefPass, p12passToCer1); testDocument2 = manager.exportPKCS12(anderson, bobaFetCerId, andersonDefPass, p12passToCer1); testDocument3 = manager.exportPKCS12(anderson, andersonCerId, cyrilDefPass, p12passToCer1); testDocument4 = manager.exportPKCS12(anderson, andersonCerId, andersonDefPass, p12passToCer3); testDocument5 = manager.exportPKCS12(bobaFet, bobaFetCerId, andersonDefPass, p12passToCer1); testDocument6 = manager.exportPKCS12(anderson, andersonCerId, cyrilDefPass, p12passToCer3); testDocument7 = manager.exportPKCS12(bobaFet, cyrilCerId, cyrilDefPass, p12passToCer3); assertNull(testManager.extractElementFromXmlDoc(testDocument1, "pkcs12")); assertNull(testManager.extractElementFromXmlDoc(testDocument2, "pkcs12")); assertNull(testManager.extractElementFromXmlDoc(testDocument3, "pkcs12")); assertNull(testManager.extractElementFromXmlDoc(testDocument4, "pkcs12")); assertNull(testManager.extractElementFromXmlDoc(testDocument5, "pkcs12")); assertNull(testManager.extractElementFromXmlDoc(testDocument6, "pkcs12")); assertNull(testManager.extractElementFromXmlDoc(testDocument7, "pkcs12")); } catch (Exception e) { } try { testDocument1 = manager.exportPKCS12(anderson, andersonCerId, andersonDefPass, p12passToCer1); testDocument2 = manager.exportPKCS12(bobaFet, bobaFetCerId, bobaFetDefPass, p12passToCer2); testDocument3 = manager.exportPKCS12(cyril, cyrilCerId, cyrilDefPass, p12passToCer3); } catch (Exception e) { fail(e.getMessage()); } try { testManager.exportDocIntoXml("test/testFiles/output/testexportPKCS121.xml", testDocument1); testManager.exportDocIntoXml("test/testFiles/output/testexportPKCS122.xml", testDocument2); testManager.exportDocIntoXml("test/testFiles/output/testexportPKCS123.xml", testDocument3); databaseTester.setSetUpOperation(DatabaseOperation.DELETE_ALL); databaseTester.onSetup(); } catch (Exception ex) { fail(ex.getMessage()); } FileInputStream xmlDoc1 = new FileInputStream("test0001.xml"); FileInputStream xmlDoc2 = new FileInputStream("test0002.xml"); FileInputStream xmlDoc3 = new FileInputStream("test0003.xml"); String doc1p12 = testManager.extractElementFromXmlDoc(testDocument1, "pkcs12"); String doc2p12 = testManager.extractElementFromXmlDoc(testDocument2, "pkcs12"); String doc3p12 = testManager.extractElementFromXmlDoc(testDocument3, "pkcs12"); assertNotNull(doc1p12); assertNotNull(doc2p12); assertNotNull(doc3p12); } @Test public void testCheckPassword() throws Exception { docInit(); setUpId(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); try { manager.checkPassword(anderson, andersonCerId, andersonDefPass); manager.checkPassword(bobaFet, bobaFetCerId, bobaFetDefPass); manager.checkPassword(cyril, cyrilCerId, cyrilDefPass); try { manager.checkPassword(anderson, andersonCerId, darylDefPass); manager.checkPassword(anderson, andersonCerId, bobaFetDefPass); manager.checkPassword(anderson, andersonCerId, cyrilDefPass); manager.checkPassword(bobaFet, bobaFetCerId, andersonDefPass); manager.checkPassword(bobaFet, bobaFetCerId, darylDefPass); manager.checkPassword(bobaFet, bobaFetCerId, cyrilDefPass); manager.checkPassword(cyril, cyrilCerId, andersonDefPass); manager.checkPassword(cyril, cyrilCerId, bobaFetDefPass); manager.checkPassword(cyril, cyrilCerId, darylDefPass); fail("Password that werent same passed"); } catch (RemSigException e) { } } catch (Exception e) { fail("password that was supposed to be same didnt passed "); } try { manager.checkPassword(anderson, andersonCerId, null); manager.checkPassword(null, andersonCerId, andersonDefPass); manager.checkPassword(null, andersonCerId, andersonDefPass); } catch (NullPointerException e) { fail("Uncaught null pointer exception"); } } /** * This test is dependent on working of method check password * Test of changePassword method, of class CertificateManagerImpl. */ @Test public void testChangePassword() throws Exception { docInit(); setUpId(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); try { manager.changePassword(eva, andersonCerId, andersonDefPass, andersonDefPass); manager.changePassword(anderson, bobaFetCerId, andersonDefPass, andersonDefPass); manager.changePassword(anderson, andersonCerId, igorDefPass, igorDefPass); manager.changePassword(anderson, 0, andersonDefPass, igorDefPass); manager.changePassword(bobaFet, bobaFetCerId, bobaFetDefPass, gregorDefPass); manager.changePassword(bobaFet, cyrilCerId, bobaFetDefPass, gregorDefPass); manager.changePassword(bobaFet, bobaFetCerId, cyrilDefPass, gregorDefPass); fail("Some problem with autentication passwords that wasnt supposed to match " + "or id passed autentication when it was expected to fail"); } catch (Exception e) { } try { manager.changePassword(null, andersonCerId, andersonDefPass, andersonDefPass); manager.changePassword(anderson, bobaFetCerId, andersonDefPass, andersonDefPass); manager.changePassword(anderson, andersonCerId, null, igorDefPass); manager.changePassword(anderson, 0, andersonDefPass, igorDefPass); manager.changePassword(null, bobaFetCerId, null, gregorDefPass); manager.changePassword(null, cyrilCerId, null, null); manager.changePassword(null, 0, null, null); } catch (NullPointerException e) { fail("nullPointer exception was not caught" + e); } try { manager.changePassword(anderson, andersonCerId, andersonDefPass, igorDefPass); manager.changePassword(bobaFet, bobaFetCerId, bobaFetDefPass, gregorDefPass); manager.checkPassword(anderson, andersonCerId, igorDefPass); manager.checkPassword(bobaFet, bobaFetCerId, gregorDefPass); manager.checkPassword(cyril, cyrilCerId, cyrilDefPass); } catch (RemSigException e) { fail(e.getMessage()); } } /** * * Test of resetPassword method, of class CertificateManagerImpl. */ @Test public void testResetPassword() throws Exception { docInit(); setUpId(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); try { manager.resetPassword(null, andersonCerId); } catch (NullPointerException e) { fail("Uncaught nullPointerException"); } try { manager.checkPassword(anderson, andersonCerId, andersonDefPass); testDocument2 = manager.resetPassword(anderson, andersonCerId); testManager.exportDocIntoXml("testResetpass.xml", testDocument2); manager.checkPassword(anderson, andersonCerId, andersonDefPass); fail("password didnt change"); } catch (RemSigException | TransformerException e) { } try { manager.checkPassword(anderson, andersonCerId, andersonDefPass); testDocument1 = manager.resetPassword(anderson, andersonCerId); testManager.exportDocIntoXml("testResetpass.xml", testDocument1); String newPass = testManager.extractElementFromXmlDoc(testDocument1, "password"); manager.checkPassword(anderson, andersonCerId, newPass); manager.checkPassword(anderson, andersonCerId, andersonDefPass); } catch (Exception e) { fail("failed to reset password "); } } @Test public void testChangeCertificateStatus() throws Exception { docInit(); setUpId(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); String rule = "userId =" + bobaFet.getId() + " AND id = " + bobaFetCerId + ""; int ko = -1; String test = "a"; try { if (null != (testManager.extractOneCollumFromDatabase("state", "credentials", rule))) { fail("inicial status should be null"); } manager.changeCertificateStatus(null, bobaFetCerId, STATE_SUSPENDED); } catch (NullPointerException e) { fail("unCaught nullPointerException"); } // testing standard changing of the certificate status try { manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_SUSPENDED); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_SUSPENDED); manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_VALID); test = testManager.extractOneCollumFromDatabase("state", "credentials", rule); assertNull(test); manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_SUSPENDED); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_SUSPENDED); manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_EXPIRED); test = testManager.extractOneCollumFromDatabase("state", "credentials", rule); assertNull(test); manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_SUSPENDED); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_SUSPENDED); manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_NOT_YET_VALID); test = testManager.extractOneCollumFromDatabase("state", "credentials", rule); assertNull(test); } catch (NullPointerException e) { fail("failed to change status as expected"); } // testing if status does change after certificate is revoked try { manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_REVOKED); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_REVOKED); manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_SUSPENDED); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_REVOKED); manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_VALID); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_REVOKED); manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_EXPIRED); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_REVOKED); manager.changeCertificateStatus(bobaFet, bobaFetCerId, STATE_PASSWORD_RESET); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_REVOKED); } catch (RemSigException | NumberFormatException e) { fail("exception was thrown" + e); } ko = -1; rule = "userId =" + cyril.getId() + " AND id = " + cyrilCerId + ""; if (null != (testManager.extractOneCollumFromDatabase("state", "credentials", rule))) { fail("inicial status should be null"); } // testing if certificate status changes after password is reseted try { manager.changeCertificateStatus(cyril, cyrilCerId, STATE_PASSWORD_RESET); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_PASSWORD_RESET); manager.changeCertificateStatus(cyril, cyrilCerId, STATE_SUSPENDED); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_PASSWORD_RESET); manager.changeCertificateStatus(cyril, cyrilCerId, STATE_VALID); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_PASSWORD_RESET); manager.changeCertificateStatus(cyril, cyrilCerId, STATE_REVOKED); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_PASSWORD_RESET); manager.changeCertificateStatus(cyril, cyrilCerId, STATE_NOT_YET_VALID); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_PASSWORD_RESET); manager.changeCertificateStatus(cyril, cyrilCerId, STATE_EXPIRED); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, STATE_PASSWORD_RESET); } catch (RemSigException | NumberFormatException e) { fail("exception was thrown" + e); } // testing if certificate status doesnt change to something weird try { int init = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); manager.changeCertificateStatus(cyril, cyrilCerId, 59); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, init); manager.changeCertificateStatus(cyril, cyrilCerId, -6); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, init); manager.changeCertificateStatus(cyril, cyrilCerId, Integer.MAX_VALUE + 1); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, init); manager.changeCertificateStatus(cyril, cyrilCerId, Integer.MIN_VALUE - 1); ko = Integer.parseInt(testManager.extractOneCollumFromDatabase("state", "credentials", rule)); assertEquals(ko, init); } catch (NumberFormatException | RemSigException e) { } } @Test public void testListCertificatesWithStatus() throws Exception { docInit(); setUpId(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); try { manager.listCertificatesWithStatus(null, 1); } catch (NullPointerException e) { fail("unreported nullPpointerException"); } statement.execute("UPDATE credentials SET state= null WHERE userId=" + anderson.getId() + " AND id= " + andersonCerId); statement.execute("UPDATE credentials SET state= null, expiration_from = 1480075200 WHERE userId=" + bobaFet.getId() + " AND id= " + bobaFetCerId); statement.execute("UPDATE credentials SET state= null, expiration_to = 1453161600 WHERE userId=" + cyril.getId() + " AND id= " + cyrilCerId); testDocument1 = manager.listCertificatesWithStatus(anderson, STATE_VALID); testDocument2 = manager.listCertificatesWithStatus(bobaFet, STATE_NOT_YET_VALID); testDocument3 = manager.listCertificatesWithStatus(cyril, STATE_EXPIRED); testManager.exportDocIntoXml("test/testFiles/output/testListCertificateWithStatus1.xml", testDocument1); testManager.exportDocIntoXml("test/testFiles/output/testListCertificateWithStatus2.xml", testDocument2); testManager.exportDocIntoXml("test/testFiles/output/testListCertificateWithStatus3.xml", testDocument3); // chain and certificate is modified in extractMultipleColuumsFromDatabase there is // extra line seperator at the end String[] xmlExtraction = new String[] { "dn", "issuer", "serialNumber", "expirationFrom", "expirationTo", "certificatePEM", "chainPEM" }; String[] databaseExtraction = new String[] { "dn", "issuer", "serial", "expiration_From", "expiration_To", "certificate", "chain" }; String ruleA = "id =" + andersonCerId + " AND userId =" + anderson.getId(); String ruleB = "id =" + bobaFetCerId + " AND userId =" + bobaFet.getId(); String ruleC = "id =" + cyrilCerId + " AND userId =" + cyril.getId(); try { ArrayList<String> dataFromDoc = extractMultipleElementsFromDoc(xmlExtraction, testDocument1); ArrayList<String> dataFromDatabase = extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleA); for (int i = 0; i < dataFromDoc.size(); i++) { assertEquals("at element " + databaseExtraction[i], dataFromDoc.get(i), dataFromDatabase.get(i)); } dataFromDoc = extractMultipleElementsFromDoc(xmlExtraction, testDocument2); dataFromDatabase = extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleB); for (int i = 0; i < dataFromDoc.size(); i++) { assertEquals("at element " + databaseExtraction[i], dataFromDoc.get(i), dataFromDatabase.get(i)); } dataFromDoc = extractMultipleElementsFromDoc(xmlExtraction, testDocument3); dataFromDatabase = extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleC); for (int i = 0; i < dataFromDoc.size(); i++) { assertEquals("at element " + databaseExtraction[i], dataFromDoc.get(i), dataFromDatabase.get(i)); } } catch (Exception e) { fail(e.getMessage()); } try { statement.execute("UPDATE credentials SET state= " + STATE_REVOKED + " WHERE userId=" + anderson.getId() + " AND id= " + andersonCerId); statement.execute("UPDATE credentials SET state= " + STATE_SUSPENDED + ", expiration_from = 1453161600 WHERE userId=" + bobaFet.getId() + " AND id= " + bobaFetCerId); statement.execute("UPDATE credentials SET state= " + STATE_PASSWORD_RESET + ", expiration_to = 1480075200 WHERE userId=" + cyril.getId() + " AND id= " + cyrilCerId); testDocument4 = manager.listCertificatesWithStatus(anderson, STATE_REVOKED); testDocument5 = manager.listCertificatesWithStatus(bobaFet, STATE_SUSPENDED); testDocument6 = manager.listCertificatesWithStatus(cyril, STATE_PASSWORD_RESET); ArrayList<String> dataFromDoc = extractMultipleElementsFromDoc(xmlExtraction, testDocument4); ArrayList<String> dataFromDatabase = extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleA); for (int i = 0; i < dataFromDoc.size(); i++) { assertEquals("at element " + databaseExtraction[i], dataFromDoc.get(i), dataFromDatabase.get(i)); } dataFromDoc = extractMultipleElementsFromDoc(xmlExtraction, testDocument5); dataFromDatabase = extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleB); for (int i = 0; i < dataFromDoc.size(); i++) { assertEquals("at element " + databaseExtraction[i], dataFromDoc.get(i), dataFromDatabase.get(i)); } dataFromDoc = extractMultipleElementsFromDoc(xmlExtraction, testDocument6); dataFromDatabase = extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleC); for (int i = 0; i < dataFromDoc.size(); i++) { assertEquals("at element " + databaseExtraction[i], dataFromDoc.get(i), dataFromDatabase.get(i)); } } catch (SQLException | RemSigException e) { fail("there was error listing certificate " + e); } } /** *Removes blank space from end of inputfile * Right now is used for certificate and chain * @param input file to be removed * @return input - one lineSeparator */ public String changeEndCertificate(String input) { String toBefound = "END CERTIFICATE-----" + System.lineSeparator(); String replaceWith = "END CERTIFICATE-----"; String replace = input.replace(toBefound, replaceWith); return replace; } /** * Takes string array and extract * @param elements * @param doc * @return */ public ArrayList<String> extractMultipleElementsFromDoc(String[] elements, Document doc) { ArrayList<String> result = new ArrayList<>(); for (String element : elements) { result.add(testManager.extractElementFromXmlDoc(doc, element)); } return result; } public ArrayList<String> extractMultipleCollumsFromDatabase(String[] dataToBeExtracted, String databaseName, String rule) { ArrayList<String> result = new ArrayList<String>(); String temp = null; for (String rowName : dataToBeExtracted) { try { ResultSet r = statement.executeQuery( "SELECT " + rowName + "" + " FROM " + databaseName + " " + "WHERE (" + rule + ")"); r.next(); temp = r.getString(rowName); if (rowName.equals("chain") || rowName.equals("certificate")) { temp = changeEndCertificate(temp); } result.add(temp); } catch (SQLException ex) { System.out.println("Failed to load data " + rowName + " from " + databaseName + " "); } } return result; } @Test public void testListAllCertificatesWithStatus() throws Exception { docInit(); setUpId(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); String ruleA = "userId =" + anderson.getId() + " AND id = " + andersonCerId + ""; String ruleB = "userId =" + bobaFet.getId() + " AND id = " + bobaFetCerId + ""; String ruleC = "userId =" + cyril.getId() + " AND id = " + cyrilCerId + ""; ArrayList<String> databaseAnderson; ArrayList<String> databaseCyril; ArrayList<String> databaseBobaFet; String[] xmlExtraction = new String[] { "dn", "issuer", "serialNumber", "expirationFrom", "expirationTo", "certificatePEM", "chainPEM" }; String[] databaseExtraction = new String[] { "dn", "issuer", "serial", "expiration_From", "expiration_To", "certificate", "chain" }; databaseAnderson = testManager.extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleA); databaseBobaFet = testManager.extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleB); databaseCyril = testManager.extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleC); statement.execute("UPDATE credentials SET state= " + STATE_REVOKED + " WHERE userId=" + anderson.getId() + " AND id= " + andersonCerId); statement.execute("UPDATE credentials SET state= " + STATE_SUSPENDED + " WHERE userId=" + bobaFet.getId() + " AND id= " + bobaFetCerId); statement.execute("UPDATE credentials SET state= " + STATE_REVOKED + " WHERE userId=" + cyril.getId() + " AND id= " + cyrilCerId); testDocument1 = manager.listAllCertificatesWithStatus(STATE_REVOKED); testDocument2 = manager.listAllCertificatesWithStatus(STATE_SUSPENDED); ArrayList<String[]> revokedData = testManager.parseXmlDoc(testDocument1, xmlExtraction); ArrayList<String[]> suspendedData = testManager.parseXmlDoc(testDocument2, xmlExtraction); if (revokedData.size() == 2) { databaseAnderson = testManager.extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleA); databaseCyril = testManager.extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleC); databaseBobaFet = testManager.extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleB); assertArrayEquals(databaseAnderson.toArray(), revokedData.get(0)); assertArrayEquals(databaseCyril.toArray(), revokedData.get(1)); assertArrayEquals(databaseBobaFet.toArray(), suspendedData.get(0)); } statement.execute("UPDATE credentials SET state= " + "null" + " WHERE userId=" + anderson.getId() + " AND id= " + andersonCerId); statement.execute("UPDATE credentials SET state= " + "null" + " WHERE userId=" + bobaFet.getId() + " AND id= " + bobaFetCerId); statement.execute("UPDATE credentials SET state= " + "null" + " WHERE userId=" + cyril.getId() + " AND id= " + cyrilCerId); testDocument3 = manager.listAllCertificatesWithStatus(STATE_VALID); ArrayList<String[]> validData = testManager.parseXmlDoc(testDocument3, xmlExtraction); assertArrayEquals(databaseAnderson.toArray(), validData.get(0)); assertArrayEquals(databaseBobaFet.toArray(), validData.get(1)); assertArrayEquals(databaseCyril.toArray(), validData.get(2)); statement.execute("UPDATE credentials SET state= " + STATE_PASSWORD_RESET + " WHERE userId=" + anderson.getId() + " AND id= " + andersonCerId); statement.execute("UPDATE credentials SET state= null, expiration_from = 1480075200 WHERE userId=" + bobaFet.getId() + " AND id= " + bobaFetCerId); statement.execute("UPDATE credentials SET state= null, expiration_to = 1453161600 WHERE userId=" + cyril.getId() + " AND id= " + cyrilCerId); testDocument4 = manager.listAllCertificatesWithStatus(STATE_PASSWORD_RESET); testDocument5 = manager.listAllCertificatesWithStatus(STATE_NOT_YET_VALID); testDocument6 = manager.listAllCertificatesWithStatus(STATE_EXPIRED); databaseAnderson = testManager.extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleA); databaseBobaFet = testManager.extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleB); databaseCyril = testManager.extractMultipleCollumsFromDatabase(databaseExtraction, "credentials", ruleC); ArrayList<String[]> resetData = testManager.parseXmlDoc(testDocument4, xmlExtraction); ArrayList<String[]> notYetValidData = testManager.parseXmlDoc(testDocument5, xmlExtraction); ArrayList<String[]> expiredData = testManager.parseXmlDoc(testDocument6, xmlExtraction); assertArrayEquals(databaseAnderson.toArray(), resetData.get(0)); assertArrayEquals(databaseBobaFet.toArray(), notYetValidData.get(0)); assertArrayEquals(databaseCyril.toArray(), expiredData.get(0)); } /** * Test of uploadPrivateKey method, of class CertificateManagerImpl. */ @Test public void testUploadPrivateKey() throws Exception { docInit(); setUpId(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); byte[] differentData = new byte[] { 4, 2, 3, 4, 1, 23, 4, 1 }; byte[] privateKeyA = testManager.loadFileBytes("test/testFiles/testsubject1-key.pem"); byte[] privateKeyB = testManager.loadFileBytes("test/testFiles/testsubject2-key.pem"); byte[] privateKeyC = testManager.loadFileBytes("test/testFiles/testsubject3-key.pem"); testDocument1 = manager.resetPassword(anderson, andersonCerId); byte[] passHashA = testManager.extractElementFromXmlDoc(testDocument1, "password").getBytes(); testDocument2 = manager.resetPassword(bobaFet, bobaFetCerId); byte[] passHashB = testManager.extractElementFromXmlDoc(testDocument2, "password").getBytes(); String[] dataToBeExtracted = new String[] { "userId", "id", "dn", "issuer", "serial", "expiration_from", "expiration_to" }; String ruleA = "userId =" + anderson.getId() + " AND id = " + andersonCerId + ""; String ruleB = "userId =" + bobaFet.getId() + " AND id = " + bobaFetCerId + ""; String ruleC = "userId =" + cyril.getId() + " AND id = " + cyrilCerId + ""; try { testDocument3 = manager.uploadPrivateKey(null, anderson, cyrilCerId, differentData); testDocument4 = manager.uploadPrivateKey(differentData, anderson, cyrilCerId, null); testDocument5 = manager.uploadPrivateKey(null, anderson, cyrilCerId, null); testDocument6 = manager.uploadPrivateKey(differentData, null, cyrilCerId, differentData); testDocument7 = manager.uploadPrivateKey(null, null, cyrilCerId, differentData); testDocument8 = manager.uploadPrivateKey(null, null, cyrilCerId, null); } catch (NullPointerException e) { fail("uncaught null pointer exception"); } Document[] allDoc = new Document[] { testDocument3, testDocument4, testDocument5, testDocument6, testDocument7, testDocument8 }; if (0 != testManager.chceckDocuments(allDoc, 0, 0)) { fail("some key was uploaded with null values"); } try { String originalKey = testManager.extractOneCollumFromDatabase("private_key", "credentials", ruleA); testDocument2 = manager.uploadPrivateKey(privateKeyA, anderson, cyrilCerId, passHashA); testDocument3 = manager.uploadPrivateKey(privateKeyA, anderson, andersonCerId, differentData); testDocument4 = manager.uploadPrivateKey(privateKeyA, anderson, bobaFetCerId, differentData); String newPrivateKey = testManager.extractOneCollumFromDatabase("private_key", "credentials", ruleA); assertEquals(originalKey, newPrivateKey); } catch (RemSigException e) { } byte[] originalAnderson = testManager.extractOneCollumFromDatabase("private_key", "credentials", ruleA) .getBytes(); byte[] originalBobaFet = testManager.extractOneCollumFromDatabase("private_key", "credentials", ruleB) .getBytes(); byte[] originalCyril = testManager.extractOneCollumFromDatabase("private_key", "credentials", ruleC) .getBytes(); testDocument5 = manager.uploadPrivateKey(privateKeyA, anderson, andersonCerId, passHashA); testDocument6 = manager.uploadPrivateKey(privateKeyB, bobaFet, bobaFetCerId, passHashB); testDocument7 = manager.uploadPrivateKey(privateKeyC, cyril, cyrilCerId, differentData); byte[] uploadedAnderson = testManager.extractOneCollumFromDatabase("private_key", "credentials", ruleA) .getBytes(); byte[] uploadedBobaFet = testManager.extractOneCollumFromDatabase("private_key", "credentials", ruleB) .getBytes(); byte[] uploadedCyril = testManager.extractOneCollumFromDatabase("private_key", "credentials", ruleC) .getBytes(); try { assertThat("Key wasnt changed", originalAnderson, not(uploadedAnderson)); assertThat("Key wasnt changed", originalBobaFet, not(uploadedBobaFet)); assertThat("Key wasnt changed", originalCyril, is(uploadedCyril)); } catch (Error e) { fail(e.getMessage()); } } /** * Only testing expected outcome since nothing else can be properly tested * Test of stats method, of class CertificateManagerImpl. */ @Test public void testStats() throws Exception { docInit(); setUpId(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); testDocument1 = manager.stats(); String[] xmlExtraction = new String[] { "userId", "id", "dn", "issuer", "serialNumber", "expirationFrom", "expirationTo" }; String[] dataToBeExtracted = new String[] { "userId", "id", "dn", "issuer", "serial", "expiration_from", "expiration_to" }; ArrayList<String[]> xmlData = testManager.parseXmlDoc(testDocument1, xmlExtraction); String ruleA = "userId =" + anderson.getId() + " AND id = " + andersonCerId + ""; String ruleB = "userId =" + bobaFet.getId() + " AND id = " + bobaFetCerId + ""; String ruleC = "userId =" + cyril.getId() + " AND id = " + cyrilCerId + ""; ArrayList<String> databaseAndersonData = testManager.extractMultipleCollumsFromDatabase(dataToBeExtracted, "credentials", ruleA); ArrayList<String> databaseBobaFetData = testManager.extractMultipleCollumsFromDatabase(dataToBeExtracted, "credentials", ruleB); ArrayList<String> databaseCyrilData = testManager.extractMultipleCollumsFromDatabase(dataToBeExtracted, "credentials", ruleC); Object[] databaseAnderson = databaseAndersonData.toArray(); Object[] databaseBobaFet = databaseBobaFetData.toArray(); Object[] databaseCyril = databaseCyrilData.toArray(); assertArrayEquals(databaseAnderson, xmlData.get(0)); assertArrayEquals(databaseBobaFet, xmlData.get(1)); assertArrayEquals(databaseCyril, xmlData.get(2)); } @Test public void testImportCertificate() throws Exception { docInit(); setUpId(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); manager = new CertificateManagerImpl(configuration); manager.setJdbcTemplate((JdbcTemplate) ac.getBean("jdbcTemplate")); Security.addProvider(new BouncyCastleProvider()); String ruleA = "userId =" + anderson.getId() + " AND id = " + andersonCerId + ""; String ruleB = "userId =" + bobaFet.getId() + " AND id = " + bobaFetCerId + ""; String ruleC = "userId =" + cyril.getId() + " AND id = " + cyrilCerId + ""; String certchainA = testManager.extractOneCollumFromDatabase("chain", "credentials", ruleA); String certchainB = testManager.extractOneCollumFromDatabase("chain", "credentials", ruleB); String certchainC = testManager.extractOneCollumFromDatabase("chain", "credentials", ruleC); FileInputStream first = new FileInputStream("test/testFiles/testsubject1-cert.pem"); FileInputStream second = new FileInputStream("test/testFiles/testsubject2-cert.pem"); FileInputStream third = new FileInputStream("test/testFiles/testsubject3-cert.pem"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate firstCert = (X509Certificate) cf.generateCertificate(first); X509Certificate secondCert = (X509Certificate) cf.generateCertificate(second); X509Certificate thirdCert = (X509Certificate) cf.generateCertificate(third); try { testDocument1 = manager.importCertificate(anderson, null, certchainA); testDocument2 = manager.importCertificate(null, firstCert, certchainA); testDocument3 = manager.importCertificate(anderson, firstCert, null); testDocument4 = manager.importCertificate(null, null, certchainA); testDocument5 = manager.importCertificate(null, firstCert, null); testDocument6 = manager.importCertificate(anderson, null, null); testDocument7 = manager.importCertificate(null, null, null); Document[] allDoc = new Document[] { testDocument1, testDocument2, testDocument3, testDocument4, testDocument5, testDocument6, testDocument7 }; if (0 != testManager.chceckDocuments(allDoc, 0, 0)) { fail("some key was uploaded with null values"); } } catch (NullPointerException e) { fail("Unreported nullPinterException"); } try { testDocument1 = manager.importCertificate(anderson, firstCert, certchainC); testDocument2 = manager.importCertificate(bobaFet, firstCert, certchainA); testDocument3 = manager.importCertificate(cyril, thirdCert, certchainA); } catch (Exception e) { } try { testDocument1 = manager.importCertificate(anderson, firstCert, certchainA); testDocument2 = manager.importCertificate(bobaFet, secondCert, certchainB); testDocument3 = manager.importCertificate(cyril, thirdCert, certchainC); int doc1 = Integer.parseInt(testManager.extractElementFromXmlDoc(testDocument1, "Id")); int doc2 = Integer.parseInt(testManager.extractElementFromXmlDoc(testDocument2, "Id")); int doc3 = Integer.parseInt(testManager.extractElementFromXmlDoc(testDocument2, "Id")); ruleA = "userId =" + anderson.getId() + " AND id = " + doc1 + ""; ruleB = "userId =" + bobaFet.getId() + " AND id = " + doc2 + ""; ruleC = "userId =" + cyril.getId() + " AND id = " + doc3 + ""; String[] dataToBeExtracted = new String[] { "dn", "issuer", "serial", "expiration_From", "expiration_To", "certificate", "chain" }; ArrayList<String> databaseAndersonData = testManager .extractMultipleCollumsFromDatabase(dataToBeExtracted, "credentials", ruleA); ArrayList<String> databaseBobaFetData = testManager .extractMultipleCollumsFromDatabase(dataToBeExtracted, "credentials", ruleB); ArrayList<String> databaseCyrilData = testManager.extractMultipleCollumsFromDatabase(dataToBeExtracted, "credentials", ruleC); for (int i = 0; i < databaseAndersonData.size(); i++) { assertNotNull(databaseAndersonData.get(i)); assertNotNull(databaseBobaFetData.get(i)); assertNotNull(databaseCyrilData.get(i)); } } catch (Exception e) { fail("Did not imported certificate " + e.getMessage()); } } private void docInit() { testDocument1 = null; testDocument2 = null; testDocument3 = null; testDocument4 = null; testDocument5 = null; testDocument6 = null; testDocument7 = null; testDocument8 = null; testDocument9 = null; } public void setUpId() { try { ResultSet r1 = statement.executeQuery("SELECT id" + " FROM credentials WHERE (userId = " + anderson.getId() + " AND NOT (serial <=> NULL))"); r1.next(); andersonCerId = r1.getInt("id"); r1 = statement.executeQuery("SELECT id" + " FROM credentials WHERE (userId = " + bobaFet.getId() + " AND NOT (serial <=> NULL))"); r1.next(); bobaFetCerId = r1.getInt("id"); r1 = statement.executeQuery("SELECT id" + " FROM credentials WHERE (userId = " + cyril.getId() + " AND NOT (serial <=> NULL))"); r1.next(); cyrilCerId = r1.getInt("id"); r1.close(); } catch (SQLException e) { fail("failed to get certificate id from database "); } } }