| /* |
| * 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. |
| } |
| |