Skip to content

Commit 36c08ae

Browse files
committed
Refactor Lettuce connection handling in integration tests.
Reuse condition objects in command and version condition extensions. Shut down ClientResources via ShutdownQueue and ensure shared client resources usage. Add close support to our MethodArgumentsProvider. Reuse LettuceTestClientConfiguration for test client config settings. Closes #2575
1 parent 2344369 commit 36c08ae

20 files changed

+376
-241
lines changed

src/test/java/org/springframework/data/redis/connection/jedis/JedisClusterConnectionTests.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import org.junit.jupiter.api.Test;
4444
import org.junit.jupiter.api.TestInstance;
4545
import org.junit.jupiter.api.extension.ExtendWith;
46-
4746
import org.springframework.dao.DataAccessException;
4847
import org.springframework.dao.InvalidDataAccessApiUsageException;
4948
import org.springframework.data.domain.Range.Bound;
@@ -119,7 +118,7 @@ public JedisClusterConnectionTests(JedisCluster nativeConnection) {
119118
}
120119

121120
@BeforeEach
122-
void tearDown() throws IOException {
121+
void beforeEach() throws IOException {
123122

124123
for (ConnectionPool pool : nativeConnection.getClusterNodes().values()) {
125124
try (Jedis jedis = new Jedis(pool.getResource())) {

src/test/java/org/springframework/data/redis/connection/jedis/extension/JedisConnectionFactoryExtension.java

+13-14
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.springframework.data.redis.connection.jedis.extension;
1717

1818
import java.io.Closeable;
19+
import java.io.IOException;
1920
import java.lang.annotation.Annotation;
2021
import java.util.HashMap;
2122
import java.util.Map;
@@ -25,7 +26,6 @@
2526
import org.junit.jupiter.api.extension.ParameterContext;
2627
import org.junit.jupiter.api.extension.ParameterResolutionException;
2728
import org.junit.jupiter.api.extension.ParameterResolver;
28-
2929
import org.springframework.data.redis.ConnectionFactoryTracker;
3030
import org.springframework.data.redis.SettingsUtils;
3131
import org.springframework.data.redis.connection.RedisClusterConfiguration;
@@ -64,7 +64,7 @@ public class JedisConnectionFactoryExtension implements ParameterResolver {
6464
CLIENT_CONFIGURATION);
6565

6666
factory.afterPropertiesSet();
67-
ShutdownQueue.register(factory.toCloseable());
67+
ShutdownQueue.register(factory);
6868

6969
return factory;
7070
});
@@ -75,7 +75,7 @@ public class JedisConnectionFactoryExtension implements ParameterResolver {
7575
CLIENT_CONFIGURATION);
7676

7777
factory.afterPropertiesSet();
78-
ShutdownQueue.register(factory.toCloseable());
78+
ShutdownQueue.register(factory);
7979

8080
return factory;
8181
});
@@ -86,7 +86,7 @@ public class JedisConnectionFactoryExtension implements ParameterResolver {
8686
CLIENT_CONFIGURATION);
8787

8888
factory.afterPropertiesSet();
89-
ShutdownQueue.register(factory.toCloseable());
89+
ShutdownQueue.register(factory);
9090

9191
return factory;
9292
});
@@ -171,7 +171,7 @@ public T getNew() {
171171
}
172172

