Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion src/main/java/io/valkey/ConnectionPoolConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,26 @@

public class ConnectionPoolConfig extends GenericObjectPoolConfig<Connection> {

private static final int DEFAULT_MIN_IDLE = 16;

public ConnectionPoolConfig() {
this(DEFAULT_MIN_IDLE);
}

public ConnectionPoolConfig(int minIdle) {
if (minIdle < 1) {
throw new IllegalArgumentException(
"minIdle must be at least 1, got: " + minIdle);
}

// defaults to make your life with connection pool easier :)
setTestWhileIdle(true);
setMinEvictableIdleTime(Duration.ofMillis(60000));
setTimeBetweenEvictionRuns(Duration.ofMillis(30000));
setNumTestsPerEvictionRun(-1);

setMinIdle(minIdle);
setMaxIdle(2 * minIdle);
setMaxTotal(2 * minIdle);
}
}
}
17 changes: 16 additions & 1 deletion src/main/java/io/valkey/JedisPoolConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,26 @@

public class JedisPoolConfig extends GenericObjectPoolConfig<Jedis> {

private static final int DEFAULT_MIN_IDLE = 16;

public JedisPoolConfig() {
this(DEFAULT_MIN_IDLE);
}

public JedisPoolConfig(int minIdle) {
if (minIdle < 1) {
throw new IllegalArgumentException(
"minIdle must be at least 1, got: " + minIdle);
}

// defaults to make your life with connection pool easier :)
setTestWhileIdle(true);
setMinEvictableIdleTime(Duration.ofMillis(60000));
setTimeBetweenEvictionRuns(Duration.ofMillis(30000));
setNumTestsPerEvictionRun(-1);

setMinIdle(minIdle);
setMaxIdle(2 * minIdle);
setMaxTotal(2 * minIdle);
}
}
}
81 changes: 81 additions & 0 deletions src/test/java/io/valkey/ConnectionPoolConfigTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package io.valkey;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;

public class ConnectionPoolConfigTest {

@Test
public void testDefaultConstructor() {
ConnectionPoolConfig config = new ConnectionPoolConfig();

// Verify performance defaults
assertEquals("Default minIdle should be 16", 16, config.getMinIdle());
assertEquals("Default maxIdle should be 32", 32, config.getMaxIdle());
assertEquals("Default maxTotal should be 32", 32, config.getMaxTotal());

// Verify other defaults are still set
assertTrue("testWhileIdle should be true", config.getTestWhileIdle());
assertEquals("minEvictableIdleTime should be 60000ms",
60000, config.getMinEvictableIdleTime().toMillis());
assertEquals("timeBetweenEvictionRuns should be 30000ms",
30000, config.getTimeBetweenEvictionRuns().toMillis());
assertEquals("numTestsPerEvictionRun should be -1",
-1, config.getNumTestsPerEvictionRun());
}

@Test
public void testClusterOptimizedConstructor() {
int minIdle = 10;
ConnectionPoolConfig config = new ConnectionPoolConfig(minIdle);

assertEquals("MinIdle should be 10", 10, config.getMinIdle());
assertEquals("MaxIdle should be 20", 20, config.getMaxIdle());
assertEquals("MaxTotal should be 20", 20, config.getMaxTotal());
}

@Test
public void testCustomMinIdle() {
ConnectionPoolConfig config = new ConnectionPoolConfig(8);

assertEquals("MinIdle should be 8", 8, config.getMinIdle());
assertEquals("MaxIdle should be 16", 16, config.getMaxIdle());
assertEquals("MaxTotal should be 16", 16, config.getMaxTotal());
}

@Test
public void testLargeMinIdle() {
ConnectionPoolConfig config = new ConnectionPoolConfig(50);

assertEquals("MinIdle should be 50", 50, config.getMinIdle());
assertEquals("MaxIdle should be 100", 100, config.getMaxIdle());
assertEquals("MaxTotal should be 100", 100, config.getMaxTotal());
}

@Test(expected = IllegalArgumentException.class)
public void testZeroMinIdle() {
new ConnectionPoolConfig(0);
}

@Test(expected = IllegalArgumentException.class)
public void testNegativeMinIdle() {
new ConnectionPoolConfig(-5);
}

@Test
public void testRatioConsistency() {
// Test the 2x ratio is maintained across various values
int[] testValues = { 1, 5, 8, 10, 16, 20, 32, 50, 100 };

for (int minIdle : testValues) {
ConnectionPoolConfig config = new ConnectionPoolConfig(minIdle);
assertEquals("maxIdle should be 2x minIdle for value " + minIdle,
minIdle * 2, config.getMaxIdle());
assertEquals("maxTotal should be 2x minIdle for value " + minIdle,
minIdle * 2, config.getMaxTotal());
assertEquals("maxIdle should equal maxTotal for value " + minIdle,
config.getMaxIdle(), config.getMaxTotal());
}
}
}
81 changes: 81 additions & 0 deletions src/test/java/io/valkey/JedisPoolConfigTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package io.valkey;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;

