1 package com.atlassian.vcache.internal.redis;
2
3 import com.atlassian.vcache.ChangeRate;
4 import com.atlassian.vcache.VCacheFactory;
5 import com.atlassian.vcache.internal.RequestContext;
6 import com.atlassian.vcache.internal.VCacheLifecycleManager;
7 import com.atlassian.vcache.internal.VCacheManagement;
8 import com.atlassian.vcache.internal.core.DefaultVCacheCreationHandler;
9 import com.atlassian.vcache.internal.core.ThreadLocalRequestContextSupplier;
10 import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
11 import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
12 import com.atlassian.vcache.internal.test.AbstractVCacheServiceIT;
13 import com.atlassian.vcache.internal.test.EmptyVCacheSettingsDefaultsProvider;
14 import org.junit.After;
15 import org.junit.Before;
16 import org.junit.BeforeClass;
17 import redis.clients.jedis.JedisPool;
18 import redis.clients.jedis.JedisPoolConfig;
19
20 import java.io.IOException;
21 import java.net.URI;
22 import java.net.URISyntaxException;
23 import java.time.Duration;
24
25 public class RedisVCacheServiceIT extends AbstractVCacheServiceIT {
26 private static JedisPool jedisPool;
27
28 private final ThreadLocalRequestContextSupplier requestContextSupplier =
29 ThreadLocalRequestContextSupplier.strictSupplier();
30 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(requestContextSupplier);
31
32 private RedisVCacheService service = new RedisVCacheService(
33 "confira",
34 jedisPool::getResource,
35 requestContextSupplier,
36 requestContextSupplier,
37 new EmptyVCacheSettingsDefaultsProvider(),
38 new DefaultVCacheCreationHandler(
39 MAX_ENTRIES,
40 MAX_TTL,
41 MAX_ENTRIES,
42 ChangeRate.HIGH_CHANGE,
43 ChangeRate.HIGH_CHANGE),
44 metricsCollector,
45 begunTxnActivityHandler,
46 Duration.ofSeconds(10));
47
48 @Override
49 protected VCacheFactory vCacheFactory() {
50 return service;
51 }
52
53 @Override
54 protected VCacheManagement vCacheManagement() {
55 return service;
56 }
57
58 @Override
59 protected VCacheLifecycleManager vCacheLifecycleManager() {
60 return service;
61 }
62
63 @Override
64 protected RequestContext currentRequestContext() {
65 return requestContextSupplier.get();
66 }
67
68 @Override
69 protected void forceNewRequestContext() {
70 clearThread();
71 initThread();
72 }
73
74 @BeforeClass
75 public static void initClient() throws IOException, URISyntaxException {
76 final JedisPoolConfig poolConfig = new JedisPoolConfig();
77 poolConfig.setBlockWhenExhausted(false);
78 poolConfig.setMaxTotal(1);
79 jedisPool = new JedisPool(poolConfig, new URI(System.getProperty("redis.svr")));
80 }
81
82 @Before
83 public void initThread() {
84 requestContextSupplier.initThread("tenant-123");
85 }
86
87 @After
88 public void clearThread() {
89 requestContextSupplier.clearThread();
90 }
91 }