package org.carlspring.strongbox.storage.checksum; import org.carlspring.commons.encryption.EncryptionAlgorithmsEnum; import org.carlspring.strongbox.util.MessageDigestUtils; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; /** * @author mtodorov */ @Ignore public class ChecksumCacheManagerTest { @Test public void testChecksumManagement() throws Exception { ChecksumCacheManager manager = new ChecksumCacheManager(); manager.setCachedChecksumLifetime(3000L); manager.setCachedChecksumExpiredCheckInterval(500L); CheckingThread checkerThread = new CheckingThread(manager); final String artifact1BasePath = "storage0/repositories/snapshots/org/carlspring/maven/test-project/1.0-SNAPSHOT/maven-metadata.xml"; final String artifact2BasePath = "storage0/repositories/snapshots/org/carlspring/maven/test-project/1.0-SNAPSHOT/test-project-1.0-20131004.115330-1.jar"; manager.addArtifactChecksum(artifact1BasePath, "md5", "d0s#3E59jszLsPj3#edp!$"); manager.addArtifactChecksum(artifact1BasePath, "sha1", "d0s#3E59jszLsPj3#edp!$"); manager.addArtifactChecksum(artifact2BasePath, "md5", "eps0#!_)fs0-qWadg#)s1!"); manager.addArtifactChecksum(artifact2BasePath, "sha1", "eps0#!_)fs0-qWadg#)s1!"); manager.startMonitor(); checkerThread.start(); Thread.sleep(3000L); manager.getArtifactChecksum(artifact1BasePath, "md5"); System.out.println("Slept " + checkerThread.getTimeSlept() + " ms"); if (checkerThread.getTimeSlept() > (checkerThread.getMaxTime() + checkerThread.getTolerance())) { fail("Failed to expire the cache on time!"); } checkerThread.interrupt(); } @Test public void testDigests() throws NoSuchAlgorithmException, IOException, CloneNotSupportedException { String s = "This is a test."; MessageDigest md5Digest = MessageDigest.getInstance(EncryptionAlgorithmsEnum.MD5.getAlgorithm()); MessageDigest sha1Digest = MessageDigest.getInstance(EncryptionAlgorithmsEnum.SHA1.getAlgorithm()); md5Digest.update(s.getBytes()); sha1Digest.update(s.getBytes()); String md5 = MessageDigestUtils.convertToHexadecimalString(md5Digest); String sha1 = MessageDigestUtils.convertToHexadecimalString(sha1Digest); assertEquals("Incorrect MD5 sum!", "120ea8a25e5d487bf68b5f7096440019", md5); assertEquals("Incorrect SHA-1 sum!", "afa6c8b3a2fae95785dc7d9685a57835d703ac88", sha1); System.out.println("md5: " + md5); System.out.println("sha1: " + sha1); } private class CheckingThread extends Thread { ChecksumCacheManager manager; int sleepInterval = 100; // 100 ms int timeSlept; int maxTime = 3000; // 3 secs int tolerance = 1000; // 1 sec private CheckingThread(ChecksumCacheManager manager) { this.manager = manager; } @Override public void run() { try { while (timeSlept < (maxTime + tolerance)) { if (manager.getSize() == 1) { break; // This was expected } if (timeSlept > maxTime) { System.out.println("The process has exceeded the defined limit of " + maxTime + " by " + (timeSlept - maxTime) + " ms..."); } sleep(sleepInterval); timeSlept += sleepInterval; } } catch (InterruptedException e) { // This is okay. } } public ChecksumCacheManager getManager() { return manager; } public int getSleepInterval() { return sleepInterval; } public int getTimeSlept() { return timeSlept; } public int getMaxTime() { return maxTime; } public int getTolerance() { return tolerance; } } }