diff --git a/spring-context/src/main/java/org/springframework/cache/support/NoOpCacheManager.java b/spring-context/src/main/java/org/springframework/cache/support/NoOpCacheManager.java index faa56c3099..c27f59e1a9 100644 --- a/spring-context/src/main/java/org/springframework/cache/support/NoOpCacheManager.java +++ b/spring-context/src/main/java/org/springframework/cache/support/NoOpCacheManager.java @@ -102,7 +102,12 @@ public class NoOpCacheManager implements CacheManager { @Override public T get(Object key, Callable valueLoader) { - return null; + try { + return valueLoader.call(); + } + catch (Exception ex) { + throw new ValueRetrievalException(key, valueLoader, ex); + } } @Override diff --git a/spring-context/src/test/java/org/springframework/cache/NoOpCacheManagerTests.java b/spring-context/src/test/java/org/springframework/cache/NoOpCacheManagerTests.java index dc65b67827..9489b84775 100644 --- a/spring-context/src/test/java/org/springframework/cache/NoOpCacheManagerTests.java +++ b/spring-context/src/test/java/org/springframework/cache/NoOpCacheManagerTests.java @@ -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(); + } + }