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.RequestMetrics;
9   import com.atlassian.vcache.internal.core.DefaultRequestContext;
10  import com.atlassian.vcache.internal.core.DefaultTransactionControlManager;
11  import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
12  import com.atlassian.vcache.internal.core.cas.IdentifiedData;
13  import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
14  import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
15  import com.atlassian.vcache.internal.test.AbstractTransactionalExternalCacheIT;
16  import com.google.common.cache.Cache;
17  import com.google.common.cache.CacheBuilder;
18  import org.junit.Before;
19  
20  import java.time.Duration;
21  import java.util.Optional;
22  import java.util.concurrent.CompletionStage;
23  import java.util.concurrent.TimeUnit;
24  
25  import static com.atlassian.vcache.internal.test.CompletionStageSuccessful.successful;
26  import static org.hamcrest.MatcherAssert.assertThat;
27  
28  public class GuavaTransactionalExternalCacheIT extends AbstractTransactionalExternalCacheIT {
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  
34      private GuavaTransactionalExternalCache<String> cache;
35      private TransactionalExternalCache<String> wrappedcache;
36      private GuavaDirectExternalCache<String> directCache;
37  
38      @Override
39      protected TransactionalExternalCache<String> cache() {
40          return wrappedcache;
41      }
42  
43      @Override
44      protected DirectExternalCache<String> directCache() {
45          return directCache;
46      }
47  
48      @Override
49      protected void directCacheRefresh() {
50          // nothing to do
51      }
52  
53      @Override
54      protected void cacheTransactionSync() {
55          cache.transactionSync();
56      }
57  
58      @Override
59      protected void cacheTransactionDiscard() {
60          cache.transactionDiscard();
61      }
62  
63      @Override
64      protected RequestMetrics requestMetrics() {
65          return metricsCollector.obtainRequestMetrics(requestContext);
66      }
67  
68      @Before
69      public void ensureCache() {
70          final Cache<String, IdentifiedData> delegate = CacheBuilder.newBuilder()
71                  .maximumSize(1_000)
72                  .expireAfterWrite(60, TimeUnit.SECONDS)
73                  .build();
74  
75          cache = new GuavaTransactionalExternalCache<>(
76                  CACHE_NAME,
77                  delegate,
78                  () -> requestContext,
79                  keyGenerator,
80                  marshalling,
81                  new DefaultTransactionControlManager(metricsCollector, context -> {
82                  }),
83                  metricsCollector,
84                  Duration.ofSeconds(1));
85          wrappedcache = metricsCollector.wrap(cache);
86  
87          directCache = new GuavaDirectExternalCache<>(
88                  CACHE_NAME,
89                  delegate,
90                  () -> requestContext,
91                  keyGenerator,
92                  marshalling,
93                  Duration.ofSeconds(1));
94  
95          // Start from a clean slate
96          final CompletionStage<Void> rm = directCache.removeAll();
97          assertThat(rm, successful());
98      }
99  }