1 package com.atlassian.vcache.internal.redis;
2
3 import com.atlassian.marshalling.jdk.JavaSerializationMarshalling;
4 import com.atlassian.vcache.DirectExternalCache;
5 import com.atlassian.vcache.ExternalCacheSettings;
6 import com.atlassian.vcache.StableReadExternalCache;
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.Sha1ExternalCacheKeyGenerator;
11 import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
12 import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
13 import com.atlassian.vcache.internal.test.AbstractUnreliableStableReadExternalCacheIT;
14 import org.junit.Rule;
15
16 import java.time.Duration;
17
18 public class RedisStableReadExternalCacheIT extends AbstractUnreliableStableReadExternalCacheIT {
19 @Rule
20 public JedisTester jedisTester = new JedisTester();
21
22 @Rule
23 public JedisTester offlineJedisTester = new JedisTester(false);
24
25 private RequestContext requestContext = new DefaultRequestContext(() -> "tenant-id");
26 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
27
28 @Override
29 protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings, Duration lockTimeout) {
30 return metricsCollector.wrap(
31 new RedisStableReadExternalCache<>(
32 jedisTester.jedisSupplier(),
33 () -> requestContext,
34 new Sha1ExternalCacheKeyGenerator("redis-test"),
35 name,
36 JavaSerializationMarshalling.pair(String.class),
37 settings,
38 metricsCollector,
39 lockTimeout));
40 }
41
42 @Override
43 protected StableReadExternalCache<String> createOfflineCache(String name, ExternalCacheSettings settings, Duration lockTimeout) {
44 return new RedisStableReadExternalCache<>(
45 offlineJedisTester.jedisSupplier(),
46 () -> requestContext,
47 new Sha1ExternalCacheKeyGenerator("redis-test-offline"),
48 name,
49 JavaSerializationMarshalling.pair(String.class),
50 settings,
51 metricsCollector,
52 lockTimeout);
53 }
54
55 @Override
56 protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
57 return new RedisDirectExternalCache<>(
58 jedisTester.jedisSupplier(),
59 () -> requestContext,
60 new Sha1ExternalCacheKeyGenerator("redis-test"),
61 name,
62 JavaSerializationMarshalling.pair(String.class),
63 settings,
64 Duration.ofSeconds(1));
65 }
66
67 @Override
68 protected RequestMetrics requestMetrics() {
69 return metricsCollector.obtainRequestMetrics(requestContext);
70 }
71 }