1 package com.atlassian.vcache.internal.memcached;
2
3 import com.atlassian.vcache.internal.BegunTransactionalActivityHandler;
4 import com.atlassian.vcache.internal.RequestContext;
5 import com.atlassian.vcache.internal.VCacheCreationHandler;
6 import com.atlassian.vcache.internal.VCacheSettingsDefaultsProvider;
7 import com.atlassian.vcache.internal.core.ExternalCacheKeyGenerator;
8 import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
9 import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
10 import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
11 import net.spy.memcached.MemcachedClientIF;
12 import org.junit.Rule;
13 import org.junit.Test;
14 import org.junit.rules.ExpectedException;
15 import org.junit.runner.RunWith;
16 import org.mockito.Mock;
17 import org.mockito.runners.MockitoJUnitRunner;
18
19 import java.util.function.Function;
20 import java.util.function.Supplier;
21
22 import static org.hamcrest.Matchers.instanceOf;
23 import static org.hamcrest.Matchers.is;
24 import static org.hamcrest.Matchers.notNullValue;
25 import static org.junit.Assert.assertThat;
26
27 @RunWith(MockitoJUnitRunner.class)
28 public class MemcachedVCacheServiceSettingsBuilderTest {
29 @Rule
30 public ExpectedException thrown = ExpectedException.none();
31
32 @Mock
33 private VCacheCreationHandler creationHandler;
34 @Mock
35 private Supplier<MemcachedClientIF> clientSupplier;
36 @Mock
37 private Supplier<RequestContext> contextSupplier;
38 @Mock
39 private Supplier<RequestContext> workContextContextSupplier;
40 @Mock
41 private VCacheSettingsDefaultsProvider defaultsProvider;
42 @Mock
43 private MetricsCollector metricsCollector;
44 @Mock
45 private BegunTransactionalActivityHandler begunTransactionalActivityHandler;
46 @Mock
47 private ExternalCacheKeyGenerator externalCacheKeyGenerator;
48 @Mock
49 private Function<String, Boolean> dontExternaliseCache;
50
51 @Test
52 public void createWithProductIdentifierAndDefaults() {
53 final MemcachedVCacheServiceSettings settings = new MemcachedVCacheServiceSettingsBuilder()
54 .creationHandler(creationHandler)
55 .clientSupplier(clientSupplier)
56 .threadLocalContextSupplier(contextSupplier)
57 .workContextContextSupplier(workContextContextSupplier)
58 .defaultsProvider(defaultsProvider)
59 .productIdentifier("confira")
60 .build();
61
62 assertThat(settings, notNullValue());
63 assertThat(settings.getCreationHandler(), is(creationHandler));
64 assertThat(settings.getClientSupplier(), is(clientSupplier));
65 assertThat(settings.getContextSupplier(), is(contextSupplier));
66 assertThat(settings.getWorkContextContextSupplier(), is(workContextContextSupplier));
67 assertThat(settings.getDefaultsProvider(), is(defaultsProvider));
68 assertThat(settings.getBegunTransactionalActivityHandler(), notNullValue());
69 assertThat(settings.getDontExternaliseCache(), notNullValue());
70 assertThat(settings.getDontExternaliseCache().apply("name"), is(false));
71 assertThat(settings.getExternalCacheKeyGenerator(), notNullValue());
72 assertThat(settings.getExternalCacheKeyGenerator(), instanceOf(Sha1ExternalCacheKeyGenerator.class));
73 assertThat(settings.getMetricsCollector(), notNullValue());
74 assertThat(settings.getMetricsCollector(), instanceOf(DefaultMetricsCollector.class));
75 }
76
77 @Test
78 public void createWithProductIdentifierAndNoDefaults() {
79 final MemcachedVCacheServiceSettings settings = new MemcachedVCacheServiceSettingsBuilder()
80 .creationHandler(creationHandler)
81 .clientSupplier(clientSupplier)
82 .threadLocalContextSupplier(contextSupplier)
83 .workContextContextSupplier(workContextContextSupplier)
84 .defaultsProvider(defaultsProvider)
85 .productIdentifier("confira")
86 .metricsCollector(metricsCollector)
87 .begunTransactionalActivityHandler(begunTransactionalActivityHandler)
88 .dontExternaliseCache(dontExternaliseCache)
89 .build();
90
91 assertThat(settings, notNullValue());
92 assertThat(settings.getCreationHandler(), is(creationHandler));
93 assertThat(settings.getClientSupplier(), is(clientSupplier));
94 assertThat(settings.getContextSupplier(), is(contextSupplier));
95 assertThat(settings.getWorkContextContextSupplier(), is(workContextContextSupplier));
96 assertThat(settings.getDefaultsProvider(), is(defaultsProvider));
97 assertThat(settings.getBegunTransactionalActivityHandler(), is(begunTransactionalActivityHandler));
98 assertThat(settings.getMetricsCollector(), is(metricsCollector));
99 assertThat(settings.getMetricsCollector(), is(metricsCollector));
100 assertThat(settings.getDontExternaliseCache(), is(dontExternaliseCache));
101 assertThat(settings.getExternalCacheKeyGenerator(), instanceOf(Sha1ExternalCacheKeyGenerator.class));
102 }
103
104 @Test
105 public void createWithMissingCreationHandler() {
106 thrown.expect(NullPointerException.class);
107 thrown.expectMessage("missing creationHandler");
108
109 new MemcachedVCacheServiceSettingsBuilder()
110 .clientSupplier(clientSupplier)
111 .threadLocalContextSupplier(contextSupplier)
112 .workContextContextSupplier(workContextContextSupplier)
113 .defaultsProvider(defaultsProvider)
114 .productIdentifier("confira")
115 .build();
116 }
117
118 @Test
119 public void createWithExternalCacheKeyGeneratorAndDefaults() {
120 final MemcachedVCacheServiceSettings settings = new MemcachedVCacheServiceSettingsBuilder()
121 .creationHandler(creationHandler)
122 .clientSupplier(clientSupplier)
123 .threadLocalContextSupplier(contextSupplier)
124 .workContextContextSupplier(workContextContextSupplier)
125 .defaultsProvider(defaultsProvider)
126 .externalCacheKeyGenerator(externalCacheKeyGenerator)
127 .build();
128
129 assertThat(settings, notNullValue());
130 assertThat(settings.getCreationHandler(), is(creationHandler));
131 assertThat(settings.getClientSupplier(), is(clientSupplier));
132 assertThat(settings.getContextSupplier(), is(contextSupplier));
133 assertThat(settings.getWorkContextContextSupplier(), is(workContextContextSupplier));
134 assertThat(settings.getDefaultsProvider(), is(defaultsProvider));
135 assertThat(settings.getBegunTransactionalActivityHandler(), notNullValue());
136 assertThat(settings.getExternalCacheKeyGenerator(), is(externalCacheKeyGenerator));
137 assertThat(settings.getDontExternaliseCache(), notNullValue());
138 assertThat(settings.getDontExternaliseCache().apply("name"), is(false));
139 assertThat(settings.getMetricsCollector(), notNullValue());
140 assertThat(settings.getMetricsCollector(), instanceOf(DefaultMetricsCollector.class));
141 }
142 }