public void testAutoPurgeWithPendingUpload() {
try {
AsyncUploadCache pendingFiles = new AsyncUploadCache();
pendingFiles.init(TARGET_DIR, CACHE_DIR, 100);
pendingFiles.reset();
LocalCache cache = new LocalCache(CACHE_DIR, TEMP_DIR, 400, 0.95,
0.70, pendingFiles);
Random random = new Random(12345);
byte[] data = new byte[125];
Map<String, byte[]> byteMap = new HashMap<String, byte[]>();
random.nextBytes(data);
byteMap.put("a1", data);
data = new byte[125];
random.nextBytes(data);
byteMap.put("a2", data);
data = new byte[125];
random.nextBytes(data);
byteMap.put("a3", data);
data = new byte[100];
random.nextBytes(data);
byteMap.put("a4", data);
File tempDir = new File(TEMP_DIR);
File f = File.createTempFile("test", "tmp", tempDir);
FileOutputStream fos = new FileOutputStream(f);
fos.write(byteMap.get("a1"));
fos.close();
AsyncUploadCacheResult result = cache.store("a1", f, true);
assertTrue("should be able to add to pending upload",
result.canAsyncUpload());
f = File.createTempFile("test", "tmp", tempDir);
fos = new FileOutputStream(f);
fos.write(byteMap.get("a2"));
fos.close();
result = cache.store("a2", f, true);
assertTrue("should be able to add to pending upload",
result.canAsyncUpload());
f = File.createTempFile("test", "tmp", tempDir);
fos = new FileOutputStream(f);
fos.write(byteMap.get("a3"));
fos.close();
result = cache.store("a3", f, true);
assertTrue("should be able to add to pending upload",
result.canAsyncUpload());
assertEquals(new ByteArrayInputStream(byteMap.get("a1")),
cache.getIfStored("a1"));
assertEquals(new ByteArrayInputStream(byteMap.get("a2")),
cache.getIfStored("a2"));
assertEquals(new ByteArrayInputStream(byteMap.get("a3")),
cache.getIfStored("a3"));
data = new byte[90];
random.nextBytes(data);
byteMap.put("a4", data);
f = File.createTempFile("test", "tmp", tempDir);
fos = new FileOutputStream(f);
fos.write(byteMap.get("a4"));
fos.close();
result = cache.store("a4", f, true);
assertFalse("should not be able to add to pending upload",
result.canAsyncUpload());
Thread.sleep(1000);
assertEquals(new ByteArrayInputStream(byteMap.get("a1")),
cache.getIfStored("a1"));
assertEquals(new ByteArrayInputStream(byteMap.get("a2")),
cache.getIfStored("a2"));
assertEquals(new ByteArrayInputStream(byteMap.get("a3")),
cache.getIfStored("a3"));
assertNull("a4 should be null", cache.getIfStored("a4"));
} catch (Exception e) {
LOG.error("error:", e);
fail();
}
}