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:
parent
813108a928
commit
ab62edeeaa
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue