View Javadoc

1   package com.atlassian.vcache.internal.guava;
2   
3   import com.atlassian.marshalling.api.MarshallingPair;
4   import com.atlassian.marshalling.jdk.StringMarshalling;
5   import com.atlassian.vcache.DirectExternalCache;
6   import com.atlassian.vcache.TransactionalExternalCache;
7   import com.atlassian.vcache.internal.RequestContext;
8   import com.atlassian.vcache.internal.core.DefaultRequestContext;
9   import com.atlassian.vcache.internal.core.DefaultTransactionControlManager;
10  import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
11  import com.atlassian.vcache.internal.core.cas.IdentifiedData;
12  import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
13  import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
14  import com.atlassian.vcache.internal.test.AbstractTransactionalExternalCacheIT;
15  import com.google.common.cache.Cache;
16  import com.google.common.cache.CacheBuilder;
17  import org.junit.Before;
18  
19  import java.util.Optional;
20  import java.util.concurrent.CompletionStage;
21  import java.util.concurrent.TimeUnit;
22  
23  import static com.atlassian.vcache.internal.test.CompletionStageSuccessful.successful;
24  import static org.hamcrest.MatcherAssert.assertThat;
25  
26  public class GuavaTransactionalExternalCacheIT extends AbstractTransactionalExternalCacheIT {
27      private RequestContext requestContext = new DefaultRequestContext("tenant-id");
28      private Sha1ExternalCacheKeyGenerator keyGenerator = new Sha1ExternalCacheKeyGenerator("it-test");
29      private Optional<MarshallingPair<String>> marshalling = Optional.of(StringMarshalling.pair());
30      private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
31  
32      private GuavaTransactionalExternalCache<String> cache;
33      private GuavaDirectExternalCache<String> directCache;
34  
35      @Override
36      protected TransactionalExternalCache<String> cache() {
37          return cache;
38      }
39  
40      @Override
41      protected DirectExternalCache<String> directCache() {
42          return directCache;
43      }
44  
45      @Override
46      protected void directCacheRefresh() {
47          // nothing to do
48      }
49  
50      @Override
51      protected void cacheTransactionSync() {
52          cache.transactionSync();
53      }
54  
55      @Override
56      protected void cacheTransactionDiscard() {
57          cache.transactionDiscard();
58      }
59  
60      @Before
61      public void ensureCache() {
62          final String cacheName = "Burnery";
63          final Cache<String, IdentifiedData> delegate = CacheBuilder.newBuilder()
64                  .maximumSize(1_000)
65                  .expireAfterWrite(60, TimeUnit.SECONDS)
66                  .build();
67  
68          cache = new GuavaTransactionalExternalCache<>(
69                  cacheName,
70                  delegate,
71                  () -> requestContext,
72                  keyGenerator,
73                  marshalling,
74                  new DefaultTransactionControlManager(metricsCollector, context -> {}),
75                  metricsCollector);
76  
77          directCache = new GuavaDirectExternalCache<>(
78                  cacheName,
79                  delegate,
80                  () -> requestContext,
81                  keyGenerator,
82                  marshalling);
83  
84          // Start from a clean slate
85          final CompletionStage<Void> rm = directCache.removeAll();
86          assertThat(rm, successful());
87      }
88  }