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