1 package com.atlassian.vcache.internal.memcached;
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.internal.RequestContext;
7 import com.atlassian.vcache.internal.RequestMetrics;
8 import com.atlassian.vcache.internal.core.DefaultRequestContext;
9 import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
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.AbstractUnreliableDirectExternalCacheIT;
13 import net.spy.memcached.AddrUtil;
14 import net.spy.memcached.BinaryConnectionFactory;
15 import net.spy.memcached.MemcachedClient;
16 import org.junit.BeforeClass;
17
18 import java.io.IOException;
19 import java.time.Duration;
20
21 public class MemcachedDirectExternalCacheIT extends AbstractUnreliableDirectExternalCacheIT {
22 private static MemcachedClient client;
23 private static MemcachedClient offlineClient;
24 private final RequestContext requestContext = new DefaultRequestContext(() -> "tenant-id");
25 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
26
27 @BeforeClass
28 public static void init_client() throws IOException {
29 client = new MemcachedClient(
30 new BinaryConnectionFactory(),
31 AddrUtil.getAddresses(System.getProperty("memcached.svr")));
32
33 offlineClient = new MemcachedClient(
34 new BinaryConnectionFactory(),
35 AddrUtil.getAddresses("localhost:4"));
36 }
37
38 @Override
39 protected DirectExternalCache<String> createOfflineCache(String name, ExternalCacheSettings settings) {
40 return createCache(name, settings, offlineClient);
41 }
42
43 @Override
44 protected DirectExternalCache<String> createCache(String name, ExternalCacheSettings settings) {
45 return createCache(name, settings, client);
46 }
47
48 private DirectExternalCache<String> createCache(String name, ExternalCacheSettings settings, MemcachedClient client) {
49 return metricsCollector.wrap(
50 new MemcachedDirectExternalCache<>(
51 Utils.defaultServiceSettingsBuilder(() -> client, Duration.ofSeconds(1)).build(),
52 () -> requestContext,
53 new Sha1ExternalCacheKeyGenerator("it-test-42"),
54 name,
55 JavaSerializationMarshalling.pair(String.class),
56 settings));
57 }
58
59 @Override
60 protected RequestMetrics requestMetrics() {
61 return metricsCollector.obtainRequestMetrics(requestContext);
62 }
63 }