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