/* DigiDoc4J library * * This software is released under either the GNU Library General Public * License (see LICENSE.LGPL). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2.1, February 1999 */ package org.digidoc4j.impl.bdoc.tsl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.digidoc4j.Configuration; import org.digidoc4j.TSLCertificateSource; import org.digidoc4j.impl.bdoc.SKCommonCertificateVerifier; import org.digidoc4j.testutils.TSLHelper; import org.junit.Before; import org.junit.Test; import eu.europa.esig.dss.x509.CertificatePool; public class LazyTslLoadingTest { private Configuration configuration; @Before public void setUp() throws Exception { configuration = new Configuration(Configuration.Mode.TEST); } @Test public void createLazyCertificatePool() throws Exception { TSLCertificateSource tsl = configuration.getTSL(); SKCommonCertificateVerifier certificateVerifier = new SKCommonCertificateVerifier(); certificateVerifier.setTrustedCertSource(tsl); CertificatePool certificatePool = certificateVerifier.createValidationPool(); assertTrue(certificatePool instanceof LazyCertificatePool); assertEquals(tsl.getCertificatePool().getNumberOfCertificates(), certificatePool.getNumberOfCertificates()); } @Test public void populateParameters_withoutDownloadingTsl() throws Exception { deleteTSLCache(); assertTrue(isTslCacheEmpty()); TSLCertificateSource tsl = configuration.getTSL(); assertTrue(isTslCacheEmpty()); SKCommonCertificateVerifier certificateVerifier = new SKCommonCertificateVerifier(); certificateVerifier.setTrustedCertSource(tsl); CertificatePool certificatePool = certificateVerifier.createValidationPool(); assertTrue(isTslCacheEmpty()); assertEquals(tsl.getCertificatePool().getNumberOfCertificates(), certificatePool.getNumberOfCertificates()); assertFalse(isTslCacheEmpty()); } @Test public void tslCertSource_shouldNotRenewTslAutomatically_whenCacheIsNotExpired() throws Exception { configuration.setTslCacheExpirationTime(10000); deleteTSLCache(); assertTrue(isTslCacheEmpty()); TSLCertificateSource tsl = configuration.getTSL(); assertTrue(tsl.getCertificates().size() > 0); assertFalse(isTslCacheEmpty()); long tslCacheModificationTime = getCacheLastModificationTime(); waitOneSecond(); assertTrue(tsl.getCertificates().size() > 0); long newTslCacheModificationTime = getCacheLastModificationTime(); assertEquals(tslCacheModificationTime, newTslCacheModificationTime); } @Test public void tslCertCource_shouldRenewTslAutomatically_whenCacheIsExpired() throws Exception { configuration.setTslCacheExpirationTime(100); deleteTSLCache(); assertTrue(isTslCacheEmpty()); TSLCertificateSource tsl = configuration.getTSL(); assertTrue(tsl.getCertificates().size() > 0); assertFalse(isTslCacheEmpty()); long tslCacheModificationTime = getCacheLastModificationTime(); waitOneSecond(); assertTrue(tsl.getCertificates().size() > 0); long newTslCacheModificationTime = getCacheLastModificationTime(); assertTrue(tslCacheModificationTime < newTslCacheModificationTime); } private void deleteTSLCache() { TSLHelper.deleteTSLCache(); } private long getCacheLastModificationTime() { return TSLHelper.getCacheLastModificationTime(); } private boolean isTslCacheEmpty() { return TSLHelper.isTslCacheEmpty(); } private void waitOneSecond() throws InterruptedException { Thread.sleep(1000L); //Waiting is necessary to check changes in the cached files modification time } }