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.AbstractStableReadExternalCacheIT;
14 import org.junit.BeforeClass;
15 import redis.clients.jedis.JedisPool;
16 import redis.clients.jedis.JedisPoolConfig;
17
18 import java.io.IOException;
19 import java.net.URI;
20 import java.net.URISyntaxException;
21 import java.time.Duration;
22
23 public class RedisStableReadExternalCacheIT extends AbstractStableReadExternalCacheIT {
24 private static JedisPool jedisPool;
25 private RequestContext requestContext = new DefaultRequestContext("tenant-id");
26 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
27
28 @BeforeClass
29 public static void init_client() throws IOException, URISyntaxException {
30 final JedisPoolConfig poolConfig = new JedisPoolConfig();
31 poolConfig.setMaxTotal(1);
32 jedisPool = new JedisPool(poolConfig, new URI(System.getProperty("redis.svr")));
33 }
34
35 @Override
36 protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings, Duration lockTimeout) {
37 return metricsCollector.wrap(
38 new RedisStableReadExternalCache<>(
39 jedisPool::getResource,
40 () -> requestContext,
41 new Sha1ExternalCacheKeyGenerator("redis-test"),
42 name,
43 JavaSerializationMarshalling.pair(String.class),
44 settings,
45 metricsCollector,
46 lockTimeout));
47 }
48
49 @Override
50 protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
51 return new RedisDirectExternalCache<>(
52 jedisPool::getResource,
53 () -> requestContext,
54 new Sha1ExternalCacheKeyGenerator("redis-test"),
55 name,
56 JavaSerializationMarshalling.pair(String.class),
57 settings,
58 Duration.ofSeconds(1));
59 }
60
61 @Override
62 protected RequestMetrics requestMetrics() {
63 return metricsCollector.obtainRequestMetrics(requestContext);
64 }
65 }