2 // Getdown - application installer, patcher and launcher
3 // Copyright (C) 2004-2018 Getdown authors
4 // https://github.com/threerings/getdown/blob/master/LICENSE
6 package com.threerings.getdown.cache;
9 import java.io.IOException;
10 import java.util.concurrent.TimeUnit;
13 import org.junit.rules.TemporaryFolder;
15 import static org.junit.Assert.*;
18 * Asserts the correct functionality of the {@link ResourceCache}.
20 public class ResourceCacheTest
22 @Before public void setupCache () throws IOException {
23 _fileToCache = _folder.newFile("filetocache.jar");
24 _cache = new ResourceCache(_folder.newFolder(".cache"));
27 @Test public void shouldCacheFile () throws IOException
29 assertEquals("abc123.jar", cacheFile().getName());
32 private File cacheFile() throws IOException
34 return _cache.cacheFile(_fileToCache, "abc123", "abc123");
37 @Test public void shouldTrackFileUsage () throws IOException
39 String name = "abc123.jar" + ResourceCache.LAST_ACCESSED_FILE_SUFFIX;
40 File lastAccessedFile = new File(cacheFile().getParentFile(), name);
41 assertTrue(lastAccessedFile.exists());
44 @Test public void shouldNotCacheTheSameFile () throws Exception
46 File cachedFile = cacheFile();
47 cachedFile.setLastModified(YESTERDAY);
48 long expectedLastModified = cachedFile.lastModified();
49 // caching it another time
50 File sameCachedFile = cacheFile();
51 assertEquals(expectedLastModified, sameCachedFile.lastModified());
54 @Test public void shouldRememberWhenFileWasRequested () throws Exception
56 File cachedFile = cacheFile();
57 String name = cachedFile.getName() + ResourceCache.LAST_ACCESSED_FILE_SUFFIX;
58 File lastAccessedFile = new File(cachedFile.getParentFile(), name);
59 lastAccessedFile.setLastModified(YESTERDAY);
60 long lastAccessed = lastAccessedFile.lastModified();
61 // caching it another time
63 assertTrue(lastAccessedFile.lastModified() > lastAccessed);
66 @Rule public TemporaryFolder _folder = new TemporaryFolder();
68 private File _fileToCache;
69 private ResourceCache _cache;
71 private static final long YESTERDAY = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1);