173173
static class ManagedJedisConnectionFactory extends JedisConnectionFactory
174-
implements ConnectionFactoryTracker.Managed {
174+
implements ConnectionFactoryTracker.Managed, Closeable {
175175

176176
private volatile boolean mayClose;
177177

@@ -219,15 +219,14 @@ public String toString() {
219219
return builder.toString();
220220
}
221221

222-
Closeable toCloseable() {
223-
return () -> {
224-
try {
225-
mayClose = true;
226-
destroy();
227-
} catch (Exception e) {
228-
e.printStackTrace();
229-
}
230-
};
222+
@Override
223+
public void close() throws IOException {
224+
try {
225+
mayClose = true;
226+
destroy();
227+
} catch (Exception e) {
228+
e.printStackTrace();
229+
}
231230
}
232231
}
233232
}

src/test/java/org/springframework/data/redis/connection/lettuce/LettuceAclIntegrationTests.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.util.Collections;
2525

2626
import org.junit.jupiter.api.Test;
27-
2827
import org.springframework.data.redis.connection.RedisConnection;
2928
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
3029
import org.springframework.data.redis.connection.RedisSentinelConnection;
@@ -88,8 +87,7 @@ void shouldConnectSentinelWithAuthentication() throws IOException {
8887

8988
// Note: As per https://github.com/redis/redis/issues/7708, Sentinel does not support ACL authentication yet.
9089

91-
LettuceClientConfiguration configuration = LettuceClientConfiguration.builder()
92-
.clientResources(LettuceTestClientResources.getSharedClientResources())
90+
LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder()
9391
.clientOptions(ClientOptions.builder().protocolVersion(ProtocolVersion.RESP2).build()).build();
9492

9593
RedisSentinelConfiguration sentinelConfiguration = new RedisSentinelConfiguration("mymaster",

src/test/java/org/springframework/data/redis/connection/lettuce/LettuceClusterConnectionTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
import org.junit.jupiter.api.Test;
4242
import org.junit.jupiter.api.TestInstance;
4343
import org.junit.jupiter.api.extension.ExtendWith;
44-
4544
import org.springframework.dao.DataAccessException;
4645
import org.springframework.dao.InvalidDataAccessApiUsageException;
4746
import org.springframework.data.domain.Range.Bound;
@@ -144,6 +143,7 @@ private static LettuceConnectionFactory createConnectionFactory() {
144143
LettucePoolingClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder() //
145144
.clientResources(LettuceTestClientResources.getSharedClientResources()) //
146145
.shutdownTimeout(Duration.ZERO) //
146+
.shutdownQuietPeriod(Duration.ZERO) //
147147
.build();
148148

149149
RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration();

src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryTests.java

+8-11
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import org.junit.jupiter.api.Disabled;
3737
import org.junit.jupiter.api.Test;
3838
import org.junit.jupiter.api.extension.ExtendWith;
39-
4039
import org.springframework.data.redis.ConnectionFactoryTracker;
4140
import org.springframework.data.redis.RedisConnectionFailureException;
4241
import org.springframework.data.redis.RedisSystemException;
@@ -238,7 +237,6 @@ void testResetConnection() {
238237
.getNativeConnection();
239238
factory.resetConnection();
240239
assertThat(factory.getConnection().getNativeConnection()).isNotSameAs(nativeConn);
241-
nativeConn.getStatefulConnection().close();
242240
}
243241

244242
@SuppressWarnings("unchecked")
@@ -352,7 +350,8 @@ void factoryCreatesPooledConnections() {
352350
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
353351

354352
LettuceClientConfiguration configuration = LettucePoolingClientConfiguration.builder().poolConfig(poolConfig)
355-
.clientResources(LettuceTestClientResources.getSharedClientResources()).shutdownTimeout(Duration.ZERO).build();
353+
.clientResources(LettuceTestClientResources.getSharedClientResources()).shutdownTimeout(Duration.ZERO)
354+
.shutdownQuietPeriod(Duration.ZERO).build();
356355

357356
LettuceConnectionFactory factory = new LettuceConnectionFactory(new RedisStandaloneConfiguration(), configuration);
358357
factory.setShareNativeConnection(false);
@@ -431,8 +430,8 @@ void pubSubDoesNotSupportMasterReplicaConnections() {
431430
RedisStaticMasterReplicaConfiguration elastiCache = new RedisStaticMasterReplicaConfiguration(
432431
SettingsUtils.getHost()).node(SettingsUtils.getHost(), SettingsUtils.getPort() + 1);
433432

434-
LettuceConnectionFactory factory = new LettuceConnectionFactory(elastiCache);
435-
factory.setClientResources(LettuceTestClientResources.getSharedClientResources());
433+
LettuceConnectionFactory factory = new LettuceConnectionFactory(elastiCache,
434+
LettuceTestClientConfiguration.defaultConfiguration());
436435
factory.afterPropertiesSet();
437436

438437
RedisConnection connection = factory.getConnection();
@@ -502,8 +501,8 @@ void factoryUsesMasterReplicaConnections() {
502501
@Test // DATAREDIS-576
503502
void connectionAppliesClientName() {
504503

505-
LettuceClientConfiguration configuration = LettuceClientConfiguration.builder()
506-
.clientResources(LettuceTestClientResources.getSharedClientResources()).clientName("clientName").build();
504+
LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().clientName("clientName")
505+
.build();
507506

508507
LettuceConnectionFactory factory = new LettuceConnectionFactory(new RedisStandaloneConfiguration(), configuration);
509508
factory.setShareNativeConnection(false);
@@ -536,8 +535,7 @@ void getClientNameShouldEqualWithFactorySetting() {
536535
@Test // GH-2186
537536
void shouldInitializeMasterReplicaConnectionsEagerly() {
538537

539-
LettuceClientConfiguration configuration = LettuceClientConfiguration.builder()
540-
.clientResources(LettuceTestClientResources.getSharedClientResources()).build();
538+
LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().build();
541539

542540
RedisStaticMasterReplicaConfiguration elastiCache = new RedisStaticMasterReplicaConfiguration(
543541
SettingsUtils.getHost()).node(SettingsUtils.getHost(), SettingsUtils.getPort() + 1);
@@ -557,8 +555,7 @@ void shouldInitializeMasterReplicaConnectionsEagerly() {
557555
@EnabledOnRedisClusterAvailable
558556
void shouldInitializeClusterConnectionsEagerly() {
559557

560-
LettuceClientConfiguration configuration = LettuceClientConfiguration.builder()
561-
.clientResources(LettuceTestClientResources.getSharedClientResources()).build();
558+
LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().build();
562559

563560
LettuceConnectionFactory factory = new LettuceConnectionFactory(SettingsUtils.clusterConfiguration(),
564561
configuration);

0 commit comments

Comments
 (0)