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