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.TransactionalExternalCache;
7 import com.atlassian.vcache.internal.RequestContext;
8 import com.atlassian.vcache.internal.RequestMetrics;
9 import com.atlassian.vcache.internal.core.DefaultRequestContext;
10 import com.atlassian.vcache.internal.core.DefaultTransactionControlManager;
11 import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
12 import com.atlassian.vcache.internal.core.cas.IdentifiedData;
13 import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
14 import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
15 import com.atlassian.vcache.internal.test.AbstractTransactionalExternalCacheIT;
16 import com.google.common.cache.Cache;
17 import com.google.common.cache.CacheBuilder;
18 import org.junit.Before;
19
20 import java.time.Duration;
21 import java.util.Optional;
22 import java.util.concurrent.CompletionStage;
23 import java.util.concurrent.TimeUnit;
24
25 import static com.atlassian.vcache.internal.test.CompletionStageSuccessful.successful;
26 import static org.hamcrest.MatcherAssert.assertThat;
27
28 public class GuavaTransactionalExternalCacheIT extends AbstractTransactionalExternalCacheIT {
29 private RequestContext requestContext = new DefaultRequestContext(() -> "tenant-id");
30 private Sha1ExternalCacheKeyGenerator keyGenerator = new Sha1ExternalCacheKeyGenerator("it-test");
31 private Optional<MarshallingPair<String>> marshalling = Optional.of(StringMarshalling.pair());
32 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
33
34 private GuavaTransactionalExternalCache<String> cache;
35 private TransactionalExternalCache<String> wrappedcache;
36 private GuavaDirectExternalCache<String> directCache;
37
38 @Override
39 protected TransactionalExternalCache<String> cache() {
40 return wrappedcache;
41 }
42
43 @Override
44 protected DirectExternalCache<String> directCache() {
45 return directCache;
46 }
47
48 @Override
49 protected void directCacheRefresh() {
50
51 }
52
53 @Override
54 protected void cacheTransactionSync() {
55 cache.transactionSync();
56 }
57
58 @Override
59 protected void cacheTransactionDiscard() {
60 cache.transactionDiscard();
61 }
62
63 @Override
64 protected RequestMetrics requestMetrics() {
65 return metricsCollector.obtainRequestMetrics(requestContext);
66 }
67
68 @Before
69 public void ensureCache() {
70 final Cache<String, IdentifiedData> delegate = CacheBuilder.newBuilder()
71 .maximumSize(1_000)
72 .expireAfterWrite(60, TimeUnit.SECONDS)
73 .build();
74
75 cache = new GuavaTransactionalExternalCache<>(
76 CACHE_NAME,
77 delegate,
78 () -> requestContext,
79 keyGenerator,
80 marshalling,
81 new DefaultTransactionControlManager(metricsCollector, context -> {
82 }),
83 metricsCollector,
84 Duration.ofSeconds(1));
85 wrappedcache = metricsCollector.wrap(cache);
86
87 directCache = new GuavaDirectExternalCache<>(
88 CACHE_NAME,
89 delegate,
90 () -> requestContext,
91 keyGenerator,
92 marshalling,
93 Duration.ofSeconds(1));
94
95
96 final CompletionStage<Void> rm = directCache.removeAll();
97 assertThat(rm, successful());
98 }
99 }