tests for cache trimming (#112, PR 114)

This commit is contained in:
Alexey Danilov
2017-04-21 16:48:41 +03:00
parent 699aa05a2d
commit e0ee4a7dde
2 changed files with 93 additions and 4 deletions

View File

@@ -296,6 +296,48 @@ public class HttpProxyCacheServerTest extends BaseTest {
proxy.shutdown();
}
@Test
public void testTrimFileCacheForTotalCountLru() throws Exception {
FileNameGenerator fileNameGenerator = new Md5FileNameGenerator();
HttpProxyCacheServer proxy = new HttpProxyCacheServer.Builder(RuntimeEnvironment.application)
.cacheDirectory(cacheFolder)
.fileNameGenerator(fileNameGenerator)
.maxCacheFilesCount(2)
.build();
readProxyResponse(proxy, proxy.getProxyUrl(HTTP_DATA_URL), 0);
assertThat(new File(cacheFolder, fileNameGenerator.generate(HTTP_DATA_URL))).exists();
readProxyResponse(proxy, proxy.getProxyUrl(HTTP_DATA_URL_ONE_REDIRECT), 0);
assertThat(new File(cacheFolder, fileNameGenerator.generate(HTTP_DATA_URL_ONE_REDIRECT))).exists();
readProxyResponse(proxy, proxy.getProxyUrl(HTTP_DATA_URL_3_REDIRECTS), 0);
assertThat(new File(cacheFolder, fileNameGenerator.generate(HTTP_DATA_URL_3_REDIRECTS))).exists();
waitForAsyncTrimming();
assertThat(new File(cacheFolder, fileNameGenerator.generate(HTTP_DATA_URL))).doesNotExist();
}
@Test
public void testTrimFileCacheForTotalSizeLru() throws Exception {
FileNameGenerator fileNameGenerator = new Md5FileNameGenerator();
HttpProxyCacheServer proxy = new HttpProxyCacheServer.Builder(RuntimeEnvironment.application)
.cacheDirectory(cacheFolder)
.fileNameGenerator(fileNameGenerator)
.maxCacheSize(HTTP_DATA_SIZE * 3 - 1)
.build();
readProxyResponse(proxy, proxy.getProxyUrl(HTTP_DATA_URL), 0);
assertThat(new File(cacheFolder, fileNameGenerator.generate(HTTP_DATA_URL))).exists();
readProxyResponse(proxy, proxy.getProxyUrl(HTTP_DATA_URL_ONE_REDIRECT), 0);
assertThat(new File(cacheFolder, fileNameGenerator.generate(HTTP_DATA_URL_ONE_REDIRECT))).exists();
readProxyResponse(proxy, proxy.getProxyUrl(HTTP_DATA_URL_3_REDIRECTS), 0);
assertThat(new File(cacheFolder, fileNameGenerator.generate(HTTP_DATA_URL_3_REDIRECTS))).exists();
waitForAsyncTrimming();
assertThat(new File(cacheFolder, fileNameGenerator.generate(HTTP_DATA_URL))).doesNotExist();
}
private Pair<File, Response> readProxyData(String url, int offset) throws IOException {
File file = file(cacheFolder, url);
HttpProxyCacheServer proxy = newProxy(cacheFolder);
@@ -321,4 +363,8 @@ public class HttpProxyCacheServerTest extends BaseTest {
.cacheDirectory(cacheDir)
.build();
}
private void waitForAsyncTrimming() throws InterruptedException {
Thread.sleep(500);
}
}

View File

@@ -1,7 +1,6 @@
package com.danikula.videocache.file;
import com.danikula.android.garden.io.Files;
import com.danikula.android.garden.io.IoUtils;
import com.danikula.videocache.BaseTest;
import com.danikula.videocache.Cache;
import com.danikula.videocache.ProxyCacheException;
@@ -11,6 +10,7 @@ import org.junit.Ignore;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import static com.danikula.videocache.support.ProxyCacheTestUtils.ASSETS_DATA_NAME;
@@ -19,6 +19,7 @@ import static com.danikula.videocache.support.ProxyCacheTestUtils.getFileContent
import static com.danikula.videocache.support.ProxyCacheTestUtils.getTempFile;
import static com.danikula.videocache.support.ProxyCacheTestUtils.loadAssetFile;
import static com.danikula.videocache.support.ProxyCacheTestUtils.newCacheFile;
import static com.google.common.io.Files.write;
import static org.fest.assertions.api.Assertions.assertThat;
/**
@@ -95,7 +96,8 @@ public class FileCacheTest extends BaseTest {
public void testIsFileCacheCompleted() throws Exception {
File file = newCacheFile();
File partialFile = new File(file.getParentFile(), file.getName() + ".download");
IoUtils.saveToFile(loadAssetFile(ASSETS_DATA_NAME), partialFile);
write(loadAssetFile(ASSETS_DATA_NAME), partialFile);
write(loadAssetFile(ASSETS_DATA_NAME), partialFile);
Cache fileCache = new FileCache(partialFile);
assertThat(file.exists()).isFalse();
@@ -114,7 +116,7 @@ public class FileCacheTest extends BaseTest {
@Test(expected = ProxyCacheException.class)
public void testErrorWritingCompletedCache() throws Exception {
File file = newCacheFile();
IoUtils.saveToFile(loadAssetFile(ASSETS_DATA_NAME), file);
write(loadAssetFile(ASSETS_DATA_NAME), file);
FileCache fileCache = new FileCache(file);
fileCache.append(generate(100), 20);
Assert.fail();
@@ -124,7 +126,7 @@ public class FileCacheTest extends BaseTest {
public void testErrorWritingAfterCompletion() throws Exception {
File file = newCacheFile();
File partialFile = new File(file.getParentFile(), file.getName() + ".download");
IoUtils.saveToFile(loadAssetFile(ASSETS_DATA_NAME), partialFile);
write(loadAssetFile(ASSETS_DATA_NAME), partialFile);
FileCache fileCache = new FileCache(partialFile);
fileCache.complete();
fileCache.append(generate(100), 20);
@@ -140,4 +142,45 @@ public class FileCacheTest extends BaseTest {
fileCache.available();
Assert.fail();
}
@Test
public void testTrimAfterCompletionForTotalCountLru() throws Exception {
File cacheDir = newCacheFile();
DiskUsage diskUsage = new TotalCountLruDiskUsage(2);
byte[] data = loadAssetFile(ASSETS_DATA_NAME);
saveAndCompleteCache(diskUsage, data,
new File(cacheDir, "0.dat"),
new File(cacheDir, "1.dat"),
new File(cacheDir, "2.dat")
);
waitForAsyncTrimming();
assertThat(new File(cacheDir, "0.dat")).doesNotExist();
}
@Test
public void testTrimAfterCompletionForTotalSizeLru() throws Exception {
File cacheDir = newCacheFile();
byte[] data = loadAssetFile(ASSETS_DATA_NAME);
DiskUsage diskUsage = new TotalSizeLruDiskUsage(data.length*3-1);
saveAndCompleteCache(diskUsage, data,
new File(cacheDir, "0.dat"),
new File(cacheDir, "1.dat"),
new File(cacheDir, "2.dat")
);
waitForAsyncTrimming();
assertThat(new File(cacheDir, "0.dat")).doesNotExist();
}
private void saveAndCompleteCache(DiskUsage diskUsage, byte[] data, File... files) throws ProxyCacheException, IOException {
for (File file : files) {
FileCache fileCache = new FileCache(file, diskUsage);
fileCache.append(data, data.length);
fileCache.complete();
assertThat(file).exists();
}
}
private void waitForAsyncTrimming() throws InterruptedException {
Thread.sleep(500);
}
}