1 package com.atlassian.vcache.internal.legacy;
2
3 import com.atlassian.cache.CacheException;
4 import com.atlassian.cache.CacheSettings;
5 import com.atlassian.cache.CacheSettingsBuilder;
6 import com.atlassian.cache.memory.MemoryCacheManager;
7 import com.atlassian.vcache.JvmCache;
8 import com.atlassian.vcache.JvmCacheSettings;
9 import com.atlassian.vcache.internal.test.AbstractJvmCacheTest;
10 import org.junit.Test;
11
12 import java.time.Duration;
13 import java.util.concurrent.TimeUnit;
14
15 import static com.atlassian.vcache.internal.NameValidator.requireValidCacheName;
16
17 public class LegacyJvmCacheTest extends AbstractJvmCacheTest {
18 private MemoryCacheManager cacheManager = new MemoryCacheManager();
19
20 @Override
21 protected <K, V> JvmCache<K, V> createCache(String name, JvmCacheSettings settings) {
22 final CacheSettings legacySettings = new CacheSettingsBuilder()
23 .local()
24 .maxEntries(settings.getMaxEntries().orElse(100))
25 .expireAfterWrite(settings.getDefaultTtl().orElse(Duration.ofSeconds(60)).toNanos(), TimeUnit.NANOSECONDS)
26 .build();
27
28 return new LegacyJvmCache<>(cacheManager.getCache(requireValidCacheName(name), null, legacySettings));
29 }
30
31 @Test
32 public void detect_illegal_recursion_supplier() {
33 thrown.expect(CacheException.class);
34 thrown.expectMessage("Recursive call with key: first");
35
36 final JvmCache<String, String> cache = createCache("abc");
37
38 cache.get("first", () ->
39 cache.get("first", () -> "fail"));
40 }
41 }