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