MultiDbScanIterationIT.java
package redis.clients.jedis.mcf;
import static redis.clients.jedis.mcf.MultiDbConnectionProviderHelper.activeConnectionPool;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import redis.clients.jedis.ConnectionPool;
import redis.clients.jedis.EndpointConfig;
import redis.clients.jedis.Endpoints;
import redis.clients.jedis.MultiDbClient;
import redis.clients.jedis.MultiDbConfig;
import redis.clients.jedis.MultiDbConfig.DatabaseConfig;
import redis.clients.jedis.util.TestKeyRegistry;
/**
* Integration tests for {@code scanIteration} on a {@link MultiDbClient}: the pooled connection is
* returned to the pool once the iteration ends.
*/
public class MultiDbScanIterationIT {
private static EndpointConfig endpoint;
private MultiDbClient client;
private TestKeyRegistry keys;
@BeforeAll
public static void prepareEndpoints() {
endpoint = Endpoints.getRedisEndpoint("standalone0");
}
@BeforeEach
public void setUp(TestInfo testInfo) {
keys = TestKeyRegistry.create(testInfo);
DatabaseConfig db = DatabaseConfig
.builder(endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build()).weight(1.0f)
.build();
client = MultiDbClient.builder()
.multiDbConfig(new MultiDbConfig.Builder(new DatabaseConfig[] { db }).build()).build();
}
@AfterEach
public void tearDown() {
if (client != null) {
try {
keys.cleanup(client);
} catch (Exception ignore) {
}
client.close();
}
}
/** Regression test for #4799: scanIteration must return its pooled connection. */
@Test
public void scanIteration_releasesConnection() {
for (int i = 0; i < 50; i++) {
client.set(keys.key("key" + i), "v");
}
ConnectionPool pool = activeConnectionPool(client);
List<String> found = new ArrayList<>(
client.scanIteration(10, keys.name("*")).collect(new ArrayList<>()));
assertEquals(50, found.size(), "iteration must run to completion");
assertEquals(0, pool.getNumActive(), "iteration must not keep a pooled connection");
}
}