From f72648f646fc0ca229e2d1916e1e16a5f086b0ad Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 14 Aug 2017 16:04:30 +0200 Subject: [PATCH] fixes usage of named cache configurations, see issue #943 --- .../sonia/scm/cache/GuavaCacheManager.java | 19 +++++++--- .../scm/cache/GuavaCacheManagerTest.java | 38 ++++++++++++++++++- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManager.java b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManager.java index fb112c0107..eb9f6d4891 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManager.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManager.java @@ -78,15 +78,22 @@ public class GuavaCacheManager implements CacheManager, org.apache.shiro.cache.C protected GuavaCacheManager(GuavaCacheManagerConfiguration config) { defaultConfiguration = config.getDefaultCache(); - for (GuavaNamedCacheConfiguration ncc : config.getCaches()) { - logger.debug("create cache {} from configured configuration {}", ncc.getName(), ncc); - cacheMap.put(ncc.getName(), new CacheWithConfiguration( - GuavaCaches.create(defaultConfiguration, ncc.getName()), - defaultConfiguration) + for (GuavaNamedCacheConfiguration namedCacheConfiguration : config.getCaches()) { + logger.debug("create cache {} from configured configuration {}", + namedCacheConfiguration.getName(), namedCacheConfiguration ); + cacheMap.put(namedCacheConfiguration.getName(), createCacheWithConfiguration(namedCacheConfiguration)); } } + private CacheWithConfiguration createCacheWithConfiguration(GuavaNamedCacheConfiguration namedCacheConfiguration) { + return createCacheWithConfiguration(namedCacheConfiguration, namedCacheConfiguration.getName()); + } + + private CacheWithConfiguration createCacheWithConfiguration(GuavaCacheConfiguration configuration, String name) { + return new CacheWithConfiguration(GuavaCaches.create(configuration, name), configuration); + } + @Override public void close() throws IOException { logger.info("close guava cache manager"); @@ -110,7 +117,7 @@ public class GuavaCacheManager implements CacheManager, org.apache.shiro.cache.C "cache {} does not exists, creating a new instance from default configuration: {}", name, defaultConfiguration ); - cache = new CacheWithConfiguration(GuavaCaches.create(defaultConfiguration, name), defaultConfiguration); + cache = createCacheWithConfiguration(defaultConfiguration, name); cacheMap.put(name, cache); } diff --git a/scm-webapp/src/test/java/sonia/scm/cache/GuavaCacheManagerTest.java b/scm-webapp/src/test/java/sonia/scm/cache/GuavaCacheManagerTest.java index 3d91a56f40..be1848b303 100644 --- a/scm-webapp/src/test/java/sonia/scm/cache/GuavaCacheManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/cache/GuavaCacheManagerTest.java @@ -32,15 +32,33 @@ package sonia.scm.cache; +import com.google.common.collect.Lists; import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; /** * * @author Sebastian Sdorra */ +@RunWith(MockitoJUnitRunner.class) public class GuavaCacheManagerTest extends CacheManagerTestBase { + @Mock(answer = Answers.CALLS_REAL_METHODS) + private GuavaCacheConfiguration defaultConfiguration; + + @Mock(answer = Answers.CALLS_REAL_METHODS) + private GuavaNamedCacheConfiguration configuration; + /** * Method description * @@ -60,6 +78,24 @@ public class GuavaCacheManagerTest extends CacheManagerTestBase ((GuavaCache)c2).getWrappedCache() ); } - + + @Test + public void configuration() { + when(configuration.getName()).thenReturn("my-crazy-cache"); + when(configuration.getCopyStrategy()).thenReturn(CopyStrategy.READWRITE); + when(defaultConfiguration.getCopyStrategy()).thenReturn(CopyStrategy.READ); + + List configurations = Lists.newArrayList(configuration); + GuavaCacheManagerConfiguration managerConfiguration = new GuavaCacheManagerConfiguration(defaultConfiguration, configurations); + GuavaCacheManager guavaCacheManager = new GuavaCacheManager(managerConfiguration); + + // default cache + GuavaSecurityCache sorbotCache = guavaCacheManager.getCache("sorbot-cache"); + assertEquals(CopyStrategy.READ, sorbotCache.copyStrategy); + + // configured cache + GuavaSecurityCache crazyCache = guavaCacheManager.getCache("my-crazy-cache"); + assertEquals(CopyStrategy.READWRITE, crazyCache.copyStrategy); + } }