diff --git a/src/main/java/redis/clients/jedis/BinaryClient.java b/src/main/java/redis/clients/jedis/BinaryClient.java index 07fdb258db..342986a7df 100644 --- a/src/main/java/redis/clients/jedis/BinaryClient.java +++ b/src/main/java/redis/clients/jedis/BinaryClient.java @@ -1,27 +1,5 @@ package redis.clients.jedis; -import static redis.clients.jedis.Protocol.toByteArray; -import static redis.clients.jedis.Protocol.Command.*; -import static redis.clients.jedis.Protocol.Keyword.ENCODING; -import static redis.clients.jedis.Protocol.Keyword.IDLETIME; -import static redis.clients.jedis.Protocol.Keyword.LEN; -import static redis.clients.jedis.Protocol.Keyword.LIMIT; -import static redis.clients.jedis.Protocol.Keyword.NO; -import static redis.clients.jedis.Protocol.Keyword.ONE; -import static redis.clients.jedis.Protocol.Keyword.REFCOUNT; -import static redis.clients.jedis.Protocol.Keyword.RESET; -import static redis.clients.jedis.Protocol.Keyword.STORE; -import static redis.clients.jedis.Protocol.Keyword.WITHSCORES; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLParameters; -import javax.net.ssl.SSLSocketFactory; - import redis.clients.jedis.Protocol.Command; import redis.clients.jedis.Protocol.Keyword; import redis.clients.jedis.params.geo.GeoRadiusParam; @@ -30,6 +8,20 @@ import redis.clients.jedis.params.sortedset.ZIncrByParams; import redis.clients.util.SafeEncoder; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import static redis.clients.jedis.Protocol.Command.*; +import static redis.clients.jedis.Protocol.Command.EXISTS; +import static redis.clients.jedis.Protocol.Command.PSUBSCRIBE; +import static redis.clients.jedis.Protocol.Command.PUNSUBSCRIBE; +import static redis.clients.jedis.Protocol.Command.SUBSCRIBE; +import static redis.clients.jedis.Protocol.Command.UNSUBSCRIBE; +import static redis.clients.jedis.Protocol.Keyword.*; +import static redis.clients.jedis.Protocol.toByteArray; + public class BinaryClient extends Connection { public enum LIST_POSITION { BEFORE, AFTER; @@ -40,44 +32,32 @@ private LIST_POSITION() { } } - private boolean isInMulti; - - private String password; - private int db; + private boolean isInMulti; private boolean isInWatch; - public BinaryClient() { - super(); - } - - public BinaryClient(final String host) { - super(host); + public BinaryClient(final ClientOptions clientOptions) { + super(clientOptions); + this.db = clientOptions.getDatabase(); } - public BinaryClient(final String host, final int port) { - super(host, port); + public boolean isInMulti() { + return isInMulti; } - public BinaryClient(final String host, final int port, final boolean ssl) { - super(host, port, ssl); + public boolean isInWatch() { + return isInWatch; } - public BinaryClient(final String host, final int port, final boolean ssl, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - super(host, port, ssl, sslSocketFactory, sslParameters, hostnameVerifier); + public int getDb() { + return db; } - public boolean isInMulti() { - return isInMulti; + public void setDb(int db) { + this.db = db; } - public boolean isInWatch() { - return isInWatch; - } - private byte[][] joinParameters(byte[] first, byte[][] rest) { byte[][] result = new byte[rest.length + 1][]; result[0] = first; @@ -85,20 +65,12 @@ private byte[][] joinParameters(byte[] first, byte[][] rest) { return result; } - public void setPassword(final String password) { - this.password = password; - } - - public void setDb(int db) { - this.db = db; - } - @Override public void connect() { if (!isConnected()) { super.connect(); - if (password != null) { - auth(password); + if (clientOptions.getPassword() != null) { + auth(); getStatusCodeReply(); } if (db > 0) { @@ -189,7 +161,13 @@ public void touch(final byte[]... keys) { sendCommand(TOUCH, keys); } - public void select(final int index) { + public void select() { + if(clientOptions.getDatabase() > 0) { + select(clientOptions.getDatabase()); + } + } + + public void select(int index) { sendCommand(SELECT, toByteArray(index)); } @@ -579,8 +557,13 @@ public void brpop(final int timeout, final byte[]... keys) { brpop(args.toArray(new byte[args.size()][])); } - public void auth(final String password) { - setPassword(password); + public void auth() { + if(clientOptions.getPassword() != null) { + auth(clientOptions.getPassword()); + } + } + + public void auth(String password) { sendCommand(AUTH, password); } @@ -952,10 +935,6 @@ public void getrange(byte[] key, long startOffset, long endOffset) { sendCommand(GETRANGE, key, toByteArray(startOffset), toByteArray(endOffset)); } - public int getDB() { - return db; - } - @Override public void disconnect() { db = 0; @@ -964,7 +943,6 @@ public void disconnect() { @Override public void close() { - db = 0; super.close(); } diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index 6cdc5ba602..4e802de583 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -1,28 +1,7 @@ package redis.clients.jedis; -import static redis.clients.jedis.Protocol.toByteArray; - -import java.io.Closeable; -import java.io.Serializable; -import java.net.URI; -import java.util.AbstractMap; -import java.util.AbstractSet; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLParameters; -import javax.net.ssl.SSLSocketFactory; - import redis.clients.jedis.BinaryClient.LIST_POSITION; import redis.clients.jedis.commands.*; -import redis.clients.jedis.exceptions.InvalidURIException; import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.jedis.exceptions.JedisException; import redis.clients.jedis.params.geo.GeoRadiusParam; @@ -30,130 +9,25 @@ import redis.clients.jedis.params.sortedset.ZAddParams; import redis.clients.jedis.params.sortedset.ZIncrByParams; import redis.clients.util.JedisByteHashMap; -import redis.clients.util.JedisURIHelper; import redis.clients.util.SafeEncoder; +import java.io.Closeable; +import java.io.Serializable; +import java.util.*; + +import static redis.clients.jedis.Protocol.toByteArray; + public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKeyBinaryCommands, AdvancedBinaryJedisCommands, BinaryScriptingCommands, Closeable { - protected Client client = null; + protected final Client client; protected Transaction transaction = null; protected Pipeline pipeline = null; - public BinaryJedis() { - client = new Client(); - } - - public BinaryJedis(final String host) { - URI uri = URI.create(host); - if (uri.getScheme() != null && (uri.getScheme().equals("redis") || uri.getScheme().equals("rediss"))) { - initializeClientFromURI(uri); - } else { - client = new Client(host); - } - } - - public BinaryJedis(final String host, final int port) { - client = new Client(host, port); - } - - public BinaryJedis(final String host, final int port, final boolean ssl) { - client = new Client(host, port, ssl); - } - - public BinaryJedis(final String host, final int port, final boolean ssl, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - client = new Client(host, port, ssl, sslSocketFactory, sslParameters, hostnameVerifier); - } - - public BinaryJedis(final String host, final int port, final int timeout) { - client = new Client(host, port); - client.setConnectionTimeout(timeout); - client.setSoTimeout(timeout); - } - - public BinaryJedis(final String host, final int port, final int timeout, final boolean ssl) { - client = new Client(host, port, ssl); - client.setConnectionTimeout(timeout); - client.setSoTimeout(timeout); - } - - public BinaryJedis(final String host, final int port, final int timeout, final boolean ssl, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - client = new Client(host, port, ssl, sslSocketFactory, sslParameters, hostnameVerifier); - client.setConnectionTimeout(timeout); - client.setSoTimeout(timeout); - } - - public BinaryJedis(final String host, final int port, final int connectionTimeout, - final int soTimeout) { - client = new Client(host, port); - client.setConnectionTimeout(connectionTimeout); - client.setSoTimeout(soTimeout); - } - - public BinaryJedis(final String host, final int port, final int connectionTimeout, - final int soTimeout, final boolean ssl) { - client = new Client(host, port, ssl); - client.setConnectionTimeout(connectionTimeout); - client.setSoTimeout(soTimeout); - } - - public BinaryJedis(final String host, final int port, final int connectionTimeout, - final int soTimeout, final boolean ssl, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - client = new Client(host, port, ssl, sslSocketFactory, sslParameters, hostnameVerifier); - client.setConnectionTimeout(connectionTimeout); - client.setSoTimeout(soTimeout); - } - - public BinaryJedis(final JedisShardInfo shardInfo) { - client = new Client(shardInfo.getHost(), shardInfo.getPort(), shardInfo.getSsl(), - shardInfo.getSslSocketFactory(), shardInfo.getSslParameters(), - shardInfo.getHostnameVerifier()); - client.setConnectionTimeout(shardInfo.getConnectionTimeout()); - client.setSoTimeout(shardInfo.getSoTimeout()); - client.setPassword(shardInfo.getPassword()); - client.setDb(shardInfo.getDb()); - } - - public BinaryJedis(URI uri) { - initializeClientFromURI(uri); - } - - public BinaryJedis(URI uri, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - initializeClientFromURI(uri, sslSocketFactory, sslParameters, hostnameVerifier); - } - - public BinaryJedis(final URI uri, final int timeout) { - initializeClientFromURI(uri); - client.setConnectionTimeout(timeout); - client.setSoTimeout(timeout); - } - - public BinaryJedis(final URI uri, final int timeout, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - initializeClientFromURI(uri, sslSocketFactory, sslParameters, hostnameVerifier); - client.setConnectionTimeout(timeout); - client.setSoTimeout(timeout); - } - - public BinaryJedis(final URI uri, final int connectionTimeout, final int soTimeout) { - initializeClientFromURI(uri); - client.setConnectionTimeout(connectionTimeout); - client.setSoTimeout(soTimeout); - } - - public BinaryJedis(final URI uri, final int connectionTimeout, final int soTimeout, - final SSLSocketFactory sslSocketFactory,final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - initializeClientFromURI(uri, sslSocketFactory, sslParameters, hostnameVerifier); - client.setConnectionTimeout(connectionTimeout); - client.setSoTimeout(soTimeout); + public BinaryJedis(ClientOptions clientOptions) { + client = new Client(clientOptions); } + /* private void initializeClientFromURI(URI uri) { if (!JedisURIHelper.isValid(uri)) { throw new InvalidURIException(String.format( @@ -199,6 +73,7 @@ private void initializeClientFromURI(URI uri, final SSLSocketFactory sslSocketFa client.setDb(dbIndex); } } + */ @Override public String ping() { @@ -1850,6 +1725,13 @@ protected void checkIsInMultiOrPipeline() { public void connect() { client.connect(); + + /* + client.auth(); + client.select(); + client.setName(); + */ + } public void disconnect() { @@ -3204,7 +3086,7 @@ public void psubscribe(BinaryJedisPubSub jedisPubSub, byte[]... patterns) { @Override public int getDB() { - return client.getDB(); + return client.getDb(); } /** diff --git a/src/main/java/redis/clients/jedis/Client.java b/src/main/java/redis/clients/jedis/Client.java index b88d3ecbfa..a5f7ad0e22 100644 --- a/src/main/java/redis/clients/jedis/Client.java +++ b/src/main/java/redis/clients/jedis/Client.java @@ -8,10 +8,6 @@ import java.util.Map; import java.util.Map.Entry; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLParameters; -import javax.net.ssl.SSLSocketFactory; - import redis.clients.jedis.JedisCluster.Reset; import redis.clients.jedis.commands.Commands; import redis.clients.jedis.params.geo.GeoRadiusParam; @@ -22,26 +18,8 @@ public class Client extends BinaryClient implements Commands { - public Client() { - super(); - } - - public Client(final String host) { - super(host); - } - - public Client(final String host, final int port) { - super(host, port); - } - - public Client(final String host, final int port, final boolean ssl) { - super(host, port, ssl); - } - - public Client(final String host, final int port, final boolean ssl, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - super(host, port, ssl, sslSocketFactory, sslParameters, hostnameVerifier); + public Client(final ClientOptions clientOptions) { + super(clientOptions); } @Override @@ -962,10 +940,16 @@ public void clientKill(final String client) { clientKill(SafeEncoder.encode(client)); } - public void clientSetname(final String name) { + public void setName(final String name) { clientSetname(SafeEncoder.encode(name)); } + public void setName() { + if(clientOptions.getClientName() != null) { + setName(clientOptions.getClientName()); + } + } + public void migrate(final String host, final int port, final String key, final int destinationDb, final int timeout) { migrate(SafeEncoder.encode(host), port, SafeEncoder.encode(key), destinationDb, timeout); @@ -1221,5 +1205,4 @@ public void bitfield(final String key, final String... arguments) { public void hstrlen(final String key, final String field) { hstrlen(SafeEncoder.encode(key), SafeEncoder.encode(field)); } - } diff --git a/src/main/java/redis/clients/jedis/ClientOptions.java b/src/main/java/redis/clients/jedis/ClientOptions.java new file mode 100644 index 0000000000..c367d2478d --- /dev/null +++ b/src/main/java/redis/clients/jedis/ClientOptions.java @@ -0,0 +1,188 @@ +/* + * Copyright 2011-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package redis.clients.jedis; + +import redis.clients.jedis.exceptions.InvalidURIException; +import redis.clients.util.JedisURIHelper; + +import java.net.URI; + +/** + * Client Options to control the behavior of {@link Jedis} or {@link JedisPool}. + * + * @author Mark Paluch + */ +public class ClientOptions { + + private String host; + private int port; + private final int connectionTimeout; + private final int soTimeout; + private String password; + private int database; + private final String clientName; + private boolean ssl; + private final SslOptions sslOptions; + + public ClientOptions(String host, int port, int connectionTimeout, int soTimeout, String password, int database, String clientName, boolean ssl, SslOptions sslOptions) { + this.host = host; + this.port = port; + this.connectionTimeout = connectionTimeout; + this.soTimeout = soTimeout; + this.password = password; + this.database = database; + this.clientName = clientName; + this.ssl = ssl; + this.sslOptions = sslOptions; + } + + public String getHost() { + return host; + } + + public int getPort() { + return port; + } + + public int getConnectionTimeout() { + return connectionTimeout; + } + + public int getSoTimeout() { + return soTimeout; + } + + public String getPassword() { + return password; + } + + public int getDatabase() { + return database; + } + + public String getClientName() { + return clientName; + } + + public boolean isSsl() { + return ssl; + } + + public SslOptions getSslOptions() { + return sslOptions; + } + + public static ClientOptionsBuilder builder(){ + return new ClientOptionsBuilder(); + } + + public static ClientOptions create(){ + return builder().build(); + } + + public static class ClientOptionsBuilder { + private static final String REDISS = "rediss"; + private String host = Protocol.DEFAULT_HOST; + private int port = Protocol.DEFAULT_PORT; + private int connectionTimeout = Protocol.DEFAULT_TIMEOUT; + private int soTimeout = Protocol.DEFAULT_TIMEOUT; + private String password; + private int database = Protocol.DEFAULT_DATABASE; + private String clientName; + private boolean ssl = false; + private SslOptions sslOptions = SslOptions.create(); + + public ClientOptionsBuilder withHost(String host) { + this.host = host; + return this; + } + + public ClientOptionsBuilder withPort(int port) { + this.port = port; + return this; + } + + public ClientOptionsBuilder withHostAndPort(HostAndPort hostAndPort) { + return this.withHost(hostAndPort.getHost()).withPort(hostAndPort.getPort()); + } + + public ClientOptionsBuilder withConnectionTimeout(int connectionTimeout) { + this.connectionTimeout = connectionTimeout; + return this; + } + + public ClientOptionsBuilder withSoTimeout(int soTimeout) { + this.soTimeout = soTimeout; + return this; + } + + public ClientOptionsBuilder withTimeout(int timeout) { + this.connectionTimeout = timeout; + this.soTimeout = timeout; + return this; + } + + public ClientOptionsBuilder withPassword(String password) { + this.password = password; + return this; + } + + public ClientOptionsBuilder withDatabase(int database) { + this.database = database; + return this; + } + + public ClientOptionsBuilder withClientName(String clientName) { + this.clientName = clientName; + return this; + } + + public ClientOptionsBuilder withSsl(boolean ssl) { + this.ssl = ssl; + return this; + } + + public ClientOptionsBuilder withSslOptions(SslOptions sslOptions) { + this.sslOptions = sslOptions; + return this; + } + + public ClientOptionsBuilder withURI(URI uri){ + if (JedisURIHelper.isValid(uri)) { + this.host = uri.getHost(); + this.port = uri.getPort(); + this.password = JedisURIHelper.getPassword(uri); + this.database = JedisURIHelper.getDBIndex(uri); + this.ssl = uri.getScheme().equals(REDISS); + } else { + throw new InvalidURIException(String.format( + "Invalid Redis URI. %s", uri.toString())); + } + + return this; + } + + public ClientOptionsBuilder withURI(String uri) { + return withURI(URI.create(uri)); + } + + public ClientOptions build() { + return new ClientOptions(host, port, connectionTimeout, soTimeout, password, database, clientName, ssl, sslOptions); + } + + + } +} diff --git a/src/main/java/redis/clients/jedis/Connection.java b/src/main/java/redis/clients/jedis/Connection.java index 28966aaf71..6cc15024b9 100644 --- a/src/main/java/redis/clients/jedis/Connection.java +++ b/src/main/java/redis/clients/jedis/Connection.java @@ -1,18 +1,5 @@ package redis.clients.jedis; -import java.io.Closeable; -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.net.SocketException; -import java.util.ArrayList; -import java.util.List; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLParameters; -import javax.net.ssl.SSLSocket; -import javax.net.ssl.SSLSocketFactory; - import redis.clients.jedis.commands.ProtocolCommand; import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisDataException; @@ -21,72 +8,38 @@ import redis.clients.util.RedisOutputStream; import redis.clients.util.SafeEncoder; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLSocketFactory; +import java.io.Closeable; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.List; + public class Connection implements Closeable { private static final byte[][] EMPTY_ARGS = new byte[0][]; - private String host = Protocol.DEFAULT_HOST; - private int port = Protocol.DEFAULT_PORT; + protected ClientOptions clientOptions; private Socket socket; private RedisOutputStream outputStream; private RedisInputStream inputStream; - private int connectionTimeout = Protocol.DEFAULT_TIMEOUT; - private int soTimeout = Protocol.DEFAULT_TIMEOUT; private boolean broken = false; - private boolean ssl; - private SSLSocketFactory sslSocketFactory; - private SSLParameters sslParameters; - private HostnameVerifier hostnameVerifier; - - public Connection() { - } - public Connection(final String host) { - this.host = host; + public Connection(ClientOptions clientOptions) { + this.clientOptions = clientOptions; } - public Connection(final String host, final int port) { - this.host = host; - this.port = port; - } - - public Connection(final String host, final int port, final boolean ssl) { - this.host = host; - this.port = port; - this.ssl = ssl; - } - - public Connection(final String host, final int port, final boolean ssl, - SSLSocketFactory sslSocketFactory, SSLParameters sslParameters, - HostnameVerifier hostnameVerifier) { - this.host = host; - this.port = port; - this.ssl = ssl; - this.sslSocketFactory = sslSocketFactory; - this.sslParameters = sslParameters; - this.hostnameVerifier = hostnameVerifier; + public ClientOptions getClientOptions() { + return clientOptions; } public Socket getSocket() { return socket; } - public int getConnectionTimeout() { - return connectionTimeout; - } - - public int getSoTimeout() { - return soTimeout; - } - - public void setConnectionTimeout(int connectionTimeout) { - this.connectionTimeout = connectionTimeout; - } - - public void setSoTimeout(int soTimeout) { - this.soTimeout = soTimeout; - } - public void setTimeoutInfinite() { try { if (!isConnected()) { @@ -101,7 +54,7 @@ public void setTimeoutInfinite() { public void rollbackTimeout() { try { - socket.setSoTimeout(soTimeout); + socket.setSoTimeout(clientOptions.getSoTimeout()); } catch (SocketException ex) { broken = true; throw new JedisConnectionException(ex); @@ -148,23 +101,10 @@ public Connection sendCommand(final ProtocolCommand cmd, final byte[]... args) { } } - public String getHost() { - return host; - } - - public void setHost(final String host) { - this.host = host; - } - - public int getPort() { - return port; - } - - public void setPort(final int port) { - this.port = port; - } - public void connect() { + String host = clientOptions.getHost(); + int port = clientOptions.getPort(); + if (!isConnected()) { try { socket = new Socket(); @@ -179,21 +119,24 @@ public void connect() { // immediately // <-@wjw_add - socket.connect(new InetSocketAddress(host, port), connectionTimeout); - socket.setSoTimeout(soTimeout); + socket.connect(new InetSocketAddress(host, port), clientOptions.getConnectionTimeout()); + socket.setSoTimeout(clientOptions.getSoTimeout()); - if (ssl) { - if (null == sslSocketFactory) { - sslSocketFactory = (SSLSocketFactory)SSLSocketFactory.getDefault(); + if (clientOptions.isSsl()) { + + if (clientOptions.getSslOptions().getSslSocketFactory() != null) { + socket = clientOptions.getSslOptions().getSslSocketFactory().createSocket(socket, host, port, true); + } else { + socket = ((SSLSocketFactory)SSLSocketFactory.getDefault()).createSocket(socket, host, port, true); } - socket = (SSLSocket) sslSocketFactory.createSocket(socket, host, port, true); - if (null != sslParameters) { - ((SSLSocket) socket).setSSLParameters(sslParameters); + + if (clientOptions.getSslOptions().getSslParameters() != null) { + ((SSLSocket) socket).setSSLParameters(clientOptions.getSslOptions().getSslParameters()); } - if ((null != hostnameVerifier) && - (!hostnameVerifier.verify(host, ((SSLSocket) socket).getSession()))) { + if ((clientOptions.getSslOptions().getHostnameVerifier() != null) && + (!clientOptions.getSslOptions().getHostnameVerifier().verify(host, ((SSLSocket) socket).getSession()))) { String message = String.format( - "The connection to '%s' failed ssl/tls hostname verification.", host); + "The connection to '%s' failed ssl/tls hostname verification.", host); throw new JedisConnectionException(message); } } @@ -202,8 +145,8 @@ public void connect() { inputStream = new RedisInputStream(socket.getInputStream()); } catch (IOException ex) { broken = true; - throw new JedisConnectionException("Failed connecting to host " - + host + ":" + port, ex); + throw new JedisConnectionException("Failed connecting to host " + + host + ":" + port, ex); } } } diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 19ca8f52f5..00a83e9fcc 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -1,30 +1,8 @@ package redis.clients.jedis; -import java.net.URI; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLParameters; -import javax.net.ssl.SSLSocketFactory; - import redis.clients.jedis.BinaryClient.LIST_POSITION; import redis.clients.jedis.JedisCluster.Reset; -import redis.clients.jedis.commands.AdvancedJedisCommands; -import redis.clients.jedis.commands.BasicCommands; -import redis.clients.jedis.commands.ClusterCommands; -import redis.clients.jedis.commands.JedisCommands; -import redis.clients.jedis.commands.ModuleCommands; -import redis.clients.jedis.commands.MultiKeyCommands; -import redis.clients.jedis.commands.ScriptingCommands; -import redis.clients.jedis.commands.SentinelCommands; +import redis.clients.jedis.commands.*; import redis.clients.jedis.params.geo.GeoRadiusParam; import redis.clients.jedis.params.set.SetParams; import redis.clients.jedis.params.sortedset.ZAddParams; @@ -32,93 +10,24 @@ import redis.clients.util.SafeEncoder; import redis.clients.util.Slowlog; +import java.util.*; +import java.util.Map.Entry; + public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommands, AdvancedJedisCommands, ScriptingCommands, BasicCommands, ClusterCommands, SentinelCommands, ModuleCommands { protected JedisPoolAbstract dataSource = null; - public Jedis() { - super(); - } - - public Jedis(final String host) { - super(host); - } - - public Jedis(final String host, final int port) { - super(host, port); - } - - public Jedis(final String host, final int port, final boolean ssl) { - super(host, port, ssl); - } - - public Jedis(final String host, final int port, final boolean ssl, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - super(host, port, ssl, sslSocketFactory, sslParameters, hostnameVerifier); - } - - public Jedis(final String host, final int port, final int timeout) { - super(host, port, timeout); - } - - public Jedis(final String host, final int port, final int timeout, final boolean ssl) { - super(host, port, timeout, ssl); - } - - public Jedis(final String host, final int port, final int timeout, final boolean ssl, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - super(host, port, timeout, ssl, sslSocketFactory, sslParameters, hostnameVerifier); - } - - public Jedis(final String host, final int port, final int connectionTimeout, final int soTimeout) { - super(host, port, connectionTimeout, soTimeout); - } - - public Jedis(final String host, final int port, final int connectionTimeout, final int soTimeout, - final boolean ssl) { - super(host, port, connectionTimeout, soTimeout, ssl); - } - - public Jedis(final String host, final int port, final int connectionTimeout, final int soTimeout, - final boolean ssl, final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - super(host, port, connectionTimeout, soTimeout, ssl, sslSocketFactory, sslParameters, - hostnameVerifier); - } - - public Jedis(JedisShardInfo shardInfo) { - super(shardInfo); - } - - public Jedis(URI uri) { - super(uri); - } - - public Jedis(URI uri, final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - super(uri, sslSocketFactory, sslParameters, hostnameVerifier); - } - - public Jedis(final URI uri, final int timeout) { - super(uri, timeout); - } - - public Jedis(final URI uri, final int timeout, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - super(uri, timeout, sslSocketFactory, sslParameters, hostnameVerifier); + public Jedis(){ + this(ClientOptions.create()); } - public Jedis(final URI uri, final int connectionTimeout, final int soTimeout) { - super(uri, connectionTimeout, soTimeout); + public Jedis(ClientOptions clientOptions) { + super(clientOptions); } - public Jedis(final URI uri, final int connectionTimeout, final int soTimeout, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - super(uri, connectionTimeout, soTimeout, sslSocketFactory, sslParameters, hostnameVerifier); + public Jedis(JedisShardInfo shard) { + super(shard.toClientOptions()); } /** @@ -3181,7 +3090,7 @@ public String clientKill(final String client) { public String clientSetname(final String name) { checkIsInMultiOrPipeline(); - client.clientSetname(name); + client.setName(name); return client.getStatusCodeReply(); } diff --git a/src/main/java/redis/clients/jedis/JedisCluster.java b/src/main/java/redis/clients/jedis/JedisCluster.java index 1d5979963b..f60b432ac0 100644 --- a/src/main/java/redis/clients/jedis/JedisCluster.java +++ b/src/main/java/redis/clients/jedis/JedisCluster.java @@ -27,6 +27,7 @@ public static enum Reset { SOFT, HARD } + public JedisCluster(HostAndPort node) { this(Collections.singleton(node), DEFAULT_TIMEOUT); } @@ -107,6 +108,7 @@ public JedisCluster(Set jedisClusterNode, int connectionTimeout, in super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, clientName, poolConfig); } + @Override public String set(final String key, final String value) { return new JedisClusterCommand(connectionHandler, maxAttempts) { diff --git a/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java b/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java index ca764ecd5a..c564dcf987 100644 --- a/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java +++ b/src/main/java/redis/clients/jedis/JedisClusterConnectionHandler.java @@ -36,7 +36,7 @@ public Map getNodes() { private void initializeSlotsCache(Set startNodes, GenericObjectPoolConfig poolConfig, String password, String clientName) { for (HostAndPort hostAndPort : startNodes) { - Jedis jedis = new Jedis(hostAndPort.getHost(), hostAndPort.getPort()); + Jedis jedis = new Jedis(ClientOptions.builder().withHostAndPort(hostAndPort).build()); try { if (password != null) { jedis.auth(password); diff --git a/src/main/java/redis/clients/jedis/JedisClusterInfoCache.java b/src/main/java/redis/clients/jedis/JedisClusterInfoCache.java index 462a83d643..f6e59daece 100644 --- a/src/main/java/redis/clients/jedis/JedisClusterInfoCache.java +++ b/src/main/java/redis/clients/jedis/JedisClusterInfoCache.java @@ -1,23 +1,14 @@ package redis.clients.jedis; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantReadWriteLock; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLParameters; -import javax.net.ssl.SSLSocketFactory; - import org.apache.commons.pool2.impl.GenericObjectPoolConfig; - import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisException; import redis.clients.util.SafeEncoder; +import java.util.*; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + public class JedisClusterInfoCache { private final Map nodes = new HashMap(); private final Map slots = new HashMap(); @@ -150,31 +141,14 @@ private HostAndPort generateHostAndPort(List hostInfos) { ((Long) hostInfos.get(1)).intValue()); } - public JedisPool setupNodeIfNotExist(HostAndPort node) { - w.lock(); - try { - String nodeKey = getNodeKey(node); - JedisPool existingPool = nodes.get(nodeKey); - if (existingPool != null) return existingPool; - - JedisPool nodePool = new JedisPool(poolConfig, node.getHost(), node.getPort(), - connectionTimeout, soTimeout, password, 0, clientName, false, null, null, null); - nodes.put(nodeKey, nodePool); - return nodePool; - } finally { - w.unlock(); - } - } - - public JedisPool setupNodeIfNotExist(HostAndPort node, boolean ssl) { + public JedisPool setupNodeIfNotExist(ClientOptions options){ w.lock(); try { - String nodeKey = getNodeKey(node); + String nodeKey = getNodeKey(options.getHost(), options.getPort()); JedisPool existingPool = nodes.get(nodeKey); if (existingPool != null) return existingPool; - JedisPool nodePool = new JedisPool(poolConfig, node.getHost(), node.getPort(), - connectionTimeout, soTimeout, password, 0, null, ssl, null, null, null); + JedisPool nodePool = new JedisPool(poolConfig, options); nodes.put(nodeKey, nodePool); return nodePool; } finally { @@ -182,22 +156,9 @@ public JedisPool setupNodeIfNotExist(HostAndPort node, boolean ssl) { } } - public JedisPool setupNodeIfNotExist(HostAndPort node, boolean ssl, SSLSocketFactory sslSocketFactory, - SSLParameters sslParameters, HostnameVerifier hostnameVerifier) { - w.lock(); - try { - String nodeKey = getNodeKey(node); - JedisPool existingPool = nodes.get(nodeKey); - if (existingPool != null) return existingPool; - - JedisPool nodePool = new JedisPool(poolConfig, node.getHost(), node.getPort(), - connectionTimeout, soTimeout, password, 0, null, ssl, sslSocketFactory, sslParameters, - hostnameVerifier); - nodes.put(nodeKey, nodePool); - return nodePool; - } finally { - w.unlock(); - } + public JedisPool setupNodeIfNotExist(HostAndPort node){ + ClientOptions clientOptions = ClientOptions.builder().withHostAndPort(node).withConnectionTimeout(connectionTimeout).withSoTimeout(soTimeout).withPassword(password).withClientName(clientName).build(); + return setupNodeIfNotExist(clientOptions); } public void assignSlotToNode(int slot, HostAndPort targetNode) { @@ -243,7 +204,7 @@ public JedisPool getSlotPool(int slot) { public Map getNodes() { r.lock(); try { - return new HashMap(nodes); + return new HashMap<>(nodes); } finally { r.unlock(); } @@ -286,8 +247,12 @@ public static String getNodeKey(HostAndPort hnp) { return hnp.getHost() + ":" + hnp.getPort(); } + public static String getNodeKey(String host, int port) { + return host + ":" + port; + } + public static String getNodeKey(Client client) { - return client.getHost() + ":" + client.getPort(); + return client.getClientOptions().getHost() + ":" + client.getClientOptions().getPort(); } public static String getNodeKey(Jedis jedis) { diff --git a/src/main/java/redis/clients/jedis/JedisFactory.java b/src/main/java/redis/clients/jedis/JedisFactory.java index 65245a5675..faae39c01d 100644 --- a/src/main/java/redis/clients/jedis/JedisFactory.java +++ b/src/main/java/redis/clients/jedis/JedisFactory.java @@ -1,82 +1,18 @@ package redis.clients.jedis; -import java.net.URI; -import java.util.concurrent.atomic.AtomicReference; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLParameters; -import javax.net.ssl.SSLSocketFactory; - import org.apache.commons.pool2.PooledObject; import org.apache.commons.pool2.PooledObjectFactory; import org.apache.commons.pool2.impl.DefaultPooledObject; - -import redis.clients.jedis.exceptions.InvalidURIException; import redis.clients.jedis.exceptions.JedisException; -import redis.clients.util.JedisURIHelper; /** * PoolableObjectFactory custom impl. */ class JedisFactory implements PooledObjectFactory { - private final AtomicReference hostAndPort = new AtomicReference(); - private final int connectionTimeout; - private final int soTimeout; - private final String password; - private final int database; - private final String clientName; - private final boolean ssl; - private final SSLSocketFactory sslSocketFactory; - private SSLParameters sslParameters; - private HostnameVerifier hostnameVerifier; - - public JedisFactory(final String host, final int port, final int connectionTimeout, - final int soTimeout, final String password, final int database, final String clientName, - final boolean ssl, final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - this.hostAndPort.set(new HostAndPort(host, port)); - this.connectionTimeout = connectionTimeout; - this.soTimeout = soTimeout; - this.password = password; - this.database = database; - this.clientName = clientName; - this.ssl = ssl; - this.sslSocketFactory = sslSocketFactory; - this.sslParameters = sslParameters; - this.hostnameVerifier = hostnameVerifier; - } - - public JedisFactory(final URI uri, final int connectionTimeout, final int soTimeout, - final String clientName, final boolean ssl, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - if (!JedisURIHelper.isValid(uri)) { - throw new InvalidURIException(String.format( - "Cannot open Redis connection due invalid URI. %s", uri.toString())); - } - - this.hostAndPort.set(new HostAndPort(uri.getHost(), uri.getPort())); - this.connectionTimeout = connectionTimeout; - this.soTimeout = soTimeout; - this.password = JedisURIHelper.getPassword(uri); - this.database = JedisURIHelper.getDBIndex(uri); - this.clientName = clientName; - this.ssl = ssl; - this.sslSocketFactory = sslSocketFactory; - this.sslParameters = sslParameters; - this.hostnameVerifier = hostnameVerifier; - } - - public void setHostAndPort(final HostAndPort hostAndPort) { - this.hostAndPort.set(hostAndPort); - } - - @Override - public void activateObject(PooledObject pooledJedis) throws Exception { - final BinaryJedis jedis = pooledJedis.getObject(); - if (jedis.getDB() != database) { - jedis.select(database); - } + private final ClientOptions clientOptions; + public JedisFactory(final ClientOptions clientOptions) { + this.clientOptions = clientOptions; } @Override @@ -98,20 +34,18 @@ public void destroyObject(PooledObject pooledJedis) throws Exception { @Override public PooledObject makeObject() throws Exception { - final HostAndPort hostAndPort = this.hostAndPort.get(); - final Jedis jedis = new Jedis(hostAndPort.getHost(), hostAndPort.getPort(), connectionTimeout, - soTimeout, ssl, sslSocketFactory, sslParameters, hostnameVerifier); + final Jedis jedis = new Jedis(clientOptions); try { jedis.connect(); - if (password != null) { - jedis.auth(password); + if (clientOptions.getPassword() != null) { + jedis.auth(clientOptions.getPassword()); } - if (database != 0) { - jedis.select(database); + if (clientOptions.getDatabase() != 0) { + jedis.select(clientOptions.getDatabase()); } - if (clientName != null) { - jedis.clientSetname(clientName); + if (clientOptions.getClientName() != null) { + jedis.clientSetname(clientOptions.getClientName()); } } catch (JedisException je) { jedis.close(); @@ -130,17 +64,14 @@ public void passivateObject(PooledObject pooledJedis) throws Exception { @Override public boolean validateObject(PooledObject pooledJedis) { final BinaryJedis jedis = pooledJedis.getObject(); - try { - HostAndPort hostAndPort = this.hostAndPort.get(); - - String connectionHost = jedis.getClient().getHost(); - int connectionPort = jedis.getClient().getPort(); + return jedis.isConnected() && jedis.ping().equals("PONG"); + } - return hostAndPort.getHost().equals(connectionHost) - && hostAndPort.getPort() == connectionPort && jedis.isConnected() - && jedis.ping().equals("PONG"); - } catch (final Exception e) { - return false; + @Override + public void activateObject(PooledObject p) throws Exception { + final BinaryJedis jedis = p.getObject(); + if (jedis.getDB() != clientOptions.getDatabase()) { + jedis.select(clientOptions.getDatabase()); } } } \ No newline at end of file diff --git a/src/main/java/redis/clients/jedis/JedisPool.java b/src/main/java/redis/clients/jedis/JedisPool.java index a0e7d18ae5..743cbad589 100644 --- a/src/main/java/redis/clients/jedis/JedisPool.java +++ b/src/main/java/redis/clients/jedis/JedisPool.java @@ -1,225 +1,16 @@ package redis.clients.jedis; -import java.net.URI; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLParameters; -import javax.net.ssl.SSLSocketFactory; - -import org.apache.commons.pool2.impl.GenericObjectPool; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; - import redis.clients.jedis.exceptions.JedisException; -import redis.clients.util.JedisURIHelper; public class JedisPool extends JedisPoolAbstract { - private static final String REDISS = "rediss"; - - public JedisPool() { - this(Protocol.DEFAULT_HOST, Protocol.DEFAULT_PORT); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host) { - this(poolConfig, host, Protocol.DEFAULT_PORT, Protocol.DEFAULT_TIMEOUT, null, - Protocol.DEFAULT_DATABASE, null); - } - - public JedisPool(String host, int port) { - this(new GenericObjectPoolConfig(), host, port, Protocol.DEFAULT_TIMEOUT, null, - Protocol.DEFAULT_DATABASE, null); - } - - public JedisPool(final String host) { - URI uri = URI.create(host); - if (JedisURIHelper.isValid(uri)) { - String h = uri.getHost(); - int port = uri.getPort(); - String password = JedisURIHelper.getPassword(uri); - int database = JedisURIHelper.getDBIndex(uri); - boolean ssl = uri.getScheme().equals(REDISS); - this.internalPool = new GenericObjectPool(new JedisFactory(h, port, - Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, password, database, null, - ssl, null, null, null), new GenericObjectPoolConfig()); - } else { - this.internalPool = new GenericObjectPool(new JedisFactory(host, - Protocol.DEFAULT_PORT, Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, null, - Protocol.DEFAULT_DATABASE, null, false, null, null, null), new GenericObjectPoolConfig()); - } - } - - public JedisPool(final String host, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - URI uri = URI.create(host); - if (JedisURIHelper.isValid(uri)) { - String h = uri.getHost(); - int port = uri.getPort(); - String password = JedisURIHelper.getPassword(uri); - int database = JedisURIHelper.getDBIndex(uri); - boolean ssl = uri.getScheme().equals(REDISS); - this.internalPool = new GenericObjectPool(new JedisFactory(h, port, - Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, password, database, null, ssl, - sslSocketFactory, sslParameters, hostnameVerifier), - new GenericObjectPoolConfig()); - } else { - this.internalPool = new GenericObjectPool(new JedisFactory(host, - Protocol.DEFAULT_PORT, Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_TIMEOUT, null, - Protocol.DEFAULT_DATABASE, null, false, null, null, null), new GenericObjectPoolConfig()); - } - } - - public JedisPool(final URI uri) { - this(new GenericObjectPoolConfig(), uri, Protocol.DEFAULT_TIMEOUT); - } - - public JedisPool(final URI uri, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - this(new GenericObjectPoolConfig(), uri, Protocol.DEFAULT_TIMEOUT, sslSocketFactory, - sslParameters, hostnameVerifier); - } - - public JedisPool(final URI uri, final int timeout) { - this(new GenericObjectPoolConfig(), uri, timeout); - } - - public JedisPool(final URI uri, final int timeout, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - this(new GenericObjectPoolConfig(), uri, timeout, sslSocketFactory, sslParameters, - hostnameVerifier); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port, - int timeout, final String password) { - this(poolConfig, host, port, timeout, password, Protocol.DEFAULT_DATABASE, null); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port, - int timeout, final String password, final boolean ssl) { - this(poolConfig, host, port, timeout, password, Protocol.DEFAULT_DATABASE, null, ssl); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port, - int timeout, final String password, final boolean ssl, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - this(poolConfig, host, port, timeout, password, Protocol.DEFAULT_DATABASE, null, ssl, - sslSocketFactory, sslParameters, hostnameVerifier); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, final int port) { - this(poolConfig, host, port, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, final int port, - final boolean ssl) { - this(poolConfig, host, port, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null, - ssl); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, final int port, - final boolean ssl, final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - this(poolConfig, host, port, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null, - ssl, sslSocketFactory, sslParameters, hostnameVerifier); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, final int port, - final int timeout) { - this(poolConfig, host, port, timeout, null, Protocol.DEFAULT_DATABASE, null); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, final int port, - final int timeout, final boolean ssl) { - this(poolConfig, host, port, timeout, null, Protocol.DEFAULT_DATABASE, null, ssl); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, final int port, - final int timeout, final boolean ssl, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - this(poolConfig, host, port, timeout, null, Protocol.DEFAULT_DATABASE, null, ssl, - sslSocketFactory, sslParameters, hostnameVerifier); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port, - int timeout, final String password, final int database) { - this(poolConfig, host, port, timeout, password, database, null); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port, - int timeout, final String password, final int database, final boolean ssl) { - this(poolConfig, host, port, timeout, password, database, null, ssl); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port, - int timeout, final String password, final int database, final boolean ssl, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - this(poolConfig, host, port, timeout, password, database, null, ssl, sslSocketFactory, - sslParameters, hostnameVerifier); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port, - int timeout, final String password, final int database, final String clientName) { - this(poolConfig, host, port, timeout, timeout, password, database, clientName, false, - null, null, null); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port, - int timeout, final String password, final int database, final String clientName, - final boolean ssl) { - this(poolConfig, host, port, timeout, timeout, password, database, clientName, ssl, - null, null, null); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port, - int timeout, final String password, final int database, final String clientName, - final boolean ssl, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - this(poolConfig, host, port, timeout, timeout, password, database, clientName, ssl, - sslSocketFactory, sslParameters, hostnameVerifier); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port, - final int connectionTimeout, final int soTimeout, final String password, final int database, - final String clientName, final boolean ssl, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - super(poolConfig, new JedisFactory(host, port, connectionTimeout, soTimeout, password, - database, clientName, ssl, sslSocketFactory, sslParameters, hostnameVerifier)); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final URI uri) { - this(poolConfig, uri, Protocol.DEFAULT_TIMEOUT); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final URI uri, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - this(poolConfig, uri, Protocol.DEFAULT_TIMEOUT, sslSocketFactory, sslParameters, - hostnameVerifier); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final URI uri, final int timeout) { - this(poolConfig, uri, timeout, timeout); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final URI uri, final int timeout, - final SSLSocketFactory sslSocketFactory, final SSLParameters sslParameters, - final HostnameVerifier hostnameVerifier) { - this(poolConfig, uri, timeout, timeout, sslSocketFactory, sslParameters, hostnameVerifier); - } - - public JedisPool(final GenericObjectPoolConfig poolConfig, final URI uri, - final int connectionTimeout, final int soTimeout) { - super(poolConfig, new JedisFactory(uri, connectionTimeout, soTimeout, null, false, - null, null, null)); + public JedisPool(final GenericObjectPoolConfig poolConfig, final ClientOptions options){ + super(poolConfig, new JedisFactory(options)); } - public JedisPool(final GenericObjectPoolConfig poolConfig, final URI uri, - final int connectionTimeout, final int soTimeout, final SSLSocketFactory sslSocketFactory, - final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) { - super(poolConfig, new JedisFactory(uri, connectionTimeout, soTimeout, null, - (uri.getScheme() !=null && uri.getScheme().equals(REDISS)), sslSocketFactory, - sslParameters, hostnameVerifier)); + public JedisPool(final ClientOptions options){ + this(new GenericObjectPoolConfig(), options); } @Override diff --git a/src/main/java/redis/clients/jedis/JedisSentinelPool.java b/src/main/java/redis/clients/jedis/JedisSentinelPool.java index 3a35ecf0c8..e220f7213a 100644 --- a/src/main/java/redis/clients/jedis/JedisSentinelPool.java +++ b/src/main/java/redis/clients/jedis/JedisSentinelPool.java @@ -111,11 +111,9 @@ private void initPool(HostAndPort master) { if (!master.equals(currentHostMaster)) { currentHostMaster = master; if (factory == null) { - factory = new JedisFactory(master.getHost(), master.getPort(), connectionTimeout, - soTimeout, password, database, clientName, false, null, null, null); + factory = new JedisFactory(ClientOptions.builder().withHostAndPort(master).withConnectionTimeout(connectionTimeout).withSoTimeout(soTimeout).withPassword(password).withDatabase(database).withClientName(clientName).build()); initPool(poolConfig, factory); } else { - factory.setHostAndPort(currentHostMaster); // although we clear the pool, we still have to check the // returned object // in getResource, this call only clears idle instances, not @@ -141,7 +139,7 @@ private HostAndPort initSentinels(Set sentinels, final String masterName Jedis jedis = null; try { - jedis = new Jedis(hap.getHost(), hap.getPort()); + jedis = new Jedis(ClientOptions.builder().withHostAndPort(hap).build()); List masterAddr = jedis.sentinelGetMasterAddrByName(masterName); @@ -210,8 +208,8 @@ public Jedis getResource() { // get a reference because it can change concurrently final HostAndPort master = currentHostMaster; - final HostAndPort connection = new HostAndPort(jedis.getClient().getHost(), jedis.getClient() - .getPort()); + final HostAndPort connection = new HostAndPort(jedis.getClient().getClientOptions().getHost(), jedis.getClient() + .getClientOptions().getPort()); if (master.equals(connection)) { // connected to the correct master @@ -267,7 +265,7 @@ public void run() { while (running.get()) { - j = new Jedis(host, port); + j = new Jedis(ClientOptions.builder().withHost(host).withPort(port).build()); try { // double check that it is not being shutdown diff --git a/src/main/java/redis/clients/jedis/JedisShardInfo.java b/src/main/java/redis/clients/jedis/JedisShardInfo.java index 3d75cab21e..073c4db9b7 100644 --- a/src/main/java/redis/clients/jedis/JedisShardInfo.java +++ b/src/main/java/redis/clients/jedis/JedisShardInfo.java @@ -294,5 +294,20 @@ public HostnameVerifier getHostnameVerifier() { public Jedis createResource() { return new Jedis(this); } + + public ClientOptions toClientOptions() { + + return ClientOptions.builder(). + withHost(host). + withPort(port). + withClientName(name). + withDatabase(db). + withPassword(password). + withConnectionTimeout(connectionTimeout). + withSoTimeout(soTimeout). + withSsl(ssl). + withSslOptions(SslOptions.builder().withSslParameters(sslParameters).withSslSocketFactory(sslSocketFactory).withHostnameVerifier(hostnameVerifier).build()). + build(); + } } diff --git a/src/main/java/redis/clients/jedis/SslOptions.java b/src/main/java/redis/clients/jedis/SslOptions.java new file mode 100644 index 0000000000..def445e66b --- /dev/null +++ b/src/main/java/redis/clients/jedis/SslOptions.java @@ -0,0 +1,68 @@ +package redis.clients.jedis; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLParameters; +import javax.net.ssl.SSLSocketFactory; + +/** + * Options to configure SSL options for the connections kept to Redis servers. + */ +public class SslOptions { + private final SSLSocketFactory sslSocketFactory; + private final SSLParameters sslParameters; + private final HostnameVerifier hostnameVerifier; + + public SslOptions(SSLSocketFactory sslSocketFactory, SSLParameters sslParameters, HostnameVerifier hostnameVerifier) { + this.sslSocketFactory = sslSocketFactory; + this.sslParameters = sslParameters; + this.hostnameVerifier = hostnameVerifier; + } + + public SSLSocketFactory getSslSocketFactory() { + return sslSocketFactory; + } + + public SSLParameters getSslParameters() { + return sslParameters; + } + + public HostnameVerifier getHostnameVerifier() { + return hostnameVerifier; + } + + public static SslOptionsBuilder builder(){ + return new SslOptionsBuilder(); + } + + public static SslOptions create(){ + return builder().build(); + } + + public static class SslOptionsBuilder { + private SSLSocketFactory sslSocketFactory; + private SSLParameters sslParameters; + private HostnameVerifier hostnameVerifier; + + private SslOptionsBuilder() { + } + + public SslOptionsBuilder withSslSocketFactory(SSLSocketFactory sslSocketFactory) { + this.sslSocketFactory = sslSocketFactory; + return this; + } + + public SslOptionsBuilder withSslParameters(SSLParameters sslParameters) { + this.sslParameters = sslParameters; + return this; + } + + public SslOptionsBuilder withHostnameVerifier(HostnameVerifier hostnameVerifier) { + this.hostnameVerifier = hostnameVerifier; + return this; + } + + public SslOptions build() { + return new SslOptions(sslSocketFactory, sslParameters, hostnameVerifier); + } + } +} diff --git a/src/test/java/redis/clients/jedis/tests/ConnectionCloseTest.java b/src/test/java/redis/clients/jedis/tests/ConnectionCloseTest.java deleted file mode 100644 index 6c6342f028..0000000000 --- a/src/test/java/redis/clients/jedis/tests/ConnectionCloseTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package redis.clients.jedis.tests; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import redis.clients.jedis.Connection; -import redis.clients.jedis.exceptions.JedisConnectionException; - -public class ConnectionCloseTest { - - private Connection client; - - @Before - public void setUp() throws Exception { - client = new Connection(); - } - - @After - public void tearDown() throws Exception { - client.close(); - } - - @Test(expected = JedisConnectionException.class) - public void checkUnkownHost() { - client.setHost("someunknownhost"); - client.connect(); - } - - @Test(expected = JedisConnectionException.class) - public void checkWrongPort() { - client.setHost("localhost"); - client.setPort(55665); - client.connect(); - } - - @Test - public void connectIfNotConnectedWhenSettingTimeoutInfinite() { - client.setHost("localhost"); - client.setPort(6379); - client.setTimeoutInfinite(); - } -} diff --git a/src/test/java/redis/clients/jedis/tests/ConnectionTest.java b/src/test/java/redis/clients/jedis/tests/ConnectionTest.java index 5ad36c8a3b..e8ea184846 100644 --- a/src/test/java/redis/clients/jedis/tests/ConnectionTest.java +++ b/src/test/java/redis/clients/jedis/tests/ConnectionTest.java @@ -1,63 +1,55 @@ package redis.clients.jedis.tests; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - -import org.junit.After; -import org.junit.Before; import org.junit.Test; - +import redis.clients.jedis.ClientOptions; import redis.clients.jedis.Connection; import redis.clients.jedis.Protocol.Command; import redis.clients.jedis.commands.ProtocolCommand; import redis.clients.jedis.exceptions.JedisConnectionException; -public class ConnectionTest { - private Connection client; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; - @Before - public void setUp() throws Exception { - client = new Connection(); - } +public class ConnectionTest { - @After - public void tearDown() throws Exception { - client.disconnect(); - } + public static final String LOCAL_HOST = "localhost"; + public static final String UNKNOWN_HOST = "someunknownhost"; + public static final int PORT = 6379; + public static final int WRONG_PORT = 55665; @Test(expected = JedisConnectionException.class) public void checkUnkownHost() { - client.setHost("someunknownhost"); - client.connect(); + try(Connection connection = new Connection(ClientOptions.builder().withHost(UNKNOWN_HOST).build())){ + connection.connect(); + } } @Test(expected = JedisConnectionException.class) public void checkWrongPort() { - client.setHost("localhost"); - client.setPort(55665); - client.connect(); + try(Connection connection = new Connection(ClientOptions.builder().withHost(LOCAL_HOST).withPort(WRONG_PORT).build())){ + connection.connect(); + } } @Test public void connectIfNotConnectedWhenSettingTimeoutInfinite() { - client.setHost("localhost"); - client.setPort(6379); - client.setTimeoutInfinite(); + try(Connection connection = new Connection(ClientOptions.builder().withHost(LOCAL_HOST).withPort(PORT).build())){ + connection.setTimeoutInfinite(); + } } @Test public void checkCloseable() { - client.setHost("localhost"); - client.setPort(6379); - client.connect(); - client.close(); + try(Connection connection = new Connection(ClientOptions.builder().withHost(LOCAL_HOST).withPort(PORT).build())){ + connection.connect(); + } } @Test public void getErrorAfterConnectionReset() throws Exception { class TestConnection extends Connection { public TestConnection() { - super("localhost", 6379); + super(ClientOptions.builder().withHost(LOCAL_HOST).withPort(PORT).build()); } @Override @@ -66,9 +58,7 @@ public Connection sendCommand(ProtocolCommand cmd, byte[]... args) { } } - TestConnection conn = new TestConnection(); - - try { + try (TestConnection conn = new TestConnection();){ conn.sendCommand(Command.HMSET, new byte[1024 * 1024 + 1][0]); fail("Should throw exception"); } catch (JedisConnectionException jce) { diff --git a/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java b/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java index 3e1284eb7f..66df85386a 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java @@ -31,13 +31,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import redis.clients.jedis.HostAndPort; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisCluster; +import redis.clients.jedis.*; import redis.clients.jedis.JedisCluster.Reset; -import redis.clients.jedis.JedisClusterInfoCache; -import redis.clients.jedis.JedisPool; -import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.exceptions.*; import redis.clients.jedis.tests.utils.ClientKillerUtil; import redis.clients.jedis.tests.utils.JedisClusterTestUtil; @@ -64,23 +59,23 @@ public class JedisClusterTest { @Before public void setUp() throws InterruptedException { - node1 = new Jedis(nodeInfo1.getHost(), nodeInfo1.getPort()); + node1 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo1).build()); node1.auth("cluster"); node1.flushAll(); - node2 = new Jedis(nodeInfo2.getHost(), nodeInfo2.getPort()); + node2 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo2).build()); node2.auth("cluster"); node2.flushAll(); - node3 = new Jedis(nodeInfo3.getHost(), nodeInfo3.getPort()); + node3 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo3).build()); node3.auth("cluster"); node3.flushAll(); - node4 = new Jedis(nodeInfo4.getHost(), nodeInfo4.getPort()); + node4 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo4).build()); node4.auth("cluster"); node4.flushAll(); - nodeSlave2 = new Jedis(nodeInfoSlave2.getHost(), nodeInfoSlave2.getPort()); + nodeSlave2 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfoSlave2).build()); nodeSlave2.auth("cluster"); nodeSlave2.flushAll(); // ---- configure cluster @@ -537,8 +532,8 @@ public void testJedisClusterTimeout() { for (JedisPool pool : jc.getClusterNodes().values()) { Jedis jedis = pool.getResource(); - assertEquals(jedis.getClient().getConnectionTimeout(), 4000); - assertEquals(jedis.getClient().getSoTimeout(), 4000); + assertEquals(jedis.getClient().getClientOptions().getConnectionTimeout(), 4000); + assertEquals(jedis.getClient().getClientOptions().getSoTimeout(), 4000); jedis.close(); } @@ -547,7 +542,7 @@ public void testJedisClusterTimeout() { @Test public void testJedisClusterRunsWithMultithreaded() throws InterruptedException, ExecutionException, IOException { - Set jedisClusterNode = new HashSet(); + Set jedisClusterNode = new HashSet<>(); jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); final JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_REDIRECTIONS, "cluster", DEFAULT_CONFIG); diff --git a/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java b/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java index a18de306f8..eede7e7955 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisPoolTest.java @@ -15,23 +15,21 @@ import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.junit.Test; -import redis.clients.jedis.HostAndPort; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisPool; -import redis.clients.jedis.JedisPoolConfig; -import redis.clients.jedis.Transaction; +import redis.clients.jedis.*; import redis.clients.jedis.exceptions.InvalidURIException; -import redis.clients.jedis.exceptions.JedisException; import redis.clients.jedis.exceptions.JedisExhaustedPoolException; public class JedisPoolTest { + public static final String PASSWORD = "foobared"; + public static final int TIMEOUT = 2000; private static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); @Test public void checkConnections() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort(), 2000); + ClientOptions clientOptions = ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).build(); + JedisPool pool = new JedisPool(clientOptions); Jedis jedis = pool.getResource(); - jedis.auth("foobared"); + jedis.auth(PASSWORD); jedis.set("foo", "bar"); assertEquals("bar", jedis.get("foo")); jedis.close(); @@ -41,9 +39,10 @@ public void checkConnections() { @Test public void checkCloseableConnections() throws Exception { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort(), 2000); + ClientOptions clientOptions = ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).build(); + JedisPool pool = new JedisPool(clientOptions); Jedis jedis = pool.getResource(); - jedis.auth("foobared"); + jedis.auth(PASSWORD); jedis.set("foo", "bar"); assertEquals("bar", jedis.get("foo")); jedis.close(); @@ -53,9 +52,9 @@ public void checkCloseableConnections() throws Exception { @Test public void checkConnectionWithDefaultPort() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort()); + JedisPool pool = new JedisPool(ClientOptions.builder().withHostAndPort(hnp).build()); Jedis jedis = pool.getResource(); - jedis.auth("foobared"); + jedis.auth(PASSWORD); jedis.set("foo", "bar"); assertEquals("bar", jedis.get("foo")); jedis.close(); @@ -66,14 +65,14 @@ public void checkConnectionWithDefaultPort() { @Test public void checkJedisIsReusedWhenReturned() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort()); + JedisPool pool = new JedisPool(ClientOptions.builder().withHostAndPort(hnp).build()); Jedis jedis = pool.getResource(); - jedis.auth("foobared"); + jedis.auth(PASSWORD); jedis.set("foo", "0"); jedis.close(); jedis = pool.getResource(); - jedis.auth("foobared"); + jedis.auth(PASSWORD); jedis.incr("foo"); jedis.close(); pool.destroy(); @@ -82,14 +81,14 @@ public void checkJedisIsReusedWhenReturned() { @Test public void checkPoolRepairedWhenJedisIsBroken() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort()); + JedisPool pool = new JedisPool(ClientOptions.builder().withHostAndPort(hnp).build()); Jedis jedis = pool.getResource(); - jedis.auth("foobared"); + jedis.auth(PASSWORD); jedis.quit(); jedis.close(); jedis = pool.getResource(); - jedis.auth("foobared"); + jedis.auth(PASSWORD); jedis.incr("foo"); jedis.close(); pool.destroy(); @@ -101,13 +100,13 @@ public void checkPoolOverflow() { GenericObjectPoolConfig config = new GenericObjectPoolConfig(); config.setMaxTotal(1); config.setBlockWhenExhausted(false); - JedisPool pool = new JedisPool(config, hnp.getHost(), hnp.getPort()); + JedisPool pool = new JedisPool(config, ClientOptions.builder().withHostAndPort(hnp).build()); Jedis jedis = pool.getResource(); - jedis.auth("foobared"); + jedis.auth(PASSWORD); jedis.set("foo", "0"); Jedis newJedis = pool.getResource(); - newJedis.auth("foobared"); + newJedis.auth(PASSWORD); newJedis.incr("foo"); } @@ -115,7 +114,7 @@ public void checkPoolOverflow() { public void securePool() { JedisPoolConfig config = new JedisPoolConfig(); config.setTestOnBorrow(true); - JedisPool pool = new JedisPool(config, hnp.getHost(), hnp.getPort(), 2000, "foobared"); + JedisPool pool = new JedisPool(config, ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).withPassword(PASSWORD).build()); Jedis jedis = pool.getResource(); jedis.set("foo", "bar"); jedis.close(); @@ -125,8 +124,7 @@ public void securePool() { @Test public void nonDefaultDatabase() { - JedisPool pool0 = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort(), 2000, - "foobared"); + JedisPool pool0 = new JedisPool(ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).withPassword(PASSWORD).build()); Jedis jedis0 = pool0.getResource(); jedis0.set("foo", "bar"); assertEquals("bar", jedis0.get("foo")); @@ -134,8 +132,7 @@ public void nonDefaultDatabase() { pool0.destroy(); assertTrue(pool0.isClosed()); - JedisPool pool1 = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort(), 2000, - "foobared", 1); + JedisPool pool1 = new JedisPool(ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).withPassword(PASSWORD).withDatabase(1).build()); Jedis jedis1 = pool1.getResource(); assertNull(jedis1.get("foo")); jedis1.close(); @@ -144,24 +141,12 @@ public void nonDefaultDatabase() { } @Test - public void startWithUrlString() { - Jedis j = new Jedis("localhost", 6380); - j.auth("foobared"); + public void startWithUrl() { + Jedis j = new Jedis(ClientOptions.builder().withHost("localhost").withPort(6380).build()); + j.auth(PASSWORD); j.select(2); j.set("foo", "bar"); - JedisPool pool = new JedisPool("redis://:foobared@localhost:6380/2"); - Jedis jedis = pool.getResource(); - assertEquals("PONG", jedis.ping()); - assertEquals("bar", jedis.get("foo")); - } - - @Test - public void startWithUrl() throws URISyntaxException { - Jedis j = new Jedis("localhost", 6380); - j.auth("foobared"); - j.select(2); - j.set("foo", "bar"); - JedisPool pool = new JedisPool(new URI("redis://:foobared@localhost:6380/2")); + JedisPool pool = new JedisPool(ClientOptions.builder().withURI(URI.create("redis://:foobared@localhost:6380/2")).build()); Jedis jedis = pool.getResource(); assertEquals("PONG", jedis.ping()); assertEquals("bar", jedis.get("foo")); @@ -169,19 +154,17 @@ public void startWithUrl() throws URISyntaxException { @Test(expected = InvalidURIException.class) public void shouldThrowInvalidURIExceptionForInvalidURI() throws URISyntaxException { - JedisPool pool = new JedisPool(new URI("localhost:6380")); + ClientOptions.builder().withURI(URI.create("localhost:6380")).build(); } @Test public void allowUrlWithNoDBAndNoPassword() throws URISyntaxException { - new JedisPool("redis://localhost:6380"); - new JedisPool(new URI("redis://localhost:6380")); + new JedisPool(ClientOptions.builder().withURI(URI.create("redis://localhost:6380")).build()); } @Test public void selectDatabaseOnActivation() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort(), 2000, - "foobared"); + JedisPool pool = new JedisPool(ClientOptions.builder().withHostAndPort(hnp).withTimeout(200).withPassword(PASSWORD).build()); Jedis jedis0 = pool.getResource(); assertEquals(0, jedis0.getDB()); @@ -202,12 +185,14 @@ public void selectDatabaseOnActivation() { @Test public void customClientName() { - JedisPool pool0 = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort(), 2000, - "foobared", 0, "my_shiny_client_name"); + String clientName = "my_shiny_client_name"; + + ClientOptions options = ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).withPassword(PASSWORD).withDatabase(0).withClientName(clientName).build(); + JedisPool pool0 = new JedisPool(options); Jedis jedis = pool0.getResource(); - assertEquals("my_shiny_client_name", jedis.clientGetname()); + assertEquals(clientName, jedis.clientGetname()); jedis.close(); pool0.destroy(); @@ -254,7 +239,7 @@ public void passivateObject(PooledObject p) throws Exception { GenericObjectPoolConfig config = new GenericObjectPoolConfig(); config.setMaxTotal(1); - JedisPool pool = new JedisPool(config, hnp.getHost(), hnp.getPort(), 2000, "foobared"); + JedisPool pool = new JedisPool(config, ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).withPassword(PASSWORD).build()); pool.initPool(config, new CrashingJedisPooledObjectFactory()); Jedis crashingJedis = pool.getResource(); @@ -271,7 +256,7 @@ public void returnResourceShouldResetState() { GenericObjectPoolConfig config = new GenericObjectPoolConfig(); config.setMaxTotal(1); config.setBlockWhenExhausted(false); - JedisPool pool = new JedisPool(config, hnp.getHost(), hnp.getPort(), 2000, "foobared"); + JedisPool pool = new JedisPool(config, ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).withPassword(PASSWORD).build()); Jedis jedis = pool.getResource(); try { @@ -299,7 +284,7 @@ public void checkResourceIsCloseable() { GenericObjectPoolConfig config = new GenericObjectPoolConfig(); config.setMaxTotal(1); config.setBlockWhenExhausted(false); - JedisPool pool = new JedisPool(config, hnp.getHost(), hnp.getPort(), 2000, "foobared"); + JedisPool pool = new JedisPool(config, ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).withPassword(PASSWORD).build()); Jedis jedis = pool.getResource(); try { @@ -318,8 +303,7 @@ public void checkResourceIsCloseable() { @Test public void getNumActiveIsNegativeWhenPoolIsClosed() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort(), 2000, - "foobared", 0, "my_shiny_client_name"); + JedisPool pool = new JedisPool(ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).withPassword(PASSWORD).build()); pool.destroy(); assertTrue(pool.getNumActive() < 0); @@ -327,16 +311,14 @@ public void getNumActiveIsNegativeWhenPoolIsClosed() { @Test public void getNumActiveReturnsTheCorrectNumber() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort(), 2000); + JedisPool pool = new JedisPool(ClientOptions.builder().withHostAndPort(hnp).withPassword(PASSWORD).withTimeout(TIMEOUT).build()); Jedis jedis = pool.getResource(); - jedis.auth("foobared"); jedis.set("foo", "bar"); assertEquals("bar", jedis.get("foo")); assertEquals(1, pool.getNumActive()); Jedis jedis2 = pool.getResource(); - jedis.auth("foobared"); jedis.set("foo", "bar"); assertEquals(2, pool.getNumActive()); @@ -353,7 +335,7 @@ public void getNumActiveReturnsTheCorrectNumber() { @Test public void testAddObject() { - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort(), 2000); + JedisPool pool = new JedisPool(ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).build()); pool.addObjects(1); assertEquals(pool.getNumIdle(), 1); pool.destroy(); @@ -364,9 +346,8 @@ public void testAddObject() { public void testCloseConnectionOnMakeObject() { JedisPoolConfig config = new JedisPoolConfig(); config.setTestOnBorrow(true); - JedisPool pool = new JedisPool(new JedisPoolConfig(), hnp.getHost(), hnp.getPort(), 2000, - "wrong pass"); - Jedis jedis = new Jedis("redis://:foobared@localhost:6379/"); + JedisPool pool = new JedisPool(ClientOptions.builder().withHostAndPort(hnp).withTimeout(TIMEOUT).withPassword("wrong pass").build()); + Jedis jedis = new Jedis(ClientOptions.builder().withURI(URI.create("redis://:foobared@localhost:6379/")).build()); int currentClientCount = getClientCount(jedis.clientList()); try { pool.getResource(); diff --git a/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java b/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java index 20abf2fc71..856c452593 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java @@ -10,10 +10,7 @@ import org.junit.Before; import org.junit.Test; -import redis.clients.jedis.HostAndPort; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisSentinelPool; -import redis.clients.jedis.Transaction; +import redis.clients.jedis.*; import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisException; import redis.clients.jedis.tests.utils.JedisSentinelTestUtil; @@ -37,8 +34,8 @@ public void setUp() throws Exception { sentinels.add(sentinel1.toString()); sentinels.add(sentinel2.toString()); - sentinelJedis1 = new Jedis(sentinel1.getHost(), sentinel1.getPort()); - sentinelJedis2 = new Jedis(sentinel2.getHost(), sentinel2.getPort()); + sentinelJedis1 = new Jedis(ClientOptions.builder().withHostAndPort(sentinel1).build()); + sentinelJedis2 = new Jedis(ClientOptions.builder().withHostAndPort(sentinel2).build()); } @Test(expected = JedisConnectionException.class) diff --git a/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java b/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java index 0e5ec18766..7e963784e1 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisSentinelTest.java @@ -13,6 +13,7 @@ import org.junit.Before; import org.junit.Test; +import redis.clients.jedis.ClientOptions; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.exceptions.JedisDataException; @@ -49,7 +50,7 @@ public void clear() throws InterruptedException { @Test public void sentinel() { - Jedis j = new Jedis(sentinel.getHost(), sentinel.getPort()); + Jedis j = new Jedis(ClientOptions.builder().withHostAndPort(sentinel).build()); try { List> masters = j.sentinelMasters(); @@ -79,8 +80,8 @@ public void sentinel() { @Test public void sentinelFailover() throws InterruptedException { - Jedis j = new Jedis(sentinelForFailover.getHost(), sentinelForFailover.getPort()); - Jedis j2 = new Jedis(sentinelForFailover.getHost(), sentinelForFailover.getPort()); + Jedis j = new Jedis(ClientOptions.builder().withHostAndPort(sentinelForFailover).build()); + Jedis j2 = new Jedis(ClientOptions.builder().withHostAndPort(sentinelForFailover).build()); try { List masterHostAndPort = j.sentinelGetMasterAddrByName(FAILOVER_MASTER_NAME); @@ -102,7 +103,7 @@ public void sentinelFailover() throws InterruptedException { @Test public void sentinelMonitor() { - Jedis j = new Jedis(sentinel.getHost(), sentinel.getPort()); + Jedis j = new Jedis(ClientOptions.builder().withHostAndPort(sentinel).build()); try { // monitor new master @@ -123,7 +124,7 @@ public void sentinelMonitor() { @Test public void sentinelRemove() { - Jedis j = new Jedis(sentinel.getHost(), sentinel.getPort()); + Jedis j = new Jedis(ClientOptions.builder().withHostAndPort(sentinel).build()); try { ensureMonitored(sentinel, REMOVE_MASTER_NAME, MASTER_IP, master.getPort(), 1); @@ -146,7 +147,7 @@ public void sentinelRemove() { @Test public void sentinelSet() { - Jedis j = new Jedis(sentinel.getHost(), sentinel.getPort()); + Jedis j = new Jedis(ClientOptions.builder().withHostAndPort(sentinel).build()); try { Map parameterMap = new HashMap(); @@ -173,7 +174,7 @@ public void sentinelSet() { private void ensureMonitored(HostAndPort sentinel, String masterName, String ip, int port, int quorum) { - Jedis j = new Jedis(sentinel.getHost(), sentinel.getPort()); + Jedis j = new Jedis(ClientOptions.builder().withHostAndPort(sentinel).build()); try { j.sentinelMonitor(masterName, ip, port, quorum); } catch (JedisDataException e) { @@ -183,7 +184,7 @@ private void ensureMonitored(HostAndPort sentinel, String masterName, String ip, } private void ensureRemoved(String masterName) { - Jedis j = new Jedis(sentinel.getHost(), sentinel.getPort()); + Jedis j = new Jedis(ClientOptions.builder().withHostAndPort(sentinel).build()); try { j.sentinelRemove(masterName); } catch (JedisDataException e) { diff --git a/src/test/java/redis/clients/jedis/tests/JedisTest.java b/src/test/java/redis/clients/jedis/tests/JedisTest.java index a1481ea241..40ffac4b2a 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisTest.java @@ -1,22 +1,7 @@ package redis.clients.jedis.tests; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.fail; - -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.junit.Test; - -import redis.clients.jedis.BinaryJedis; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisShardInfo; -import redis.clients.jedis.Protocol; +import redis.clients.jedis.*; import redis.clients.jedis.exceptions.InvalidURIException; import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisDataException; @@ -24,11 +9,21 @@ import redis.clients.jedis.tests.commands.JedisCommandTestBase; import redis.clients.util.SafeEncoder; +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.*; + public class JedisTest extends JedisCommandTestBase { + + public static final String PASSWORD = "foobared"; + public static final String LOCALHOST = "localhost"; + @Test public void useWithoutConnecting() { - Jedis jedis = new Jedis("localhost"); - jedis.auth("foobared"); + Jedis jedis = new Jedis(ClientOptions.builder().withPassword(PASSWORD).build()); jedis.dbSize(); } @@ -56,7 +51,8 @@ public void connectWithShardInfo() { @Test(expected = JedisConnectionException.class) public void timeoutConnection() throws Exception { - jedis = new Jedis("localhost", 6379, 15000); + ClientOptions clientOptions = ClientOptions.builder().withHost("localhost").withPort(6379).withTimeout(15000).build(); + jedis = new Jedis(clientOptions); jedis.auth("foobared"); jedis.configSet("timeout", "1"); Thread.sleep(2000); @@ -65,7 +61,8 @@ public void timeoutConnection() throws Exception { @Test(expected = JedisConnectionException.class) public void timeoutConnectionWithURI() throws Exception { - jedis = new Jedis(new URI("redis://:foobared@localhost:6380/2"), 15000); + ClientOptions clientOptions = ClientOptions.builder().withURI("redis://:foobared@localhost:6380/2").withTimeout(15000).build(); + jedis = new Jedis(clientOptions); jedis.configSet("timeout", "1"); Thread.sleep(2000); jedis.hmget("foobar", "foo"); @@ -78,7 +75,7 @@ public void failWhenSendingNullValues() { @Test(expected = InvalidURIException.class) public void shouldThrowInvalidURIExceptionForInvalidURI() throws URISyntaxException { - Jedis j = new Jedis(new URI("localhost:6380")); + Jedis j = new Jedis(ClientOptions.builder().withURI("localhost:6380").build()); j.ping(); } @@ -93,22 +90,11 @@ public void shouldReconnectToSameDB() throws IOException { @Test public void startWithUrlString() { - Jedis j = new Jedis("localhost", 6380); - j.auth("foobared"); - j.select(2); - j.set("foo", "bar"); - Jedis jedis = new Jedis("redis://:foobared@localhost:6380/2"); - assertEquals("PONG", jedis.ping()); - assertEquals("bar", jedis.get("foo")); - } - - @Test - public void startWithUrl() throws URISyntaxException { - Jedis j = new Jedis("localhost", 6380); + Jedis j = new Jedis(ClientOptions.builder().withPort(6379).build()); j.auth("foobared"); j.select(2); j.set("foo", "bar"); - Jedis jedis = new Jedis(new URI("redis://:foobared@localhost:6380/2")); + Jedis jedis = new Jedis(ClientOptions.builder().withURI("redis://:foobared@localhost:6379/2").build()); assertEquals("PONG", jedis.ping()); assertEquals("bar", jedis.get("foo")); } @@ -128,23 +114,23 @@ public void shouldNotUpdateDbIndexIfSelectFails() throws URISyntaxException { @Test public void allowUrlWithNoDBAndNoPassword() { - Jedis jedis = new Jedis("redis://localhost:6380"); + Jedis jedis = new Jedis(ClientOptions.builder().withURI("redis://localhost:6380").build()); jedis.auth("foobared"); - assertEquals(jedis.getClient().getHost(), "localhost"); - assertEquals(jedis.getClient().getPort(), 6380); + assertEquals(jedis.getClient().getClientOptions().getHost(), "localhost"); + assertEquals(jedis.getClient().getClientOptions().getPort(), 6380); assertEquals(jedis.getDB(), 0); - jedis = new Jedis("redis://localhost:6380/"); + jedis = new Jedis(ClientOptions.builder().withURI("redis://localhost:6380/").build()); jedis.auth("foobared"); - assertEquals(jedis.getClient().getHost(), "localhost"); - assertEquals(jedis.getClient().getPort(), 6380); + assertEquals(jedis.getClient().getClientOptions().getHost(), "localhost"); + assertEquals(jedis.getClient().getClientOptions().getPort(), 6380); assertEquals(jedis.getDB(), 0); } @Test public void checkCloseable() { jedis.close(); - BinaryJedis bj = new BinaryJedis("localhost"); + BinaryJedis bj = new BinaryJedis(ClientOptions.builder().build()); bj.connect(); bj.close(); } diff --git a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java index 1354a1266a..59f0b7230f 100644 --- a/src/test/java/redis/clients/jedis/tests/PipeliningTest.java +++ b/src/test/java/redis/clients/jedis/tests/PipeliningTest.java @@ -26,11 +26,7 @@ import org.junit.Before; import org.junit.Test; -import redis.clients.jedis.HostAndPort; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.Pipeline; -import redis.clients.jedis.Response; -import redis.clients.jedis.Tuple; +import redis.clients.jedis.*; import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.util.SafeEncoder; @@ -41,7 +37,7 @@ public class PipeliningTest { @Before public void setUp() throws Exception { - jedis = new Jedis(hnp.getHost(), hnp.getPort(), 2000); + jedis = new Jedis(ClientOptions.builder().withHostAndPort(hnp).withTimeout(2000).build()); jedis.connect(); jedis.auth("foobared"); jedis.flushAll(); @@ -583,14 +579,14 @@ public void testPipelinedTransactionResponse() { @Test public void testSyncWithNoCommandQueued() { // we need to test with fresh instance of Jedis - Jedis jedis2 = new Jedis(hnp.getHost(), hnp.getPort(), 500); + Jedis jedis2 = new Jedis(ClientOptions.builder().withHostAndPort(hnp).withTimeout(500).build()); Pipeline pipeline = jedis2.pipelined(); pipeline.sync(); jedis2.close(); - jedis2 = new Jedis(hnp.getHost(), hnp.getPort(), 500); + jedis2 = new Jedis(ClientOptions.builder().withHostAndPort(hnp).withTimeout(500).build()); pipeline = jedis2.pipelined(); List resp = pipeline.syncAndReturnAll(); @@ -602,7 +598,7 @@ public void testSyncWithNoCommandQueued() { @Test public void testCloseable() throws IOException { // we need to test with fresh instance of Jedis - Jedis jedis2 = new Jedis(hnp.getHost(), hnp.getPort(), 500); + Jedis jedis2 = new Jedis(ClientOptions.builder().withHostAndPort(hnp).withTimeout(500).build()); jedis2.auth("foobared"); Pipeline pipeline = jedis2.pipelined(); @@ -619,7 +615,7 @@ public void testCloseable() throws IOException { @Test public void testCloseableWithMulti() throws IOException { // we need to test with fresh instance of Jedis - Jedis jedis2 = new Jedis(hnp.getHost(), hnp.getPort(), 500); + Jedis jedis2 = new Jedis(ClientOptions.builder().withHostAndPort(hnp).withTimeout(500).build()); jedis2.auth("foobared"); Pipeline pipeline = jedis2.pipelined(); diff --git a/src/test/java/redis/clients/jedis/tests/SSLJedisTest.java b/src/test/java/redis/clients/jedis/tests/SSLJedisTest.java index 62019fd9ae..af8bcf02b3 100644 --- a/src/test/java/redis/clients/jedis/tests/SSLJedisTest.java +++ b/src/test/java/redis/clients/jedis/tests/SSLJedisTest.java @@ -26,6 +26,7 @@ import org.junit.BeforeClass; import org.junit.Test; +import redis.clients.jedis.ClientOptions; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.exceptions.JedisConnectionException; @@ -51,7 +52,7 @@ private static void setJvmTrustStore(String trustStoreFilePath, String trustStor @Test public void connectWithUrl() { // The "rediss" scheme instructs jedis to open a SSL/TLS connection. - Jedis jedis = new Jedis("rediss://localhost:6390"); + Jedis jedis = new Jedis(ClientOptions.builder().withURI("rediss://localhost:6390").build()); jedis.auth("foobared"); jedis.get("foo"); jedis.close(); @@ -63,7 +64,7 @@ public void connectWithUrl() { @Test public void connectWithoutShardInfo() { // The "rediss" scheme instructs jedis to open a SSL/TLS connection. - Jedis jedis = new Jedis(URI.create("rediss://localhost:6390")); + Jedis jedis = new Jedis(ClientOptions.builder().withURI("rediss://localhost:6390").build()); jedis.auth("foobared"); jedis.get("foo"); jedis.close(); diff --git a/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java b/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java index c5e4fe33d4..79e5a2ebd7 100644 --- a/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java +++ b/src/test/java/redis/clients/jedis/tests/ShardedJedisPipelineTest.java @@ -16,14 +16,7 @@ import org.junit.Before; import org.junit.Test; -import redis.clients.jedis.HostAndPort; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisShardInfo; -import redis.clients.jedis.Pipeline; -import redis.clients.jedis.Response; -import redis.clients.jedis.ShardedJedis; -import redis.clients.jedis.ShardedJedisPipeline; -import redis.clients.jedis.Tuple; +import redis.clients.jedis.*; import redis.clients.jedis.exceptions.JedisDataException; public class ShardedJedisPipelineTest { @@ -35,11 +28,11 @@ public class ShardedJedisPipelineTest { @Before public void setUp() throws Exception { - Jedis jedis = new Jedis(redis1.getHost(), redis1.getPort()); + Jedis jedis = new Jedis(ClientOptions.builder().withHostAndPort(redis1).build()); jedis.auth("foobared"); jedis.flushAll(); jedis.disconnect(); - jedis = new Jedis(redis2.getHost(), redis2.getPort()); + jedis = new Jedis(ClientOptions.builder().withHostAndPort(redis2).build()); jedis.auth("foobared"); jedis.flushAll(); jedis.disconnect(); diff --git a/src/test/java/redis/clients/jedis/tests/ShardedJedisPoolTest.java b/src/test/java/redis/clients/jedis/tests/ShardedJedisPoolTest.java index 8890888595..f583246d18 100644 --- a/src/test/java/redis/clients/jedis/tests/ShardedJedisPoolTest.java +++ b/src/test/java/redis/clients/jedis/tests/ShardedJedisPoolTest.java @@ -13,12 +13,7 @@ import org.junit.Before; import org.junit.Test; -import redis.clients.jedis.HostAndPort; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisShardInfo; -import redis.clients.jedis.ShardedJedis; -import redis.clients.jedis.ShardedJedisPipeline; -import redis.clients.jedis.ShardedJedisPool; +import redis.clients.jedis.*; import redis.clients.jedis.exceptions.JedisException; import redis.clients.jedis.exceptions.JedisExhaustedPoolException; @@ -185,11 +180,11 @@ public void shouldReturnActiveShardsWhenOneGoesOffline() { @Test public void startWithUrlString() { - Jedis j = new Jedis("localhost", 6380); + Jedis j = new Jedis(ClientOptions.builder().withPort(6380).build()); j.auth("foobared"); j.set("foo", "bar"); - j = new Jedis("localhost", 6379); + j = new Jedis(); j.auth("foobared"); j.set("foo", "bar"); @@ -213,15 +208,15 @@ public void startWithUrlString() { @Test public void startWithUrl() throws URISyntaxException { - Jedis j = new Jedis("localhost", 6380); + Jedis j = new Jedis(ClientOptions.builder().withPort(6380).build()); j.auth("foobared"); j.set("foo", "bar"); - j = new Jedis("localhost", 6379); + j = new Jedis(); j.auth("foobared"); j.set("foo", "bar"); - List shards = new ArrayList(); + List shards = new ArrayList<>(); shards.add(new JedisShardInfo(new URI("redis://:foobared@localhost:6380"))); shards.add(new JedisShardInfo(new URI("redis://:foobared@localhost:6379"))); diff --git a/src/test/java/redis/clients/jedis/tests/ShardedJedisTest.java b/src/test/java/redis/clients/jedis/tests/ShardedJedisTest.java index b0a5123427..2cf1a4d24a 100644 --- a/src/test/java/redis/clients/jedis/tests/ShardedJedisTest.java +++ b/src/test/java/redis/clients/jedis/tests/ShardedJedisTest.java @@ -12,11 +12,7 @@ import org.junit.Test; -import redis.clients.jedis.HostAndPort; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisShardInfo; -import redis.clients.jedis.Protocol; -import redis.clients.jedis.ShardedJedis; +import redis.clients.jedis.*; import redis.clients.jedis.tests.utils.ClientKillerUtil; import redis.clients.util.Hashing; import redis.clients.util.Sharded; @@ -120,12 +116,12 @@ public void trySharding() { JedisShardInfo s2 = jedis.getShardInfo("b"); jedis.disconnect(); - Jedis j = new Jedis(s1.getHost(), s1.getPort()); + Jedis j = new Jedis(s1.toClientOptions()); j.auth("foobared"); assertEquals("bar", j.get("a")); j.disconnect(); - j = new Jedis(s2.getHost(), s2.getPort()); + j = new Jedis(s2.toClientOptions()); j.auth("foobared"); assertEquals("bar1", j.get("b")); j.disconnect(); @@ -147,12 +143,12 @@ public void tryShardingWithMurmure() { JedisShardInfo s2 = jedis.getShardInfo("b"); jedis.disconnect(); - Jedis j = new Jedis(s1.getHost(), s1.getPort()); + Jedis j = new Jedis(s1.toClientOptions()); j.auth("foobared"); assertEquals("bar", j.get("a")); j.disconnect(); - j = new Jedis(s2.getHost(), s2.getPort()); + j = new Jedis(s2.toClientOptions()); j.auth("foobared"); assertEquals("bar1", j.get("b")); j.disconnect(); diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java index eb7b023210..ee3e322bcd 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java @@ -4,6 +4,7 @@ import java.net.UnknownHostException; import java.util.Calendar; +import redis.clients.jedis.ClientOptions; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.tests.HostAndPortUtil; @@ -12,8 +13,8 @@ public class GetSetBenchmark { private static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); private static final int TOTAL_OPERATIONS = 100000; - public static void main(String[] args) throws UnknownHostException, IOException { - Jedis jedis = new Jedis(hnp.getHost(), hnp.getPort()); + public static void main(String[] args) throws IOException { + Jedis jedis = new Jedis(ClientOptions.builder().withHostAndPort(hnp).build()); jedis.connect(); jedis.auth("foobared"); jedis.flushAll(); diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/PipelinedGetSetBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/PipelinedGetSetBenchmark.java index f71c01d374..9c5007148a 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/PipelinedGetSetBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/PipelinedGetSetBenchmark.java @@ -4,6 +4,7 @@ import java.net.UnknownHostException; import java.util.Calendar; +import redis.clients.jedis.ClientOptions; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; @@ -14,7 +15,7 @@ public class PipelinedGetSetBenchmark { private static final int TOTAL_OPERATIONS = 200000; public static void main(String[] args) throws UnknownHostException, IOException { - Jedis jedis = new Jedis(hnp.getHost(), hnp.getPort()); + Jedis jedis = new Jedis(ClientOptions.builder().withHostAndPort(hnp).build()); jedis.connect(); jedis.auth("foobared"); jedis.flushAll(); diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java index cec7d7379a..1856f03081 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/PoolBenchmark.java @@ -6,19 +6,21 @@ import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import redis.clients.jedis.ClientOptions; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.tests.HostAndPortUtil; public class PoolBenchmark { + public static final String PASSWORD = "foobared"; + public static final int TIMEOUT = 2000; private static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); private static final int TOTAL_OPERATIONS = 100000; public static void main(String[] args) throws Exception { - Jedis j = new Jedis(hnp.getHost(), hnp.getPort()); + Jedis j = new Jedis(ClientOptions.builder().withHostAndPort(hnp).withPassword(PASSWORD).build()); j.connect(); - j.auth("foobared"); j.flushAll(); j.quit(); j.disconnect(); @@ -30,8 +32,7 @@ public static void main(String[] args) throws Exception { } private static void withPool() throws Exception { - final JedisPool pool = new JedisPool(new GenericObjectPoolConfig(), hnp.getHost(), - hnp.getPort(), 2000, "foobared"); + final JedisPool pool = new JedisPool(new GenericObjectPoolConfig(), ClientOptions.builder().withHostAndPort(hnp).withConnectionTimeout(TIMEOUT).withPassword(PASSWORD).build()); List tds = new ArrayList(); final AtomicInteger ind = new AtomicInteger(); diff --git a/src/test/java/redis/clients/jedis/tests/commands/ClusterBinaryJedisCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ClusterBinaryJedisCommandsTest.java index 7c90bdf1d5..5cfbc46933 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ClusterBinaryJedisCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ClusterBinaryJedisCommandsTest.java @@ -1,28 +1,19 @@ package redis.clients.jedis.tests.commands; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; - -import redis.clients.jedis.HostAndPort; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisCluster; -import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.*; import redis.clients.jedis.tests.HostAndPortUtil; import redis.clients.util.JedisClusterCRC16; +import java.util.*; + +import static org.junit.Assert.*; + public class ClusterBinaryJedisCommandsTest { + public static final String PASSWORD = "cluster"; private Jedis node1; private static Jedis node2; private static Jedis node3; @@ -35,16 +26,13 @@ public class ClusterBinaryJedisCommandsTest { @Before public void setUp() throws InterruptedException { - node1 = new Jedis(nodeInfo1.getHost(), nodeInfo1.getPort()); - node1.auth("cluster"); + node1 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo1).withPassword(PASSWORD).build()); node1.flushAll(); - node2 = new Jedis(nodeInfo2.getHost(), nodeInfo2.getPort()); - node2.auth("cluster"); + node2 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo2).withPassword(PASSWORD).build()); node2.flushAll(); - node3 = new Jedis(nodeInfo3.getHost(), nodeInfo3.getPort()); - node3.auth("cluster"); + node3 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo3).withPassword(PASSWORD).build()); node3.flushAll(); // ---- configure cluster @@ -75,7 +63,7 @@ public void setUp() throws InterruptedException { waitForClusterReady(); jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); - jedisCluster = new JedisCluster(jedisClusterNode, 2000, 2000, 5, "cluster", new JedisPoolConfig()); + jedisCluster = new JedisCluster(jedisClusterNode, 2000, 2000, 5, PASSWORD, new JedisPoolConfig()); } diff --git a/src/test/java/redis/clients/jedis/tests/commands/ClusterCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ClusterCommandsTest.java index 3d962375d1..5e7127781b 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ClusterCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ClusterCommandsTest.java @@ -12,6 +12,7 @@ import org.junit.Before; import org.junit.Test; +import redis.clients.jedis.ClientOptions; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisCluster.Reset; @@ -28,11 +29,11 @@ public class ClusterCommandsTest { @Before public void setUp() throws Exception { - node1 = new Jedis(nodeInfo1.getHost(), nodeInfo1.getPort()); + node1 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo1).build()); node1.auth("cluster"); node1.flushAll(); - node2 = new Jedis(nodeInfo2.getHost(), nodeInfo2.getPort()); + node2 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo2).build()); node2.auth("cluster"); node2.flushAll(); } diff --git a/src/test/java/redis/clients/jedis/tests/commands/ClusterScriptingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ClusterScriptingCommandsTest.java index 3d8e482dcd..6955959f77 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ClusterScriptingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ClusterScriptingCommandsTest.java @@ -1,28 +1,25 @@ package redis.clients.jedis.tests.commands; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; - -import redis.clients.jedis.HostAndPort; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisCluster; -import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.*; import redis.clients.jedis.exceptions.JedisClusterException; import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.jedis.tests.HostAndPortUtil; import redis.clients.util.JedisClusterCRC16; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + public class ClusterScriptingCommandsTest { + public static final String PASSWORD = "cluster"; private Jedis node1; private static Jedis node2; private static Jedis node3; @@ -35,16 +32,13 @@ public class ClusterScriptingCommandsTest { @Before public void setUp() throws InterruptedException { - node1 = new Jedis(nodeInfo1.getHost(), nodeInfo1.getPort()); - node1.auth("cluster"); + node1 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo1).withPassword(PASSWORD).build()); node1.flushAll(); - node2 = new Jedis(nodeInfo2.getHost(), nodeInfo2.getPort()); - node2.auth("cluster"); + node2 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo2).withPassword(PASSWORD).build()); node2.flushAll(); - node3 = new Jedis(nodeInfo3.getHost(), nodeInfo3.getPort()); - node3.auth("cluster"); + node3 = new Jedis(ClientOptions.builder().withHostAndPort(nodeInfo3).withPassword(PASSWORD).build()); node3.flushAll(); // ---- configure cluster diff --git a/src/test/java/redis/clients/jedis/tests/commands/ConnectionHandlingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ConnectionHandlingCommandsTest.java index 000c12a091..0e6ef27ac0 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ConnectionHandlingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ConnectionHandlingCommandsTest.java @@ -5,6 +5,7 @@ import org.junit.Test; import redis.clients.jedis.BinaryJedis; +import redis.clients.jedis.ClientOptions; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.tests.HostAndPortUtil; @@ -18,7 +19,7 @@ public void quit() { @Test public void binary_quit() { - BinaryJedis bj = new BinaryJedis(hnp.getHost()); + BinaryJedis bj = new BinaryJedis(ClientOptions.builder().withHostAndPort(hnp).build()); assertEquals("OK", bj.quit()); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java index e9d4305e84..83f63fd0eb 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ControlCommandsTest.java @@ -78,7 +78,7 @@ public void run() { Thread.sleep(100); } catch (InterruptedException e) { } - Jedis j = new Jedis("localhost"); + Jedis j = new Jedis(); j.auth("foobared"); for (int i = 0; i < 5; i++) { j.incr("foobared"); diff --git a/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java b/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java index 4a63338ffe..3a939df240 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java +++ b/src/test/java/redis/clients/jedis/tests/commands/JedisCommandTestBase.java @@ -12,11 +12,13 @@ import org.junit.Before; import org.junit.ComparisonFailure; +import redis.clients.jedis.ClientOptions; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.tests.HostAndPortUtil; public abstract class JedisCommandTestBase { + public static final String PASSWORD = "foobared"; protected static HostAndPort hnp = HostAndPortUtil.getRedisServers().get(0); protected Jedis jedis; @@ -27,9 +29,8 @@ public JedisCommandTestBase() { @Before public void setUp() throws Exception { - jedis = new Jedis(hnp.getHost(), hnp.getPort(), 500); + jedis = new Jedis(ClientOptions.builder().withHostAndPort(hnp).withPassword(PASSWORD).withTimeout(500).build()); jedis.connect(); - jedis.auth("foobared"); jedis.configSet("timeout", "300"); jedis.flushAll(); } @@ -40,9 +41,8 @@ public void tearDown() { } protected Jedis createJedis() { - Jedis j = new Jedis(hnp.getHost(), hnp.getPort()); + Jedis j = new Jedis(ClientOptions.builder().withHostAndPort(hnp).withPassword(PASSWORD).build()); j.connect(); - j.auth("foobared"); j.flushAll(); return j; } diff --git a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java index 6af69c9205..7ff5aad3d6 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java @@ -15,6 +15,7 @@ import org.junit.Test; import redis.clients.jedis.BinaryJedis; +import redis.clients.jedis.ClientOptions; import redis.clients.jedis.Jedis; import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisDataException; @@ -24,6 +25,8 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { + public static final String PASSWORD = "foobared"; + @SuppressWarnings("unchecked") @Test public void evalMultiBulk() { @@ -60,9 +63,8 @@ public void evalMultiBulkWithBinaryJedis() { args.add("second".getBytes()); args.add("third".getBytes()); - BinaryJedis binaryJedis = new BinaryJedis(hnp.getHost(), hnp.getPort(), 500); + BinaryJedis binaryJedis = new BinaryJedis(ClientOptions.builder().withHostAndPort(hnp).withConnectionTimeout(500).withPassword(PASSWORD).build()); binaryJedis.connect(); - binaryJedis.auth("foobared"); List responses = (List) binaryJedis.eval(script.getBytes(), keys, args); assertEquals(5, responses.size()); @@ -210,8 +212,8 @@ public void scriptEvalShaReturnNullValues() { @Test public void scriptExistsWithBrokenConnection() { - Jedis deadClient = new Jedis(jedis.getClient().getHost(), jedis.getClient().getPort()); - deadClient.auth("foobared"); + Jedis deadClient = new Jedis(jedis.getClient().getClientOptions()); + deadClient.auth(PASSWORD); deadClient.clientSetname("DEAD"); diff --git a/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java index c15de89be1..ab1270df13 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java @@ -17,11 +17,8 @@ import org.junit.Before; import org.junit.Test; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.Pipeline; +import redis.clients.jedis.*; import redis.clients.jedis.Protocol.Keyword; -import redis.clients.jedis.Response; -import redis.clients.jedis.Transaction; import redis.clients.jedis.exceptions.JedisDataException; public class TransactionCommandsTest extends JedisCommandTestBase { @@ -38,7 +35,7 @@ public class TransactionCommandsTest extends JedisCommandTestBase { public void setUp() throws Exception { super.setUp(); - nj = new Jedis(hnp.getHost(), hnp.getPort(), 500); + nj = new Jedis(ClientOptions.builder().withHostAndPort(hnp).withTimeout(500).build()); nj.connect(); nj.auth("foobared"); nj.flushAll(); @@ -312,7 +309,7 @@ public void testResetStateWhenInWatch() { @Test public void testResetStateWithFullyExecutedTransaction() { - Jedis jedis2 = new Jedis(jedis.getClient().getHost(), jedis.getClient().getPort()); + Jedis jedis2 = new Jedis(jedis.getClient().getClientOptions()); jedis2.auth("foobared"); Transaction t = jedis2.multi(); @@ -330,7 +327,7 @@ public void testResetStateWithFullyExecutedTransaction() { @Test public void testCloseable() throws IOException { // we need to test with fresh instance of Jedis - Jedis jedis2 = new Jedis(hnp.getHost(), hnp.getPort(), 500); + Jedis jedis2 = new Jedis(ClientOptions.builder().withHostAndPort(hnp).withTimeout(500).build()); jedis2.auth("foobared"); Transaction transaction = jedis2.multi();