// // Getdown - application installer, patcher and launcher // Copyright (C) 2004-2018 Getdown authors // https://github.com/threerings/getdown/blob/master/LICENSE package com.threerings.getdown.cache; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import org.junit.*; import org.junit.rules.TemporaryFolder; import static org.junit.Assert.*; /** * Asserts the correct functionality of the {@link ResourceCache}. */ public class ResourceCacheTest { @Before public void setupCache () throws IOException { _fileToCache = _folder.newFile("filetocache.jar"); _cache = new ResourceCache(_folder.newFolder(".cache")); } @Test public void shouldCacheFile () throws IOException { assertEquals("abc123.jar", cacheFile().getName()); } private File cacheFile() throws IOException { return _cache.cacheFile(_fileToCache, "abc123", "abc123"); } @Test public void shouldTrackFileUsage () throws IOException { String name = "abc123.jar" + ResourceCache.LAST_ACCESSED_FILE_SUFFIX; File lastAccessedFile = new File(cacheFile().getParentFile(), name); assertTrue(lastAccessedFile.exists()); } @Test public void shouldNotCacheTheSameFile () throws Exception { File cachedFile = cacheFile(); cachedFile.setLastModified(YESTERDAY); long expectedLastModified = cachedFile.lastModified(); // caching it another time File sameCachedFile = cacheFile(); assertEquals(expectedLastModified, sameCachedFile.lastModified()); } @Test public void shouldRememberWhenFileWasRequested () throws Exception { File cachedFile = cacheFile(); String name = cachedFile.getName() + ResourceCache.LAST_ACCESSED_FILE_SUFFIX; File lastAccessedFile = new File(cachedFile.getParentFile(), name); lastAccessedFile.setLastModified(YESTERDAY); long lastAccessed = lastAccessedFile.lastModified(); // caching it another time cacheFile(); assertTrue(lastAccessedFile.lastModified() > lastAccessed); } @Rule public TemporaryFolder _folder = new TemporaryFolder(); private File _fileToCache; private ResourceCache _cache; private static final long YESTERDAY = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1); }