DATAREDIS-1248 - Use fresh JedisConnectionFactory in PubSubTests.
We make sure to use a dedicated JedisConnectionFactory for Pub/Sub tests as connections can easily break in previous tests which causes connection synchronization issues in the connection itself and in consequence, tests fail with an unrelated cause.
This commit is contained in:
@@ -19,6 +19,7 @@ import java.io.Closeable;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
import org.junit.jupiter.api.extension.ParameterContext;
|
||||
@@ -57,7 +58,7 @@ public class JedisConnectionFactoryExtension implements ParameterResolver {
|
||||
private static final JedisClientConfiguration CLIENT_CONFIGURATION = JedisClientConfiguration.builder()
|
||||
.clientName("jedis-client").usePooling().build();
|
||||
|
||||
private static final Lazy<JedisConnectionFactory> STANDALONE = Lazy.of(() -> {
|
||||
private static final NewableLazy<JedisConnectionFactory> STANDALONE = NewableLazy.of(() -> {
|
||||
|
||||
ManagedJedisConnectionFactory factory = new ManagedJedisConnectionFactory(SettingsUtils.standaloneConfiguration(),
|
||||
CLIENT_CONFIGURATION);
|
||||
@@ -68,7 +69,7 @@ public class JedisConnectionFactoryExtension implements ParameterResolver {
|
||||
return factory;
|
||||
});
|
||||
|
||||
private static final Lazy<JedisConnectionFactory> SENTINEL = Lazy.of(() -> {
|
||||
private static final NewableLazy<JedisConnectionFactory> SENTINEL = NewableLazy.of(() -> {
|
||||
|
||||
ManagedJedisConnectionFactory factory = new ManagedJedisConnectionFactory(SettingsUtils.sentinelConfiguration(),
|
||||
CLIENT_CONFIGURATION);
|
||||
@@ -79,7 +80,7 @@ public class JedisConnectionFactoryExtension implements ParameterResolver {
|
||||
return factory;
|
||||
});
|
||||
|
||||
private static final Lazy<JedisConnectionFactory> CLUSTER = Lazy.of(() -> {
|
||||
private static final NewableLazy<JedisConnectionFactory> CLUSTER = NewableLazy.of(() -> {
|
||||
|
||||
ManagedJedisConnectionFactory factory = new ManagedJedisConnectionFactory(SettingsUtils.clusterConfiguration(),
|
||||
CLIENT_CONFIGURATION);
|
||||
@@ -90,7 +91,7 @@ public class JedisConnectionFactoryExtension implements ParameterResolver {
|
||||
return factory;
|
||||
});
|
||||
|
||||
private static final Map<Class<?>, Lazy<JedisConnectionFactory>> factories;
|
||||
private static final Map<Class<?>, NewableLazy<JedisConnectionFactory>> factories;
|
||||
|
||||
static {
|
||||
|
||||
@@ -101,8 +102,8 @@ public class JedisConnectionFactoryExtension implements ParameterResolver {
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain a {@link JedisConnectionFactory} described by {@code qualifier}. Instances are managed by this extension and
|
||||
* will be shut down on JVM shutdown.
|
||||
* Obtain a cached {@link JedisConnectionFactory} described by {@code qualifier}. Instances are managed by this
|
||||
* extension and will be shut down on JVM shutdown.
|
||||
*
|
||||
* @param qualifier an be any of {@link RedisStanalone}, {@link RedisSentinel}, {@link RedisCluster}.
|
||||
* @return the managed {@link JedisConnectionFactory}.
|
||||
@@ -111,6 +112,17 @@ public class JedisConnectionFactoryExtension implements ParameterResolver {
|
||||
return factories.get(qualifier).get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain a new {@link JedisConnectionFactory} described by {@code qualifier}. Instances are managed by this extension
|
||||
* and will be shut down on JVM shutdown.
|
||||
*
|
||||
* @param qualifier an be any of {@link RedisStanalone}, {@link RedisSentinel}, {@link RedisCluster}.
|
||||
* @return the managed {@link JedisConnectionFactory}.
|
||||
*/
|
||||
public static JedisConnectionFactory getNewConnectionFactory(Class<? extends Annotation> qualifier) {
|
||||
return factories.get(qualifier).getNew();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
|
||||
throws ParameterResolutionException {
|
||||
@@ -141,6 +153,24 @@ public class JedisConnectionFactoryExtension implements ParameterResolver {
|
||||
return RedisStanalone.class;
|
||||
}
|
||||
|
||||
static class NewableLazy<T> extends Lazy<T> {
|
||||
|
||||
private final Supplier<? extends T> supplier;
|
||||
|
||||
private NewableLazy(Supplier<? extends T> supplier) {
|
||||
super(supplier);
|
||||
this.supplier = supplier;
|
||||
}
|
||||
|
||||
public static <T> NewableLazy<T> of(Supplier<? extends T> supplier) {
|
||||
return new NewableLazy<>(supplier);
|
||||
}
|
||||
|
||||
public T getNew() {
|
||||
return supplier.get();
|
||||
}
|
||||
}
|
||||
|
||||
static class ManagedJedisConnectionFactory extends JedisConnectionFactory
|
||||
implements ConnectionFactoryTracker.Managed {
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ public class PubSubTestParams {
|
||||
ObjectFactory<byte[]> rawFactory = new RawObjectFactory();
|
||||
|
||||
JedisConnectionFactory jedisConnFactory = JedisConnectionFactoryExtension
|
||||
.getConnectionFactory(RedisStanalone.class);
|
||||
.getNewConnectionFactory(RedisStanalone.class);
|
||||
|
||||
jedisConnFactory.afterPropertiesSet();
|
||||
|
||||
@@ -84,7 +84,7 @@ public class PubSubTestParams {
|
||||
|
||||
// add Jedis
|
||||
JedisConnectionFactory jedisClusterFactory = JedisConnectionFactoryExtension
|
||||
.getConnectionFactory(RedisCluster.class);
|
||||
.getNewConnectionFactory(RedisCluster.class);
|
||||
|
||||
RedisTemplate<String, String> jedisClusterStringTemplate = new StringRedisTemplate(jedisClusterFactory);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user