我正在尝试为下面的代码创建集成测试:
public int insertIntoCache() {
String key = "test1";
String value = "{test1,test2}";
int count = 0;
int port = 6379;
String host = "localhost";
try (Jedis jd = new Jedis(host,port,true)){
jd.flushDB();
System.out.println("flushed");
if(jd.ping().equalsIgnoreCase("pong")) {
jd.set(key,value);
count++;
}
}catch(JedisException je) {
je.printStackTrace();
throw new RuntimeException("exception",je);
}
return count;
}
我正在使用testcontainers的FixedHostPortGenericContainer创建Redis映像并运行测试用例
public class TestRedis {
private RedisCache rd;
@Rule
public FixedHostPortGenericContainer redis = new FixedHostPortGenericContainer("redis:3.0.6").withFixedExposedPort(6379, 6379);
@Test
public void testFindingAnInsertedValue() {
redis.addEnv("xpack.security.enabled", "true");
rd = new RedisCache();
int t = rd.insertIntoCache();
System.out.println(t);
}
}
但是我收到以下错误
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.read(InputRecord.java:503)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:750)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
at redis.clients.jedis.util.RedisOutputStream.flushBuffer(RedisOutputStream.java:52)
at redis.clients.jedis.util.RedisOutputStream.flush(RedisOutputStream.java:133)
at redis.clients.jedis.Connection.flush(Connection.java:305)
... 29 more
但是当我使Jedis jd = new Jedis(host,port,false)时,我可以运行测试用例。
请帮助我找到一种为testcontainer lib启用ssl的方法。