Skip to content

Commit b5adedb

Browse files
committed
Tests Redis auth against embedded Redis instance
1 parent 32326fb commit b5adedb

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ project(':dyno-jedis') {
8787
compile project(':dyno-core')
8888
compile project(':dyno-contrib')
8989
compile 'redis.clients:jedis:2.9.0'
90+
testCompile 'com.netflix.spinnaker.embedded-redis:embedded-redis:0.8.0'
9091
}
9192
}
9293

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package com.netflix.dyno.jedis;
2+
3+
import com.netflix.dyno.connectionpool.Host;
4+
import com.netflix.dyno.connectionpool.HostSupplier;
5+
import com.netflix.dyno.connectionpool.TokenMapSupplier;
6+
import com.netflix.dyno.connectionpool.impl.ConnectionPoolConfigurationImpl;
7+
import com.netflix.dyno.connectionpool.impl.lb.HostToken;
8+
import java.util.Collections;
9+
import java.util.List;
10+
import java.util.Set;
11+
import org.junit.After;
12+
import org.junit.Assert;
13+
import org.junit.Test;
14+
import redis.embedded.RedisServer;
15+
import redis.embedded.RedisServerBuilder;
16+
17+
public class RedisAuthenticationIntegrationTest {
18+
19+
private static final int REDIS_PORT = 8998;
20+
private static final String REDIS_RACK = "rack-1c";
21+
private static final String REDIS_DATACENTER = "rack-1";
22+
23+
private RedisServer redisServer;
24+
25+
@After
26+
public void tearDown() throws Exception {
27+
redisServer.stop();
28+
}
29+
30+
@Test
31+
public void testNoAuthClient() throws Exception {
32+
redisServer = new RedisServer(REDIS_PORT);
33+
redisServer.start();
34+
35+
Host noAuthHost = new Host("localhost", REDIS_PORT, REDIS_RACK, Host.Status.Up);
36+
TokenMapSupplierImpl tokenMapSupplier = new TokenMapSupplierImpl(noAuthHost);
37+
DynoJedisClient dynoClient = constructJedisClient(tokenMapSupplier,
38+
() -> Collections.singletonList(noAuthHost));
39+
40+
String statusCodeReply = dynoClient.set("some-key", "some-value");
41+
Assert.assertEquals("OK", statusCodeReply);
42+
43+
String value = dynoClient.get("some-key");
44+
Assert.assertEquals("some-value", value);
45+
}
46+
47+
@Test
48+
public void testAuthClient() throws Exception {
49+
redisServer = new RedisServerBuilder()
50+
.port(REDIS_PORT)
51+
.setting("requirepass some-password")
52+
.build();
53+
redisServer.start();
54+
55+
Host authHost = new Host("localhost", null, REDIS_PORT, REDIS_PORT, REDIS_RACK,
56+
REDIS_DATACENTER, Host.Status.Up, null, "some-password");
57+
TokenMapSupplierImpl tokenMapSupplier = new TokenMapSupplierImpl(authHost);
58+
DynoJedisClient dynoClient = constructJedisClient(tokenMapSupplier,
59+
() -> Collections.singletonList(authHost));
60+
61+
String statusCodeReply = dynoClient.set("some-key", "some-value");
62+
Assert.assertEquals("OK", statusCodeReply);
63+
64+
String value = dynoClient.get("some-key");
65+
Assert.assertEquals("some-value", value);
66+
}
67+
68+
private DynoJedisClient constructJedisClient(TokenMapSupplier tokenMapSupplier,
69+
HostSupplier hostSupplier) {
70+
71+
final ConnectionPoolConfigurationImpl connectionPoolConfiguration =
72+
new ConnectionPoolConfigurationImpl(REDIS_RACK);
73+
connectionPoolConfiguration.withTokenSupplier(tokenMapSupplier);
74+
connectionPoolConfiguration.setLocalRack(REDIS_RACK);
75+
connectionPoolConfiguration.setLocalDataCenter(REDIS_DATACENTER);
76+
77+
return new DynoJedisClient.Builder()
78+
.withApplicationName("appname")
79+
.withDynomiteClusterName(REDIS_RACK)
80+
.withHostSupplier(hostSupplier)
81+
.withCPConfig(connectionPoolConfiguration)
82+
.build();
83+
}
84+
85+
private static class TokenMapSupplierImpl implements TokenMapSupplier {
86+
87+
private final HostToken localHostToken;
88+
89+
private TokenMapSupplierImpl(Host host) {
90+
this.localHostToken = new HostToken(100000L, host);
91+
}
92+
93+
@Override
94+
public List<HostToken> getTokens(Set<Host> activeHosts) {
95+
return Collections.singletonList(localHostToken);
96+
}
97+
98+
@Override
99+
public HostToken getTokenForHost(Host host, Set<Host> activeHosts) {
100+
return localHostToken;
101+
}
102+
103+
}
104+
}

0 commit comments

Comments
 (0)