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