101 lines
3.9 KiB
Java
101 lines
3.9 KiB
Java
/*
|
|
* Copyright (C) 2011 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.incrementingLoader;
|
|
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
|
|
|
import com.google.common.cache.TestingCacheLoaders.IncrementingLoader;
|
|
import com.google.common.testing.FakeTicker;
|
|
import junit.framework.TestCase;
|
|
|
|
/**
|
|
* Tests relating to automatic cache refreshing.
|
|
*
|
|
* @author Charles Fry
|
|
*/
|
|
public class CacheRefreshTest extends TestCase {
|
|
public void testAutoRefresh() {
|
|
FakeTicker ticker = new FakeTicker();
|
|
IncrementingLoader loader = incrementingLoader();
|
|
LoadingCache<Integer, Integer> cache =
|
|
CacheBuilder.newBuilder()
|
|
.refreshAfterWrite(3, MILLISECONDS)
|
|
.expireAfterWrite(6, MILLISECONDS)
|
|
.lenientParsing()
|
|
.ticker(ticker)
|
|
.build(loader);
|
|
int expectedLoads = 0;
|
|
int expectedReloads = 0;
|
|
for (int i = 0; i < 3; i++) {
|
|
assertEquals(Integer.valueOf(i), cache.getUnchecked(i));
|
|
expectedLoads++;
|
|
assertEquals(expectedLoads, loader.getLoadCount());
|
|
assertEquals(expectedReloads, loader.getReloadCount());
|
|
ticker.advance(1, MILLISECONDS);
|
|
}
|
|
|
|
assertEquals(Integer.valueOf(0), cache.getUnchecked(0));
|
|
assertEquals(Integer.valueOf(1), cache.getUnchecked(1));
|
|
assertEquals(Integer.valueOf(2), cache.getUnchecked(2));
|
|
assertEquals(expectedLoads, loader.getLoadCount());
|
|
assertEquals(expectedReloads, loader.getReloadCount());
|
|
|
|
// refresh 0
|
|
ticker.advance(1, MILLISECONDS);
|
|
assertEquals(Integer.valueOf(1), cache.getUnchecked(0));
|
|
expectedReloads++;
|
|
assertEquals(Integer.valueOf(1), cache.getUnchecked(1));
|
|
assertEquals(Integer.valueOf(2), cache.getUnchecked(2));
|
|
assertEquals(expectedLoads, loader.getLoadCount());
|
|
assertEquals(expectedReloads, loader.getReloadCount());
|
|
|
|
// write to 1 to delay its refresh
|
|
cache.asMap().put(1, -1);
|
|
ticker.advance(1, MILLISECONDS);
|
|
assertEquals(Integer.valueOf(1), cache.getUnchecked(0));
|
|
assertEquals(Integer.valueOf(-1), cache.getUnchecked(1));
|
|
assertEquals(Integer.valueOf(2), cache.getUnchecked(2));
|
|
assertEquals(expectedLoads, loader.getLoadCount());
|
|
assertEquals(expectedReloads, loader.getReloadCount());
|
|
|
|
// refresh 2
|
|
ticker.advance(1, MILLISECONDS);
|
|
assertEquals(Integer.valueOf(1), cache.getUnchecked(0));
|
|
assertEquals(Integer.valueOf(-1), cache.getUnchecked(1));
|
|
assertEquals(Integer.valueOf(3), cache.getUnchecked(2));
|
|
expectedReloads++;
|
|
assertEquals(expectedLoads, loader.getLoadCount());
|
|
assertEquals(expectedReloads, loader.getReloadCount());
|
|
|
|
ticker.advance(1, MILLISECONDS);
|
|
assertEquals(Integer.valueOf(1), cache.getUnchecked(0));
|
|
assertEquals(Integer.valueOf(-1), cache.getUnchecked(1));
|
|
assertEquals(Integer.valueOf(3), cache.getUnchecked(2));
|
|
assertEquals(expectedLoads, loader.getLoadCount());
|
|
assertEquals(expectedReloads, loader.getReloadCount());
|
|
|
|
// refresh 0 and 1
|
|
ticker.advance(1, MILLISECONDS);
|
|
assertEquals(Integer.valueOf(2), cache.getUnchecked(0));
|
|
expectedReloads++;
|
|
assertEquals(Integer.valueOf(0), cache.getUnchecked(1));
|
|
expectedReloads++;
|
|
assertEquals(Integer.valueOf(3), cache.getUnchecked(2));
|
|
assertEquals(expectedLoads, loader.getLoadCount());
|
|
assertEquals(expectedReloads, loader.getReloadCount());
|
|
}
|
|
}
|