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.ehcache.EhCacheManager;
8 import com.atlassian.cache.ehcache.replication.rmi.RMICacheReplicatorConfigFactory;
9 import com.atlassian.marshalling.api.MarshallingPair;
10 import com.atlassian.marshalling.jdk.StringMarshalling;
11 import com.atlassian.vcache.DirectExternalCache;
12 import com.atlassian.vcache.TransactionalExternalCache;
13 import com.atlassian.vcache.internal.RequestContext;
14 import com.atlassian.vcache.internal.RequestMetrics;
15 import com.atlassian.vcache.internal.core.DefaultRequestContext;
16 import com.atlassian.vcache.internal.core.DefaultTransactionControlManager;
17 import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
18 import com.atlassian.vcache.internal.core.cas.IdentifiedData;
19 import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
20 import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
21 import com.atlassian.vcache.internal.test.AbstractTransactionalExternalCacheIT;
22 import net.sf.ehcache.CacheManager;
23 import org.junit.Before;
24 import org.junit.Ignore;
25
26 import java.util.Optional;
27 import java.util.concurrent.CompletionStage;
28 import java.util.concurrent.TimeUnit;
29
30 import static com.atlassian.vcache.internal.test.CompletionStageSuccessful.successful;
31 import static org.hamcrest.MatcherAssert.assertThat;
32
33 public class LegacyTransactionalExternalCacheEhcacheIT extends AbstractTransactionalExternalCacheIT {
34 private RequestContext requestContext = new DefaultRequestContext(() -> "tenant-id");
35 private Sha1ExternalCacheKeyGenerator keyGenerator = new Sha1ExternalCacheKeyGenerator("it-test");
36 private Optional<MarshallingPair<String>> marshalling = Optional.of(StringMarshalling.pair());
37 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
38
39 private CacheFactory cacheFactory;
40 {
41 final CacheManager rawEhcache = CacheManager.create();
42
43 rawEhcache.removeAllCaches();
44
45 cacheFactory = new EhCacheManager(rawEhcache, new RMICacheReplicatorConfigFactory(), null);
46 }
47
48 private LegacyTransactionalExternalCache<String> cache;
49 private TransactionalExternalCache<String> wrappedCache;
50 private LegacyDirectExternalCache<String> directCache;
51
52 @Override
53 protected TransactionalExternalCache<String> cache() {
54 return wrappedCache;
55 }
56
57 @Override
58 protected DirectExternalCache<String> directCache() {
59 return directCache;
60 }
61
62 @Override
63 protected void directCacheRefresh() {
64
65 }
66
67 @Override
68 protected void cacheTransactionSync() {
69 cache.transactionSync();
70 }
71
72 @Override
73 protected void cacheTransactionDiscard() {
74 cache.transactionDiscard();
75 }
76
77 @Override
78 protected RequestMetrics requestMetrics() {
79 return metricsCollector.obtainRequestMetrics(requestContext);
80 }
81
82 @Before
83 public void ensureCache() {
84 final CacheSettings legacySettings = new CacheSettingsBuilder()
85 .remote()
86 .maxEntries(1000)
87 .expireAfterWrite(60, TimeUnit.SECONDS)
88 .build();
89
90 final Cache<String, IdentifiedData> delegate = cacheFactory.getCache(CACHE_NAME, null, legacySettings);
91 cache = new LegacyTransactionalExternalCache<>(
92 delegate,
93 () -> requestContext,
94 keyGenerator,
95 marshalling,
96 new DefaultTransactionControlManager(metricsCollector, context -> {}),
97 new LegacyServiceSettingsBuilder().enableAvoidCasOperations().build(),
98 metricsCollector);
99 wrappedCache = metricsCollector.wrap(cache);
100
101 directCache = new LegacyDirectExternalCache<>(
102 delegate,
103 () -> requestContext,
104 keyGenerator,
105 marshalling,
106 new LegacyServiceSettingsBuilder().enableAvoidCasOperations().build());
107
108
109 final CompletionStage<Void> rm = directCache.removeAll();
110 assertThat(rm, successful());
111 }
112
113 @Ignore("CAS operations not supported")
114 @Override
115 public void put_get_sync_unsuccessful2() throws Exception {
116 }
117
118 @Ignore("CAS operations not supported")
119 @Override
120 public void getBulk_getBulkFunction_directPut_sync() throws Exception {
121 }
122 }