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