@Test public void testLruCacheSerializable() throws Exception { LruCache<String> cache = new LruCache<String>(5); cache.add("key1"); cache.add("key2"); cache.add("key3"); cache.add("key4"); cache.add("key5"); cache.add("key6"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(cache); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); @SuppressWarnings("unchecked") LruCache<String> cache2 = (LruCache<String>) ois.readObject(); cache2.add("key7"); assertFalse(cache2.contains("key1")); assertFalse(cache2.contains("key2")); assertTrue(cache2.contains("key3")); assertTrue(cache2.contains("key4")); assertTrue(cache2.contains("key5")); assertTrue(cache2.contains("key6")); assertTrue(cache2.contains("key7")); }
/** * When this test fails, it tends to enter a long running loop but it will * eventually finish (after ~70s on a 8-core Windows box). */ @Test public void testLruCacheConcurrency() throws Exception { int threadCount = 2; long iterationCount = 100000L; assertTrue(threadCount > 1); LruCache<String> cache = new LruCache<String>(threadCount - 1); LruTestThread[] threads = new LruTestThread[threadCount]; for (int i = 0; i < threadCount; i++) { threads[i] = new LruTestThread(cache, iterationCount); } for (int i = 0; i < threadCount; i++) { threads[i].start(); } for (int i = 0; i < threadCount; i++) { threads[i].join(); } for (int i = 0; i < threadCount; i++) { assertTrue(threads[i].getResult()); } }
public LruTestThread(LruCache<String> cache, long iterationCount) { this.cache = cache; this.iterationCount = iterationCount; }