package org.python.pydev.core.cache;
import java.io.File;
import java.io.StringReader;
import org.python.pydev.core.FastBufferedReader;
import org.python.pydev.core.ModulesKey;
import org.python.pydev.core.ModulesKeyForZip;
import org.python.pydev.core.ObjectsInternPool.ObjectsPoolMap;
import org.python.pydev.shared_core.io.FileUtils;
import org.python.pydev.shared_core.string.FastStringBuffer;
import junit.framework.TestCase;
public class DiskCacheTest extends TestCase {
private File baseDir;
@Override
public void setUp() throws Exception {
super.setUp();
baseDir = FileUtils.getTempFileAt(new File("."), "data_disk_cache_test");
if (baseDir.exists()) {
FileUtils.deleteDirectoryTree(baseDir);
}
baseDir.mkdir();
}
@Override
public void tearDown() throws Exception {
if (baseDir.exists()) {
FileUtils.deleteDirectoryTree(baseDir);
}
super.tearDown();
}
public void testDiskCacheWithZipModulesKey() throws Exception {
DiskCache cache = new DiskCache(new File(baseDir, ".cache"), "_test_disk_cache");
cache.add(new CompleteIndexKey(new ModulesKey("mod1", new File(baseDir, "f1")), 100));
cache.add(new CompleteIndexKey(new ModulesKey("modnull", null), 100));
cache.add(new CompleteIndexKey(new ModulesKeyForZip("mod2", new File(baseDir, "my.zip"), "path", true), 100));
cache.add(new CompleteIndexKey(new ModulesKeyForZip("mod3", new File(baseDir, "my.zip"), "path2", false), 100));
FastStringBuffer tempBuf = new FastStringBuffer();
cache.writeTo(tempBuf);
FastBufferedReader reader = new FastBufferedReader(new StringReader(tempBuf.toString()));
FastStringBuffer line = reader.readLine(); //
assertEquals(line.toString(), "-- START DISKCACHE_" + DiskCache.VERSION);
ObjectsPoolMap objectsPoolMap = new ObjectsPoolMap();
DiskCache loadFrom = DiskCache.loadFrom(reader, objectsPoolMap);
assertEquals(cache.keys(), loadFrom.keys());
assertEquals(cache.getFolderToPersist(), loadFrom.getFolderToPersist());
CompleteIndexKey mod = cache.keys().get(new CompleteIndexKey("mod2"));
ModulesKeyForZip zip = (ModulesKeyForZip) mod.key;
assertEquals(zip.zipModulePath, "path");
mod = loadFrom.keys().get(new CompleteIndexKey("mod2"));
zip = (ModulesKeyForZip) mod.key;
assertEquals(zip.zipModulePath, "path");
mod = loadFrom.keys().get(new CompleteIndexKey("modnull"));
assertNull(mod.key.file);
mod = loadFrom.keys().get(new CompleteIndexKey("mod3"));
zip = (ModulesKeyForZip) mod.key;
assertEquals(zip.zipModulePath, "path2");
assertTrue(zip.isFile);
}
}