View Javadoc

1   package com.atlassian.vcache.internal.memcached;
2   
3   import com.atlassian.marshalling.jdk.StringMarshalling;
4   import com.atlassian.vcache.ChangeRate;
5   import com.atlassian.vcache.DirectExternalCache;
6   import com.atlassian.vcache.ExternalCacheSettingsBuilder;
7   import com.atlassian.vcache.StableReadExternalCache;
8   import com.atlassian.vcache.TransactionalExternalCache;
9   import com.atlassian.vcache.internal.RequestContext;
10  import com.atlassian.vcache.internal.VCacheCreationHandler;
11  import com.atlassian.vcache.internal.core.DefaultVCacheCreationHandler;
12  import com.atlassian.vcache.internal.core.metrics.NoopMetricsCollector;
13  import com.atlassian.vcache.internal.guava.GuavaDirectExternalCache;
14  import com.atlassian.vcache.internal.guava.GuavaStableReadExternalCache;
15  import com.atlassian.vcache.internal.guava.GuavaTransactionalExternalCache;
16  import com.atlassian.vcache.internal.test.EmptyVCacheSettingsDefaultsProvider;
17  import com.atlassian.vcache.internal.test.ThreadLocalRequestContextSupplier;
18  import net.spy.memcached.MemcachedClient;
19  import net.spy.memcached.MemcachedClientIF;
20  import org.junit.Before;
21  import org.junit.Test;
22  import org.junit.runner.RunWith;
23  import org.mockito.Mock;
24  import org.mockito.runners.MockitoJUnitRunner;
25  
26  import java.time.Duration;
27  import java.util.function.Supplier;
28  
29  import static org.hamcrest.Matchers.instanceOf;
30  import static org.junit.Assert.assertThat;
31  
32  @RunWith(MockitoJUnitRunner.class)
33  public class MemcachedVCacheServiceDontExternaliseTest {
34      /** Name of cache that will be guava only */
35      private static final String GUAVA_CACHE_NAME = "to-be-guava-only";
36  
37      @Mock
38      private MemcachedClient client;
39      private VCacheCreationHandler creationHandler = new DefaultVCacheCreationHandler(
40              10,
41              Duration.ofDays(666),
42              10,
43              ChangeRate.HIGH_CHANGE,
44              ChangeRate.HIGH_CHANGE);
45      @Mock
46      private Supplier<MemcachedClientIF> clientSupplier;
47      @Mock
48      private Supplier<RequestContext> contextSupplier;
49  
50  
51      @Mock
52      private ThreadLocalRequestContextSupplier requestContextSupplier;
53  
54      private MemcachedVCacheService service;
55  
56      @Before
57      public void initService() {
58          final MemcachedVCacheServiceSettings settings = new MemcachedVCacheServiceSettingsBuilder()
59                  .creationHandler(creationHandler)
60                  .clientSupplier(clientSupplier)
61                  .threadLocalContextSupplier(contextSupplier)
62                  .workContextContextSupplier(contextSupplier)
63                  .defaultsProvider(new EmptyVCacheSettingsDefaultsProvider())
64                  .productIdentifier("confira")
65                  .metricsCollector(new NoopMetricsCollector())
66                  .dontExternaliseCache(GUAVA_CACHE_NAME::equals)
67                  .build();
68          service = new MemcachedVCacheService(settings);
69      }
70  
71      @Test
72      public void verifyDontExternaliseCache_direct() {
73          final DirectExternalCache<String> localCache = service.getDirectExternalCache(
74                  GUAVA_CACHE_NAME, StringMarshalling.pair(), new ExternalCacheSettingsBuilder().build());
75  
76          assertThat(localCache, instanceOf(GuavaDirectExternalCache.class));
77  
78          final DirectExternalCache<String> externalCache = service.getDirectExternalCache(
79                  "external-please", StringMarshalling.pair(), new ExternalCacheSettingsBuilder().build());
80  
81          assertThat(externalCache, instanceOf(MemcachedDirectExternalCache.class));
82      }
83  
84      @Test
85      public void verifyDontExternaliseCache_stableRead() {
86          final StableReadExternalCache<String> localCache = service.getStableReadExternalCache(
87                  GUAVA_CACHE_NAME, StringMarshalling.pair(), new ExternalCacheSettingsBuilder().build());
88  
89          assertThat(localCache, instanceOf(GuavaStableReadExternalCache.class));
90  
91          final StableReadExternalCache<String> externalCache = service.getStableReadExternalCache(
92                  "external-please", StringMarshalling.pair(), new ExternalCacheSettingsBuilder().build());
93  
94          assertThat(externalCache, instanceOf(MemcachedStableReadExternalCache.class));
95      }
96  
97      @Test
98      public void verifyDontExternaliseCache_transactional() {
99          final TransactionalExternalCache<String> localCache = service.getTransactionalExternalCache(
100                 GUAVA_CACHE_NAME, StringMarshalling.pair(), new ExternalCacheSettingsBuilder().build());
101 
102         assertThat(localCache, instanceOf(GuavaTransactionalExternalCache.class));
103 
104         final TransactionalExternalCache<String> externalCache = service.getTransactionalExternalCache(
105                 "external-please", StringMarshalling.pair(), new ExternalCacheSettingsBuilder().build());
106 
107         assertThat(externalCache, instanceOf(MemcachedTransactionalExternalCache.class));
108     }
109 }