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