Fix NoOpCache handling of get(key,callable)

This commit fixes the method that takes a Callable to actually always
invoke it rather than returning null.

Issue: SPR-14445
This commit is contained in:
Stephane Nicoll 2016-07-11 10:34:27 +02:00
parent 813108a928
commit ab62edeeaa
2 changed files with 49 additions and 15 deletions

View File

@ -102,7 +102,12 @@ public class NoOpCacheManager implements CacheManager {
@Override
public <T> T get(Object key, Callable<T> valueLoader) {
return null;
try {
return valueLoader.call();
}
catch (Exception ex) {
throw new ValueRetrievalException(key, valueLoader, ex);
}
}
@Override

View File

@ -18,33 +18,33 @@ package org.springframework.cache;
import java.util.UUID;
import org.junit.Before;
import org.junit.Test;
import org.springframework.cache.support.NoOpCacheManager;
import static org.junit.Assert.*;
/**
* Tests for {@link NoOpCacheManager}.
*
* @author Costin Leau
* @author Stephane Nicoll
*/
public class NoOpCacheManagerTests {
private CacheManager manager;
@Before
public void setup() {
manager = new NoOpCacheManager();
}
private final CacheManager manager = new NoOpCacheManager();
@Test
public void testGetCache() throws Exception {
Cache cache = manager.getCache("bucket");
Cache cache = this.manager.getCache("bucket");
assertNotNull(cache);
assertSame(cache, manager.getCache("bucket"));
assertSame(cache, this.manager.getCache("bucket"));
}
@Test
public void testNoOpCache() throws Exception {
String name = UUID.randomUUID().toString();
Cache cache = manager.getCache(name);
String name = createRandomKey();
Cache cache = this.manager.getCache(name);
assertEquals(name, cache.getName());
Object key = new Object();
cache.put(key, new Object());
@ -56,8 +56,37 @@ public class NoOpCacheManagerTests {
@Test
public void testCacheName() throws Exception {
String name = "bucket";
assertFalse(manager.getCacheNames().contains(name));
manager.getCache(name);
assertTrue(manager.getCacheNames().contains(name));
assertFalse(this.manager.getCacheNames().contains(name));
this.manager.getCache(name);
assertTrue(this.manager.getCacheNames().contains(name));
}
@Test
public void testCacheCallable() throws Exception {
String name = createRandomKey();
Cache cache = this.manager.getCache(name);
Object returnValue = new Object();
Object value = cache.get(new Object(), () -> returnValue);
assertEquals(returnValue, value);
}
@Test
public void testCacheGetCallableFail() {
Cache cache = this.manager.getCache(createRandomKey());
String key = createRandomKey();
try {
cache.get(key, () -> {
throw new UnsupportedOperationException("Expected exception");
});
}
catch (Cache.ValueRetrievalException ex) {
assertNotNull(ex.getCause());
assertEquals(UnsupportedOperationException.class, ex.getCause().getClass());
}
}
private String createRandomKey() {
return UUID.randomUUID().toString();
}
}