public class JedisPoolConfigTest {

@Test
public void testDefaultConstructor() {
JedisPoolConfig config = new JedisPoolConfig();

// Verify performance defaults
assertEquals("Default minIdle should be 16", 16, config.getMinIdle());
assertEquals("Default maxIdle should be 32", 32, config.getMaxIdle());
assertEquals("Default maxTotal should be 32", 32, config.getMaxTotal());

// Verify other defaults are still set
assertTrue("testWhileIdle should be true", config.getTestWhileIdle());
assertEquals("minEvictableIdleTime should be 60000ms",
60000, config.getMinEvictableIdleTime().toMillis());
assertEquals("timeBetweenEvictionRuns should be 30000ms",
30000, config.getTimeBetweenEvictionRuns().toMillis());
assertEquals("numTestsPerEvictionRun should be -1",
-1, config.getNumTestsPerEvictionRun());
}

@Test
public void testOptimizedConstructor() {
int minIdle = 16;
JedisPoolConfig config = new JedisPoolConfig(minIdle);

assertEquals("MinIdle should match input", minIdle, config.getMinIdle());
assertEquals("MaxIdle should be 2x MinIdle", 32, config.getMaxIdle());
assertEquals("MaxTotal should be 2x MinIdle", 32, config.getMaxTotal());
}

@Test
public void testCustomMinIdle() {
JedisPoolConfig config = new JedisPoolConfig(10);

assertEquals("MinIdle should be 10", 10, config.getMinIdle());
assertEquals("MaxIdle should be 20", 20, config.getMaxIdle());
assertEquals("MaxTotal should be 20", 20, config.getMaxTotal());
}

@Test
public void testLargeMinIdle() {
JedisPoolConfig config = new JedisPoolConfig(50);

assertEquals("MinIdle should be 50", 50, config.getMinIdle());
assertEquals("MaxIdle should be 100", 100, config.getMaxIdle());
assertEquals("MaxTotal should be 100", 100, config.getMaxTotal());
}

@Test(expected = IllegalArgumentException.class)
public void testZeroMinIdle() {
new JedisPoolConfig(0);
}

@Test(expected = IllegalArgumentException.class)
public void testNegativeMinIdle() {
new JedisPoolConfig(-5);
}

@Test
public void testRatioConsistency() {
// Test the 2x ratio is maintained across various values
int[] testValues = { 1, 5, 8, 10, 16, 20, 32, 50, 100 };

for (int minIdle : testValues) {
JedisPoolConfig config = new JedisPoolConfig(minIdle);
assertEquals("maxIdle should be 2x minIdle for value " + minIdle,
minIdle * 2, config.getMaxIdle());
assertEquals("maxTotal should be 2x minIdle for value " + minIdle,
minIdle * 2, config.getMaxTotal());
assertEquals("maxIdle should equal maxTotal for value " + minIdle,
config.getMaxIdle(), config.getMaxTotal());
}
}
}