blob: 668a06668d5c49d6a8311bf986092220c0759020 [file] [log] [blame]
/*
* Copyright (C) 2009 The Guava Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.common.cache;
import static com.google.common.cache.TestingCacheLoaders.constantLoader;
import static com.google.common.cache.TestingCacheLoaders.identityLoader;
import static com.google.common.cache.TestingRemovalListeners.countingRemovalListener;
import static com.google.common.cache.TestingRemovalListeners.nullRemovalListener;
import static java.util.concurrent.TimeUnit.NANOSECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
import com.google.common.annotations.GwtCompatible;
import com.google.common.base.Ticker;
import junit.framework.TestCase;
/**
* Unit tests for CacheBuilder.
*/
@GwtCompatible(emulated = true)
public class CacheBuilderTest extends TestCase {
public void testNewBuilder() {
CacheLoader<Object, Integer> loader = constantLoader(1);
LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
.removalListener(countingRemovalListener())
.build(loader);
assertEquals(Integer.valueOf(1), cache.getUnchecked("one"));
assertEquals(1, cache.size());
}
public void testInitialCapacity_negative() {
CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
try {
builder.initialCapacity(-1);
fail();
} catch (IllegalArgumentException expected) {}
}
public void testInitialCapacity_setTwice() {
CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>().initialCapacity(16);
try {
// even to the same value is not allowed
builder.initialCapacity(16);
fail();
} catch (IllegalStateException expected) {}
}
public void testInitialCapacity_large() {
CacheBuilder.newBuilder().initialCapacity(Integer.MAX_VALUE);
// that the builder didn't blow up is enough;
// don't actually create this monster!
}
public void testConcurrencyLevel_zero() {
CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
try {
builder.concurrencyLevel(0);
fail();
} catch (IllegalArgumentException expected) {}
}
public void testConcurrencyLevel_setTwice() {
CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>().concurrencyLevel(16);
try {
// even to the same value is not allowed
builder.concurrencyLevel(16);
fail();
} catch (IllegalStateException expected) {}
}
public void testConcurrencyLevel_large() {
CacheBuilder.newBuilder().concurrencyLevel(Integer.MAX_VALUE);
// don't actually build this beast
}
public void testMaximumSize_negative() {
CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
try {
builder.maximumSize(-1);
fail();
} catch (IllegalArgumentException expected) {}
}
public void testMaximumSize_setTwice() {
CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>().maximumSize(16);
try {
// even to the same value is not allowed
builder.maximumSize(16);
fail();
} catch (IllegalStateException expected) {}
}
public void testTimeToLive_negative() {
CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
try {
builder.expireAfterWrite(-1, SECONDS);
fail();
} catch (IllegalArgumentException expected) {}
}
public void testTimeToLive_small() {
CacheBuilder.newBuilder()
.expireAfterWrite(1, NANOSECONDS)
.build(identityLoader());
// well, it didn't blow up.
}
public void testTimeToLive_setTwice() {
CacheBuilder<Object, Object> builder =
new CacheBuilder<Object, Object>().expireAfterWrite(3600, SECONDS);
try {
// even to the same value is not allowed
builder.expireAfterWrite(3600, SECONDS);
fail();
} catch (IllegalStateException expected) {}
}
public void testTimeToIdle_negative() {
CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
try {
builder.expireAfterAccess(-1, SECONDS);
fail();
} catch (IllegalArgumentException expected) {}
}
public void testTimeToIdle_small() {
CacheBuilder.newBuilder()
.expireAfterAccess(1, NANOSECONDS)
.build(identityLoader());
// well, it didn't blow up.
}
public void testTimeToIdle_setTwice() {
CacheBuilder<Object, Object> builder =
new CacheBuilder<Object, Object>().expireAfterAccess(3600, SECONDS);
try {
// even to the same value is not allowed
builder.expireAfterAccess(3600, SECONDS);
fail();
} catch (IllegalStateException expected) {}
}
public void testTimeToIdleAndToLive() {
CacheBuilder.newBuilder()
.expireAfterWrite(1, NANOSECONDS)
.expireAfterAccess(1, NANOSECONDS)
.build(identityLoader());
// well, it didn't blow up.
}
public void testTicker_setTwice() {
Ticker testTicker = Ticker.systemTicker();
CacheBuilder<Object, Object> builder =
new CacheBuilder<Object, Object>().ticker(testTicker);
try {
// even to the same instance is not allowed
builder.ticker(testTicker);
fail();
} catch (IllegalStateException expected) {}
}
public void testRemovalListener_setTwice() {
RemovalListener<Object, Object> testListener = nullRemovalListener();
CacheBuilder<Object, Object> builder =
new CacheBuilder<Object, Object>().removalListener(testListener);
try {
// even to the same instance is not allowed
builder = builder.removalListener(testListener);
fail();
} catch (IllegalStateException expected) {}
}
// "Basher tests", where we throw a bunch of stuff at a LoadingCache and check basic invariants.
}