View Javadoc

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          // Make sure we are not getting old caches for our test.
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          // nothing to do
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         // Start from a clean slate
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 }