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.ExternalCacheSettings;
13 import com.atlassian.vcache.StableReadExternalCache;
14 import com.atlassian.vcache.internal.RequestContext;
15 import com.atlassian.vcache.internal.core.DefaultRequestContext;
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.AbstractStableReadExternalCacheIT;
21 import net.sf.ehcache.CacheManager;
22 import org.junit.Ignore;
23
24 import java.util.Optional;
25 import java.util.concurrent.ExecutionException;
26 import java.util.concurrent.TimeUnit;
27
28 public class LegacyStableReadExternalCacheEhcacheIT extends AbstractStableReadExternalCacheIT {
29 private RequestContext requestContext = new DefaultRequestContext("tenant-id");
30 private Sha1ExternalCacheKeyGenerator keyGenerator = new Sha1ExternalCacheKeyGenerator("it-test");
31 private Optional<MarshallingPair<String>> marshalling = Optional.of(StringMarshalling.pair());
32 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
33 private CacheFactory cacheFactory;
34 {
35 final CacheManager rawEhcache = CacheManager.create();
36
37 rawEhcache.removeAllCaches();
38
39 cacheFactory = new EhCacheManager(rawEhcache, new RMICacheReplicatorConfigFactory(), null);
40 }
41
42 @Override
43 protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings) {
44 final CacheSettings legacySettings = new CacheSettingsBuilder()
45 .remote()
46 .maxEntries(settings.getEntryCountHint().get())
47 .expireAfterWrite(settings.getDefaultTtl().get().toNanos(), TimeUnit.NANOSECONDS)
48 .build();
49
50 final Cache<String, IdentifiedData> delegate = cacheFactory.getCache(name, null, legacySettings);
51 return new LegacyStableReadExternalCache<>(
52 delegate,
53 () -> requestContext,
54 keyGenerator,
55 marshalling,
56 new LegacyServiceSettingsBuilder().enableAvoidCasOperations().build(),
57 metricsCollector);
58 }
59
60 @Override
61 protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
62 final Cache<String, IdentifiedData> delegate = cacheFactory.getCache(name);
63 return new LegacyDirectExternalCache<>(
64 delegate,
65 () -> requestContext,
66 keyGenerator,
67 marshalling,
68 new LegacyServiceSettingsBuilder().build());
69 }
70
71 @Ignore("CAS Operations do not work in this configuration")
72 @Override
73 public void dual_cache_get_set() throws ExecutionException, InterruptedException {
74 }
75
76 @Ignore("CAS Operations do not work in this configuration")
77 @Override
78 public void dual_cache_get_with_supplier_take2() throws ExecutionException, InterruptedException {
79 }
80 }