1 package com.atlassian.vcache.internal.guava;
2
3 import com.atlassian.marshalling.api.MarshallingPair;
4 import com.atlassian.marshalling.jdk.StringMarshalling;
5 import com.atlassian.vcache.DirectExternalCache;
6 import com.atlassian.vcache.ExternalCacheSettings;
7 import com.atlassian.vcache.StableReadExternalCache;
8 import com.atlassian.vcache.internal.RequestContext;
9 import com.atlassian.vcache.internal.core.DefaultRequestContext;
10 import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
11 import com.atlassian.vcache.internal.core.cas.IdentifiedData;
12 import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
13 import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
14 import com.atlassian.vcache.internal.test.AbstractStableReadExternalCacheIT;
15 import com.google.common.cache.Cache;
16
17 import java.util.HashMap;
18 import java.util.Map;
19 import java.util.Optional;
20
21 public class GuavaStableReadExternalCacheIT extends AbstractStableReadExternalCacheIT {
22 private RequestContext requestContext = new DefaultRequestContext("tenant-id");
23 private Sha1ExternalCacheKeyGenerator keyGenerator = new Sha1ExternalCacheKeyGenerator("it-test");
24 private Optional<MarshallingPair<String>> marshalling = Optional.of(StringMarshalling.pair());
25 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
26
27 private Map<String, Cache<String, IdentifiedData>> delegates = new HashMap<>();
28
29 @Override
30 protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings) {
31
32 delegates.putIfAbsent(name, GuavaUtils.buildDelegate(settings));
33
34 return new GuavaStableReadExternalCache<>(
35 name,
36 delegates.get(name),
37 () -> requestContext,
38 keyGenerator,
39 marshalling,
40 metricsCollector);
41 }
42
43 @Override
44 protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
45 return new GuavaDirectExternalCache<>(
46 name,
47 delegates.get(name),
48 () -> requestContext,
49 keyGenerator,
50 marshalling);
51 }
52 }