diff --git a/src/test/java/redis/clients/jedis/ACLJedisPoolTest.java b/src/test/java/redis/clients/jedis/ACLJedisPoolTest.java index 4ea7457075..109e3ea400 100644 --- a/src/test/java/redis/clients/jedis/ACLJedisPoolTest.java +++ b/src/test/java/redis/clients/jedis/ACLJedisPoolTest.java @@ -282,6 +282,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 86378e55ae..a0ca183e51 100644 --- a/src/test/java/redis/clients/jedis/ACLJedisTest.java +++ b/src/test/java/redis/clients/jedis/ACLJedisTest.java @@ -110,4 +110,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/JedisPoolUnitTest.java b/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java new file mode 100644 index 0000000000..cfd4eb355b --- /dev/null +++ b/src/test/java/redis/clients/jedis/JedisPoolUnitTest.java @@ -0,0 +1,450 @@ +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; +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; + +/** + * 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"); + + /** + * 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, + (mock, context) -> { + 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()); + })) { + + 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) -> { + 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()); + + pool.close(); + } + } + + @Test + public void compareACLToPoolConfigAndTimeoutWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + 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()); + + pool.close(); + } + } + + @Test + public void compareACLToPoolConfigAndTimeoutSslWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + 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); + + pool.close(); + } + } + + @Test + public void compareACLToURIWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + URI uri = new URI("redis://" + endpoint.getHost() + ":" + endpoint.getPort()); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof URI) { + uri = (URI) argument; + } + } + + assertEquals(endpoint.getUsername(), JedisURIHelper.getUser(uri)); + assertEquals(endpoint.getPassword(), JedisURIHelper.getPassword(uri)); + })) { + + JedisPool pool = new JedisPool(endpoint.getURIBuilder().defaultCredentials().build()); + + pool.close(); + } + } + + @Test + public void compareACLToClientConfigWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + 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()); + })) { + + 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 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()); + })) { + + JedisPool pool = new JedisPool(new JedisPoolConfig(), new DefaultJedisSocketFactory(), endpoint.getClientConfigBuilder().build()); + + pool.close(); + } + } + + @Test + public void compareACLToHostAndPortClientConfigWithConfig() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + 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()); + })) { + + 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. + */ + @Test + public void compareACLWithConfigForJedisPooled() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + 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()); + })) { + + 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.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()); + })) { + + 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.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()); + })) { + + 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.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()); + })) { + + JedisPooled jedisPooled = new JedisPooled(new ConnectionPoolConfig(), endpoint.getHost(), endpoint.getPort(), Protocol.DEFAULT_TIMEOUT, endpoint.getUsername(), endpoint.getPassword(), false); + + jedisPooled.close(); + } + } + + @Test + public void compareACLToURIWithConfigForJedisPooled() { + try (MockedConstruction ignored = mockConstruction(JedisFactory.class, + (mock, context) -> { + URI uri = new URI("redis://" + endpoint.getHost() + ":" + endpoint.getPort()); + + List arguments = context.arguments(); + for (Object argument : arguments) { + if (argument instanceof URI) { + uri = (URI) argument; + } + } + + assertEquals(endpoint.getUsername(), JedisURIHelper.getUser(uri)); + assertEquals(endpoint.getPassword(), JedisURIHelper.getPassword(uri)); + + })) { + + 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, + (mock, context) -> { + 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()); + })) { + + UnifiedJedis unifiedJedis = new UnifiedJedis(endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build()); + + unifiedJedis.close(); + } + } + + @Test + public void compareACLToURIWithConfigForUnifiedJedis() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + 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()); + })) { + + UnifiedJedis unifiedJedis = new UnifiedJedis(endpoint.getURIBuilder().defaultCredentials().build()); + + unifiedJedis.close(); + } + } + + @Test + public void compareACLToURIAndConfigWithConfigForUnifiedJedis() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + 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()); + })) { + + UnifiedJedis unifiedJedis = new UnifiedJedis(endpoint.getURIBuilder().defaultCredentials().build(), + DefaultJedisClientConfig.builder().build()); + + unifiedJedis.close(); + } + } + + @Test + public void compareACLToCacheAndConfigWithConfigForUnifiedJedis() { + try (MockedConstruction ignored = mockConstruction(ConnectionFactory.class, + (mock, context) -> { + 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()); + })) { + + UnifiedJedis unifiedJedis = new UnifiedJedis(endpoint.getHostAndPort(), + DefaultJedisClientConfig.builder().user(endpoint.getUsername()).password(endpoint.getPassword()).protocol(RedisProtocol.RESP3).build(), + new TestCache()); + + unifiedJedis.close(); + } + } +}