From 15dc7bd789a77eab9c656b45f1e759f79c705858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=9A=94=ED=95=9C?= Date: Sun, 23 Mar 2025 19:42:46 +0900 Subject: [PATCH 1/5] Unit test for ACL Credential Propagation (#2320) - Unit test for constructors of JedisPool/UnifeidJedis which verifies that the provided username/password reaches ConnectionFactory. Without the need of explicit test env --- .../redis/clients/jedis/JedisPoolTest.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/src/test/java/redis/clients/jedis/JedisPoolTest.java b/src/test/java/redis/clients/jedis/JedisPoolTest.java index 29b3fd8438..0c98ebabff 100644 --- a/src/test/java/redis/clients/jedis/JedisPoolTest.java +++ b/src/test/java/redis/clients/jedis/JedisPoolTest.java @@ -19,6 +19,7 @@ import redis.clients.jedis.exceptions.InvalidURIException; import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisException; +import redis.clients.jedis.providers.PooledConnectionProvider; public class JedisPoolTest { @@ -458,4 +459,76 @@ public void testResetValidCredentials() { } } } + + @Test + public void testCompareUsernamePasswordWithConfig() { + + class TestJedisFactory extends JedisFactory { + private final JedisClientConfig testClientConfig; + + public TestJedisFactory(final String host, final int port, final int connectionTimeout, + final int soTimeout, final String user, final String password, + final int database, final String clientName) { + + super(host, port, connectionTimeout, soTimeout, 0, user, password, database, clientName); + + this.testClientConfig = DefaultJedisClientConfig.builder() + .connectionTimeoutMillis(connectionTimeout) + .socketTimeoutMillis(soTimeout) + .blockingSocketTimeoutMillis(0) + .user(user).password(password) + .database(database).clientName(clientName) + .ssl(false).sslSocketFactory(null) + .sslParameters(null).hostnameVerifier(null).build(); + } + + public JedisClientConfig getTestClientConfig() { + return testClientConfig; + } + } + + try (JedisPool pool = new JedisPool(new JedisPoolConfig(), + new TestJedisFactory(endpointStandalone1.getHost(), endpointStandalone1.getPort(), + Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, + endpointStandalone1.getUsername(), endpointStandalone1.getPassword(), + Protocol.DEFAULT_DATABASE, null))) { + + TestJedisFactory factory = (TestJedisFactory) pool.getFactory(); + JedisClientConfig clientConfig = factory.getTestClientConfig(); + + assertEquals(endpointStandalone1.getUsername(), clientConfig.getUser()); + assertEquals(endpointStandalone1.getPassword(), clientConfig.getPassword()); + } + } + + @Test + public void testCompareUsernamePasswordWithConfigForUnifiedJedis() { + + class TestConnectionFactory extends ConnectionFactory { + private final JedisClientConfig testClientConfig; + + public TestConnectionFactory(HostAndPort hostAndPort, JedisClientConfig clientConfig) { + super(hostAndPort, clientConfig); + this.testClientConfig = clientConfig; + } + + public JedisClientConfig getClientConfig() { + return testClientConfig; + } + } + + // UnifiedJedis -> PooledConnectionProvider -> factory + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder() + .user(endpointStandalone1.getUsername()).password(endpointStandalone1.getPassword()).build(); + TestConnectionFactory testConnectionFactory = new TestConnectionFactory(endpointStandalone1.getHostAndPort(), jedisClientConfig); + + try (UnifiedJedis unifiedJedis = new UnifiedJedis(new PooledConnectionProvider(testConnectionFactory))) { + + PooledConnectionProvider provider = (PooledConnectionProvider) unifiedJedis.provider; + TestConnectionFactory factory = (TestConnectionFactory) provider.getPool().getFactory(); + + assertEquals(endpointStandalone1.getUsername(), factory.getClientConfig().getUser()); + assertEquals(endpointStandalone1.getPassword(), factory.getClientConfig().getPassword()); + } + } } From a178096dafbf44eb1e14254379677d1999c2eac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=9A=94=ED=95=9C?= Date: Wed, 26 Mar 2025 23:11:35 +0900 Subject: [PATCH 2/5] Unit test for ACL Credential Propagation (#2320) - Unit test for constructors of JedisPool/UnifeidJedis which verifies that the provided username/password reaches ConnectionFactory. Without the need of explicit test env --- .../redis/clients/jedis/JedisPoolTest.java | 72 ------ .../clients/jedis/JedisPoolUnitTest.java | 223 ++++++++++++++++++ 2 files changed, 223 insertions(+), 72 deletions(-) create mode 100644 src/test/java/redis/clients/jedis/JedisPoolUnitTest.java diff --git a/src/test/java/redis/clients/jedis/JedisPoolTest.java b/src/test/java/redis/clients/jedis/JedisPoolTest.java index 0c98ebabff..64c6bf0992 100644 --- a/src/test/java/redis/clients/jedis/JedisPoolTest.java +++ b/src/test/java/redis/clients/jedis/JedisPoolTest.java @@ -459,76 +459,4 @@ public void testResetValidCredentials() { } } } - - @Test - public void testCompareUsernamePasswordWithConfig() { - - class TestJedisFactory extends JedisFactory { - private final JedisClientConfig testClientConfig; - - public TestJedisFactory(final String host, final int port, final int connectionTimeout, - final int soTimeout, final String user, final String password, - final int database, final String clientName) { - - super(host, port, connectionTimeout, soTimeout, 0, user, password, database, clientName); - - this.testClientConfig = DefaultJedisClientConfig.builder() - .connectionTimeoutMillis(connectionTimeout) - .socketTimeoutMillis(soTimeout) - .blockingSocketTimeoutMillis(0) - .user(user).password(password) - .database(database).clientName(clientName) - .ssl(false).sslSocketFactory(null) - .sslParameters(null).hostnameVerifier(null).build(); - } - - public JedisClientConfig getTestClientConfig() { - return testClientConfig; - } - } - - try (JedisPool pool = new JedisPool(new JedisPoolConfig(), - new TestJedisFactory(endpointStandalone1.getHost(), endpointStandalone1.getPort(), - Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, - endpointStandalone1.getUsername(), endpointStandalone1.getPassword(), - Protocol.DEFAULT_DATABASE, null))) { - - TestJedisFactory factory = (TestJedisFactory) pool.getFactory(); - JedisClientConfig clientConfig = factory.getTestClientConfig(); - - assertEquals(endpointStandalone1.getUsername(), clientConfig.getUser()); - assertEquals(endpointStandalone1.getPassword(), clientConfig.getPassword()); - } - } - - @Test - public void testCompareUsernamePasswordWithConfigForUnifiedJedis() { - - class TestConnectionFactory extends ConnectionFactory { - private final JedisClientConfig testClientConfig; - - public TestConnectionFactory(HostAndPort hostAndPort, JedisClientConfig clientConfig) { - super(hostAndPort, clientConfig); - this.testClientConfig = clientConfig; - } - - public JedisClientConfig getClientConfig() { - return testClientConfig; - } - } - - // UnifiedJedis -> PooledConnectionProvider -> factory - DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder() - .user(endpointStandalone1.getUsername()).password(endpointStandalone1.getPassword()).build(); - TestConnectionFactory testConnectionFactory = new TestConnectionFactory(endpointStandalone1.getHostAndPort(), jedisClientConfig); - - try (UnifiedJedis unifiedJedis = new UnifiedJedis(new PooledConnectionProvider(testConnectionFactory))) { - - PooledConnectionProvider provider = (PooledConnectionProvider) unifiedJedis.provider; - TestConnectionFactory factory = (TestConnectionFactory) provider.getPool().getFactory(); - - assertEquals(endpointStandalone1.getUsername(), factory.getClientConfig().getUser()); - assertEquals(endpointStandalone1.getPassword(), factory.getClientConfig().getPassword()); - } - } } diff --git a/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java b/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java new file mode 100644 index 0000000000..3548d582f4 --- /dev/null +++ b/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java @@ -0,0 +1,223 @@ +package redis.clients.jedis; + +import io.redis.test.annotations.SinceRedisVersion; +import org.junit.Test; +import org.mockito.MockedConstruction; +import redis.clients.jedis.csc.TestCache; + +import java.net.URI; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mockConstruction; + +/** + * This test is only executed when the server/cluster is Redis 6. or more. + */ +@SinceRedisVersion("6.0.0") +public class JedisPoolUnitTest { + private static final EndpointConfig endpoint = HostAndPorts.getRedisEndpoint("standalone0-acl"); + + @Test + public void compareACLToStringWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); + })) { + + JedisPool pool = new JedisPool(endpoint.getHost(), endpoint.getPort(), endpoint.getUsername(), endpoint.getPassword()); + + pool.close(); + } + } + + @Test + public void compareACLToPoolConfigWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + String username = (String) context.arguments().get(4); + String password = (String) context.arguments().get(5); + + assertEquals(endpoint.getUsername(), username); + assertEquals(endpoint.getPassword(), password); + })) { + + JedisPool pool = new JedisPool(new JedisPoolConfig(), endpoint.getHost(), endpoint.getPort(), endpoint.getUsername(), endpoint.getPassword()); + + pool.close(); + } + } + + @Test + public void compareACLToPoolConfigAndTimeoutWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + String username = (String) context.arguments().get(4); + String password = (String) context.arguments().get(5); + + assertEquals(endpoint.getUsername(), username); + assertEquals(endpoint.getPassword(), password); + })) { + + JedisPool pool = new JedisPool(new JedisPoolConfig(), endpoint.getHost(), endpoint.getPort(), Protocol.DEFAULT_TIMEOUT, endpoint.getUsername(), endpoint.getPassword()); + + pool.close(); + } + } + + @Test + public void compareACLToPoolConfigAndTimeoutSslWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + String username = (String) context.arguments().get(5); + String password = (String) context.arguments().get(6); + + assertEquals(endpoint.getUsername(), username); + assertEquals(endpoint.getPassword(), password); + })) { + + JedisPool pool = new JedisPool(new JedisPoolConfig(), endpoint.getHost(), endpoint.getPort(), Protocol.DEFAULT_TIMEOUT, endpoint.getUsername(), endpoint.getPassword(), false); + + pool.close(); + } + } + + + + @Test + public void compareACLWithConfigForJedisPooled() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); + })) { + + JedisPooled jedisPooled = new JedisPooled(endpoint.getHost(), endpoint.getPort(), endpoint.getUsername(), endpoint.getPassword()); + + jedisPooled.close(); + } + } + + @Test + public void compareACLToConnectionConfigWithConfigForJedisPooled() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); + })) { + + JedisPooled jedisPooled = new JedisPooled(new ConnectionPoolConfig(), endpoint.getHost(), endpoint.getPort(), endpoint.getUsername(), endpoint.getPassword()); + + jedisPooled.close(); + } + } + + @Test + public void compareACLToConnectionConfigWithConfigAndTimeoutForJedisPooled() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); + })) { + + JedisPooled jedisPooled = new JedisPooled(new ConnectionPoolConfig(), endpoint.getHost(), endpoint.getPort(), Protocol.DEFAULT_TIMEOUT, endpoint.getUsername(), endpoint.getPassword()); + + jedisPooled.close(); + } + } + + @Test + public void compareACLToConnectionConfigAndTimeoutSslWithConfigForJedisPooled() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); + })) { + + JedisPooled jedisPooled = new JedisPooled(new ConnectionPoolConfig(), endpoint.getHost(), endpoint.getPort(), Protocol.DEFAULT_TIMEOUT, endpoint.getUsername(), endpoint.getPassword(), false); + + jedisPooled.close(); + } + } + + @Test + public void compareACLWithConfigForUnifiedJedis() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); + })) { + + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder() + .user(endpoint.getUsername()) + .password(endpoint.getPassword()).build(); + + UnifiedJedis unifiedJedis = new UnifiedJedis(endpoint.getHostAndPort(), jedisClientConfig); + + unifiedJedis.close(); + } + } + + @Test + public void compareACLToURIWithConfigForUnifiedJedis() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); + })) { + + UnifiedJedis unifiedJedis = new UnifiedJedis(URI.create("redis://" + endpoint.getUsername() + ":" + endpoint.getPassword() + "@" + endpoint.getHost() + ":" + endpoint.getPort())); + + unifiedJedis.close(); + } + } + + @Test + public void compareACLToURIAndConfigWithConfigForUnifiedJedis() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); + })) { + + UnifiedJedis unifiedJedis = new UnifiedJedis(URI.create("redis://" + endpoint.getUsername() + ":" + endpoint.getPassword() + "@" + endpoint.getHost() + ":" + endpoint.getPort()), + DefaultJedisClientConfig.builder().build()); + + unifiedJedis.close(); + } + } + + @Test + public void compareACLToCacheAndConfigWithConfigForUnifiedJedis() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); + })) { + + UnifiedJedis unifiedJedis = new UnifiedJedis(endpoint.getHostAndPort(), + DefaultJedisClientConfig.builder().user(endpoint.getUsername()).password(endpoint.getPassword()).protocol(RedisProtocol.RESP3).build(), + new TestCache()); + + unifiedJedis.close(); + } + } +} From 6ac4797b4c655f22e2aa82e5afc318e343a7c682 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=9A=94=ED=95=9C?= Date: Fri, 28 Mar 2025 00:19:24 +0900 Subject: [PATCH 3/5] Unit test for ACL Credential Propagation (#2320) - Unit test for constructors of JedisPool/UnifeidJedis which verifies that the provided username/password reaches JedisFactory/ConnectionFactory. Without the need of explicit test env --- .../clients/jedis/JedisPoolUnitTest.java | 92 +++++++++++++++++-- 1 file changed, 85 insertions(+), 7 deletions(-) diff --git a/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java b/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java index 3548d582f4..84ce99717a 100644 --- a/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java +++ b/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java @@ -4,6 +4,7 @@ import org.junit.Test; import org.mockito.MockedConstruction; import redis.clients.jedis.csc.TestCache; +import redis.clients.jedis.util.JedisURIHelper; import java.net.URI; @@ -17,6 +18,9 @@ public class JedisPoolUnitTest { private static final EndpointConfig endpoint = HostAndPorts.getRedisEndpoint("standalone0-acl"); + /** + * to verify that the data(username/password) is correctly passed to the JedisFactory from the (JedisPool) constructor. + */ @Test public void compareACLToStringWithConfig() { try (MockedConstruction ignored = mockConstruction(JedisFactory.class, @@ -84,8 +88,63 @@ public void compareACLToPoolConfigAndTimeoutSslWithConfig() { } } + @Test + public void compareACLToURIWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + URI uri = (URI) context.arguments().get(0); + + String username = JedisURIHelper.getUser(uri); + String password = JedisURIHelper.getPassword(uri); + + assertEquals(endpoint.getUsername(), username); + assertEquals(endpoint.getPassword(), password); + })) { + JedisPool pool = new JedisPool(endpoint.getURIBuilder().defaultCredentials().build()); + + pool.close(); + } + } + @Test + public void compareACLToClientConfigWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + DefaultJedisClientConfig config = (DefaultJedisClientConfig) context.arguments().get(1); + + String username = config.getUser(); + String password = config.getPassword(); + + assertEquals(endpoint.getUsername(), username); + assertEquals(endpoint.getPassword(), password); + })) { + + JedisPool pool = new JedisPool(new JedisPoolConfig(), endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build()); + + pool.close(); + } + } + + @Test + public void compareACLToClientConfigAndSocketFactoryWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + DefaultJedisClientConfig config = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), config.getUser()); + assertEquals(endpoint.getPassword(), config.getPassword()); + })) { + + JedisPool pool = new JedisPool(new JedisPoolConfig(), new DefaultJedisSocketFactory(), endpoint.getClientConfigBuilder().build()); + + pool.close(); + } + } + + /** + * to verify that the data(username/password) is correctly passed to the ConnectionFactory from the (JedisPooled) constructor. + */ @Test public void compareACLWithConfigForJedisPooled() { try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, @@ -150,6 +209,29 @@ public void compareACLToConnectionConfigAndTimeoutSslWithConfigForJedisPooled() } } + @Test + public void compareACLToURIWithConfigForJedisPooled() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + URI uri = (URI) context.arguments().get(0); + + String username = JedisURIHelper.getUser(uri); + String password = JedisURIHelper.getPassword(uri); + + assertEquals(endpoint.getUsername(), username); + assertEquals(endpoint.getPassword(), password); + })) { + + JedisPooled pool = new JedisPooled(new ConnectionPoolConfig(), endpoint.getURIBuilder().defaultCredentials().build().toString()); + + pool.close(); + } + } + + + /** + * to verify that the data(username/password) is correctly passed to the ConnectionFactory from the (UnifiedJedis) constructor. + */ @Test public void compareACLWithConfigForUnifiedJedis() { try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, @@ -160,11 +242,7 @@ public void compareACLWithConfigForUnifiedJedis() { assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); })) { - DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder() - .user(endpoint.getUsername()) - .password(endpoint.getPassword()).build(); - - UnifiedJedis unifiedJedis = new UnifiedJedis(endpoint.getHostAndPort(), jedisClientConfig); + UnifiedJedis unifiedJedis = new UnifiedJedis(endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build()); unifiedJedis.close(); } @@ -180,7 +258,7 @@ public void compareACLToURIWithConfigForUnifiedJedis() { assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); })) { - UnifiedJedis unifiedJedis = new UnifiedJedis(URI.create("redis://" + endpoint.getUsername() + ":" + endpoint.getPassword() + "@" + endpoint.getHost() + ":" + endpoint.getPort())); + UnifiedJedis unifiedJedis = new UnifiedJedis(endpoint.getURIBuilder().defaultCredentials().build()); unifiedJedis.close(); } @@ -196,7 +274,7 @@ public void compareACLToURIAndConfigWithConfigForUnifiedJedis() { assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); })) { - UnifiedJedis unifiedJedis = new UnifiedJedis(URI.create("redis://" + endpoint.getUsername() + ":" + endpoint.getPassword() + "@" + endpoint.getHost() + ":" + endpoint.getPort()), + UnifiedJedis unifiedJedis = new UnifiedJedis(endpoint.getURIBuilder().defaultCredentials().build(), DefaultJedisClientConfig.builder().build()); unifiedJedis.close(); From ee534341c677ea0d58840b5d580ed0786d7a02f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=9A=94=ED=95=9C?= Date: Fri, 28 Mar 2025 23:39:00 +0900 Subject: [PATCH 4/5] test for ACL Credential Propagation (#2320) - Unit test for constructors of JedisPool/UnifeidJedis which verifies that the provided username/password reaches JedisFactory/ConnectionFactory. Without the need of explicit test env - In addition to the existing integration tests that connect with the dedicated non-default user "acljedis" --- .../redis/clients/jedis/ACLJedisPoolTest.java | 10 ++ .../redis/clients/jedis/ACLJedisTest.java | 110 ++++++++++++++++++ .../redis/clients/jedis/JedisPoolTest.java | 1 - .../clients/jedis/JedisPoolUnitTest.java | 18 +++ 4 files changed, 138 insertions(+), 1 deletion(-) diff --git a/src/test/java/redis/clients/jedis/ACLJedisPoolTest.java b/src/test/java/redis/clients/jedis/ACLJedisPoolTest.java index df2422393a..53b8f8bba3 100644 --- a/src/test/java/redis/clients/jedis/ACLJedisPoolTest.java +++ b/src/test/java/redis/clients/jedis/ACLJedisPoolTest.java @@ -273,6 +273,16 @@ public void testCloseConnectionOnMakeObject() { } } + @Test + public void checkConnectionWithURIAndTimeout() { + try (JedisPool pool = new JedisPool(endpoint.getURIBuilder().defaultCredentials().build(), Protocol.DEFAULT_TIMEOUT); + Jedis jedis = pool.getResource()) { + jedis.auth(endpoint.getUsername(), endpoint.getPassword()); + jedis.set("foo", "bar"); + assertEquals("bar", jedis.get("foo")); + } + } + private int getClientCount(final String clientList) { return clientList.split("\n").length; } diff --git a/src/test/java/redis/clients/jedis/ACLJedisTest.java b/src/test/java/redis/clients/jedis/ACLJedisTest.java index b9b35326e1..6d692b44d9 100644 --- a/src/test/java/redis/clients/jedis/ACLJedisTest.java +++ b/src/test/java/redis/clients/jedis/ACLJedisTest.java @@ -108,4 +108,114 @@ public void startWithUri() throws URISyntaxException { } } + @Test + public void startWithHostPortStringAndSsl() { + try (Jedis j = new Jedis(endpoint.getHost(), endpoint.getPort(), false)) { + assertEquals("OK", j.auth(endpoint.getUsername(), endpoint.getPassword())); + assertEquals("OK", j.select(2)); + j.set("foo", "bar"); + } + try (Jedis j1 = new Jedis(endpoint.getURIBuilder().defaultCredentials().path("/2").build())) { + assertEquals("PONG", j1.ping()); + assertEquals("bar", j1.get("foo")); + } + } + + @Test + public void startWithHostPortStringAndTimeout() { + try (Jedis j = new Jedis(endpoint.getHost(), endpoint.getPort(), Protocol.DEFAULT_TIMEOUT)) { + assertEquals("OK", j.auth(endpoint.getUsername(), endpoint.getPassword())); + assertEquals("OK", j.select(2)); + j.set("foo", "bar"); + } + try (Jedis j1 = new Jedis(endpoint.getURIBuilder().defaultCredentials().path("/2").build())) { + assertEquals("PONG", j1.ping()); + assertEquals("bar", j1.get("foo")); + } + } + + @Test + public void startWithHostPortStringAndTimeoutAndSsl() { + try (Jedis j = new Jedis(endpoint.getHost(), endpoint.getPort(), Protocol.DEFAULT_TIMEOUT, false)) { + assertEquals("OK", j.auth(endpoint.getUsername(), endpoint.getPassword())); + assertEquals("OK", j.select(2)); + j.set("foo", "bar"); + } + try (Jedis j1 = new Jedis(endpoint.getURIBuilder().defaultCredentials().path("/2").build())) { + assertEquals("PONG", j1.ping()); + assertEquals("bar", j1.get("foo")); + } + } + + @Test + public void startWithHostPortStringAndTimeouts() { + try (Jedis j = new Jedis(endpoint.getHost(), endpoint.getPort(), Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT)) { + assertEquals("OK", j.auth(endpoint.getUsername(), endpoint.getPassword())); + assertEquals("OK", j.select(2)); + j.set("foo", "bar"); + } + try (Jedis j1 = new Jedis(endpoint.getURIBuilder().defaultCredentials().path("/2").build())) { + assertEquals("PONG", j1.ping()); + assertEquals("bar", j1.get("foo")); + } + } + + @Test + public void startWithURI() throws URISyntaxException { + try (Jedis j = new Jedis(endpoint.getURIBuilder().defaultCredentials().build())) { + assertEquals("OK", j.auth(endpoint.getUsername(), endpoint.getPassword())); + assertEquals("OK", j.select(2)); + j.set("foo", "bar"); + } + try (Jedis j1 = new Jedis(endpoint.getURIBuilder().defaultCredentials().path("/2").build())) { + assertEquals("PONG", j1.ping()); + assertEquals("bar", j1.get("foo")); + } + } + + @Test + public void startWithURIAndTimeout() throws URISyntaxException { + try (Jedis j = new Jedis(endpoint.getURIBuilder().defaultCredentials().build(), Protocol.DEFAULT_TIMEOUT)) { + assertEquals("OK", j.auth(endpoint.getUsername(), endpoint.getPassword())); + assertEquals("OK", j.select(2)); + j.set("foo", "bar"); + } + try (Jedis j1 = new Jedis(endpoint.getURIBuilder().defaultCredentials().path("/2").build())) { + assertEquals("PONG", j1.ping()); + assertEquals("bar", j1.get("foo")); + } + } + + @Test + public void startWithFactory() { + JedisSocketFactory socketFactory = new DefaultJedisSocketFactory(endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build()); + + try(Jedis j = new Jedis(socketFactory)) { + assertEquals("OK", j.auth(endpoint.getUsername(), endpoint.getPassword())); + assertEquals("OK", j.select(2)); + j.set("foo", "bar"); + } + } + + @Test + public void startWithFactoryAndConfig() { + JedisSocketFactory socketFactory = new DefaultJedisSocketFactory(endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build()); + + try(Jedis j = new Jedis(socketFactory, DefaultJedisClientConfig.builder().build())) { + assertEquals("OK", j.auth(endpoint.getUsername(), endpoint.getPassword())); + assertEquals("OK", j.select(2)); + j.set("foo", "bar"); + } + } + + @Test + public void startWithConnection() { + JedisSocketFactory socketFactory = new DefaultJedisSocketFactory(endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build()); + Connection connection = new Connection(socketFactory); + try(Jedis j = new Jedis(connection)) { + assertEquals("OK", j.auth(endpoint.getUsername(), endpoint.getPassword())); + assertEquals("OK", j.select(2)); + j.set("foo", "bar"); + } + } } diff --git a/src/test/java/redis/clients/jedis/JedisPoolTest.java b/src/test/java/redis/clients/jedis/JedisPoolTest.java index 64c6bf0992..29b3fd8438 100644 --- a/src/test/java/redis/clients/jedis/JedisPoolTest.java +++ b/src/test/java/redis/clients/jedis/JedisPoolTest.java @@ -19,7 +19,6 @@ import redis.clients.jedis.exceptions.InvalidURIException; import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisException; -import redis.clients.jedis.providers.PooledConnectionProvider; public class JedisPoolTest { diff --git a/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java b/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java index 84ce99717a..fd90f91eb4 100644 --- a/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java +++ b/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java @@ -1,6 +1,7 @@ package redis.clients.jedis; import io.redis.test.annotations.SinceRedisVersion; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.junit.Test; import org.mockito.MockedConstruction; import redis.clients.jedis.csc.TestCache; @@ -142,6 +143,23 @@ public void compareACLToClientConfigAndSocketFactoryWithConfig() { } } + @Test + public void compareACLToHostAndPortClientConfigWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + DefaultJedisClientConfig config = (DefaultJedisClientConfig) context.arguments().get(1); + + assertEquals(endpoint.getUsername(), config.getUser()); + assertEquals(endpoint.getPassword(), config.getPassword()); + })) { + + JedisPool pool = new JedisPool(new GenericObjectPoolConfig<>(), endpoint.getHostAndPort(), + endpoint.getClientConfigBuilder().build()); + + pool.close(); + } + } + /** * to verify that the data(username/password) is correctly passed to the ConnectionFactory from the (JedisPooled) constructor. */ From b9d4924d384bedb0519e390e19fa6fcf8ab20003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=9A=94=ED=95=9C?= Date: Fri, 4 Apr 2025 23:53:55 +0900 Subject: [PATCH 5/5] Change verification method to find necessary fields instead of using magic numbers (#2320) - Added unit tests for JedisPool/UnifiedJedis constructors to verify that the provided username/password reaches JedisFactory/ConnectionFactory - Change verification method to find necessary fields instead of using magic numbers --- .../clients/jedis/JedisPoolUnitTest.java | 221 ++++++++++++++---- 1 file changed, 176 insertions(+), 45 deletions(-) diff --git a/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java b/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java index fd90f91eb4..cfd4eb355b 100644 --- a/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java +++ b/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java @@ -8,8 +8,10 @@ import redis.clients.jedis.util.JedisURIHelper; import java.net.URI; +import java.util.List; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mockConstruction; /** @@ -26,7 +28,14 @@ public class JedisPoolUnitTest { public void compareACLToStringWithConfig() { try (MockedConstruction ignored = mockConstruction(JedisFactory.class, (mock, context) -> { - DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); @@ -42,11 +51,24 @@ public void compareACLToStringWithConfig() { public void compareACLToPoolConfigWithConfig() { try (MockedConstruction ignored = mockConstruction(JedisFactory.class, (mock, context) -> { - String username = (String) context.arguments().get(4); - String password = (String) context.arguments().get(5); - - assertEquals(endpoint.getUsername(), username); - assertEquals(endpoint.getPassword(), password); + boolean nameCheck = false; + boolean passwordCheck = false; + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (!nameCheck) { + if (argument instanceof String) { + nameCheck = endpoint.getUsername().equalsIgnoreCase((String) argument); + } + } + if (!passwordCheck) { + if (argument instanceof String) { + passwordCheck = endpoint.getPassword().equalsIgnoreCase((String) argument); + } + } + } + assertTrue(nameCheck); + assertTrue(passwordCheck); })) { JedisPool pool = new JedisPool(new JedisPoolConfig(), endpoint.getHost(), endpoint.getPort(), endpoint.getUsername(), endpoint.getPassword()); @@ -59,11 +81,24 @@ public void compareACLToPoolConfigWithConfig() { public void compareACLToPoolConfigAndTimeoutWithConfig() { try (MockedConstruction ignored = mockConstruction(JedisFactory.class, (mock, context) -> { - String username = (String) context.arguments().get(4); - String password = (String) context.arguments().get(5); - - assertEquals(endpoint.getUsername(), username); - assertEquals(endpoint.getPassword(), password); + boolean nameCheck = false; + boolean passwordCheck = false; + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (!nameCheck) { + if (argument instanceof String) { + nameCheck = endpoint.getUsername().equalsIgnoreCase((String) argument); + } + } + if (!passwordCheck) { + if (argument instanceof String) { + passwordCheck = endpoint.getPassword().equalsIgnoreCase((String) argument); + } + } + } + assertTrue(nameCheck); + assertTrue(passwordCheck); })) { JedisPool pool = new JedisPool(new JedisPoolConfig(), endpoint.getHost(), endpoint.getPort(), Protocol.DEFAULT_TIMEOUT, endpoint.getUsername(), endpoint.getPassword()); @@ -76,11 +111,24 @@ public void compareACLToPoolConfigAndTimeoutWithConfig() { public void compareACLToPoolConfigAndTimeoutSslWithConfig() { try (MockedConstruction ignored = mockConstruction(JedisFactory.class, (mock, context) -> { - String username = (String) context.arguments().get(5); - String password = (String) context.arguments().get(6); - - assertEquals(endpoint.getUsername(), username); - assertEquals(endpoint.getPassword(), password); + boolean nameCheck = false; + boolean passwordCheck = false; + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (!nameCheck) { + if (argument instanceof String) { + nameCheck = endpoint.getUsername().equalsIgnoreCase((String) argument); + } + } + if (!passwordCheck) { + if (argument instanceof String) { + passwordCheck = endpoint.getPassword().equalsIgnoreCase((String) argument); + } + } + } + assertTrue(nameCheck); + assertTrue(passwordCheck); })) { JedisPool pool = new JedisPool(new JedisPoolConfig(), endpoint.getHost(), endpoint.getPort(), Protocol.DEFAULT_TIMEOUT, endpoint.getUsername(), endpoint.getPassword(), false); @@ -93,13 +141,17 @@ public void compareACLToPoolConfigAndTimeoutSslWithConfig() { public void compareACLToURIWithConfig() { try (MockedConstruction ignored = mockConstruction(JedisFactory.class, (mock, context) -> { - URI uri = (URI) context.arguments().get(0); + URI uri = new URI("redis://" + endpoint.getHost() + ":" + endpoint.getPort()); - String username = JedisURIHelper.getUser(uri); - String password = JedisURIHelper.getPassword(uri); + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof URI) { + uri = (URI) argument; + } + } - assertEquals(endpoint.getUsername(), username); - assertEquals(endpoint.getPassword(), password); + assertEquals(endpoint.getUsername(), JedisURIHelper.getUser(uri)); + assertEquals(endpoint.getPassword(), JedisURIHelper.getPassword(uri)); })) { JedisPool pool = new JedisPool(endpoint.getURIBuilder().defaultCredentials().build()); @@ -112,13 +164,17 @@ public void compareACLToURIWithConfig() { public void compareACLToClientConfigWithConfig() { try (MockedConstruction ignored = mockConstruction(JedisFactory.class, (mock, context) -> { - DefaultJedisClientConfig config = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); - String username = config.getUser(); - String password = config.getPassword(); + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } - assertEquals(endpoint.getUsername(), username); - assertEquals(endpoint.getPassword(), password); + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); })) { JedisPool pool = new JedisPool(new JedisPoolConfig(), endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build()); @@ -131,10 +187,17 @@ public void compareACLToClientConfigWithConfig() { public void compareACLToClientConfigAndSocketFactoryWithConfig() { try (MockedConstruction ignored = mockConstruction(JedisFactory.class, (mock, context) -> { - DefaultJedisClientConfig config = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } - assertEquals(endpoint.getUsername(), config.getUser()); - assertEquals(endpoint.getPassword(), config.getPassword()); + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); })) { JedisPool pool = new JedisPool(new JedisPoolConfig(), new DefaultJedisSocketFactory(), endpoint.getClientConfigBuilder().build()); @@ -147,10 +210,17 @@ public void compareACLToClientConfigAndSocketFactoryWithConfig() { public void compareACLToHostAndPortClientConfigWithConfig() { try (MockedConstruction ignored = mockConstruction(JedisFactory.class, (mock, context) -> { - DefaultJedisClientConfig config = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } - assertEquals(endpoint.getUsername(), config.getUser()); - assertEquals(endpoint.getPassword(), config.getPassword()); + assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); + assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); })) { JedisPool pool = new JedisPool(new GenericObjectPoolConfig<>(), endpoint.getHostAndPort(), @@ -167,7 +237,14 @@ public void compareACLToHostAndPortClientConfigWithConfig() { public void compareACLWithConfigForJedisPooled() { try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, (mock, context) -> { - DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); @@ -183,7 +260,14 @@ public void compareACLWithConfigForJedisPooled() { public void compareACLToConnectionConfigWithConfigForJedisPooled() { try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, (mock, context) -> { - DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); @@ -199,7 +283,14 @@ public void compareACLToConnectionConfigWithConfigForJedisPooled() { public void compareACLToConnectionConfigWithConfigAndTimeoutForJedisPooled() { try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, (mock, context) -> { - DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); @@ -215,7 +306,14 @@ public void compareACLToConnectionConfigWithConfigAndTimeoutForJedisPooled() { public void compareACLToConnectionConfigAndTimeoutSslWithConfigForJedisPooled() { try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, (mock, context) -> { - DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); @@ -231,13 +329,18 @@ public void compareACLToConnectionConfigAndTimeoutSslWithConfigForJedisPooled() public void compareACLToURIWithConfigForJedisPooled() { try (MockedConstruction ignored = mockConstruction(JedisFactory.class, (mock, context) -> { - URI uri = (URI) context.arguments().get(0); + URI uri = new URI("redis://" + endpoint.getHost() + ":" + endpoint.getPort()); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof URI) { + uri = (URI) argument; + } + } - String username = JedisURIHelper.getUser(uri); - String password = JedisURIHelper.getPassword(uri); + assertEquals(endpoint.getUsername(), JedisURIHelper.getUser(uri)); + assertEquals(endpoint.getPassword(), JedisURIHelper.getPassword(uri)); - assertEquals(endpoint.getUsername(), username); - assertEquals(endpoint.getPassword(), password); })) { JedisPooled pool = new JedisPooled(new ConnectionPoolConfig(), endpoint.getURIBuilder().defaultCredentials().build().toString()); @@ -254,7 +357,14 @@ public void compareACLToURIWithConfigForJedisPooled() { public void compareACLWithConfigForUnifiedJedis() { try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, (mock, context) -> { - DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); @@ -270,7 +380,14 @@ public void compareACLWithConfigForUnifiedJedis() { public void compareACLToURIWithConfigForUnifiedJedis() { try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, (mock, context) -> { - DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); @@ -286,7 +403,14 @@ public void compareACLToURIWithConfigForUnifiedJedis() { public void compareACLToURIAndConfigWithConfigForUnifiedJedis() { try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, (mock, context) -> { - DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword()); @@ -303,7 +427,14 @@ public void compareACLToURIAndConfigWithConfigForUnifiedJedis() { public void compareACLToCacheAndConfigWithConfigForUnifiedJedis() { try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, (mock, context) -> { - DefaultJedisClientConfig jedisClientConfig = (DefaultJedisClientConfig) context.arguments().get(1); + DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().build(); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof DefaultJedisClientConfig) { + jedisClientConfig = (DefaultJedisClientConfig) argument; + } + } assertEquals(endpoint.getUsername(), jedisClientConfig.getUser()); assertEquals(endpoint.getPassword(), jedisClientConfig.getPassword());