Skip to content

Commit 1b532f4

Browse files
committed
RedisURI: fixes + tests
1 parent f1d738a commit 1b532f4

File tree

2 files changed

+55
-6
lines changed

2 files changed

+55
-6
lines changed

driver/src/main/java/jdbc/client/RedisJedisURIBase.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ protected RedisJedisURIBase(String url, Properties info) {
4242
int questionIndex = uri.indexOf('?');
4343
if (slashIndex >= 0) {
4444
hostAndPortBlock = uri.substring(0, slashIndex);
45-
uri = uri.substring(slashIndex);
45+
uri = uri.substring(slashIndex + 1);
4646
} else if (questionIndex >= 0) {
4747
hostAndPortBlock = uri.substring(0, questionIndex);
48-
uri = uri.substring(questionIndex);
48+
uri = uri.substring(questionIndex + 1);
4949
} else {
5050
hostAndPortBlock = uri;
5151
uri = "";
@@ -54,10 +54,10 @@ protected RedisJedisURIBase(String url, Properties info) {
5454

5555
String databaseBlock = "";
5656
if (slashIndex >= 0) {
57-
uri = uri.replaceFirst("/", "");
57+
questionIndex = uri.indexOf('?');
5858
if (questionIndex >= 0) {
5959
databaseBlock = uri.substring(0, questionIndex);
60-
uri = uri.substring(questionIndex);
60+
uri = uri.substring(questionIndex + 1);
6161
} else {
6262
databaseBlock = uri;
6363
uri = "";
@@ -67,7 +67,6 @@ protected RedisJedisURIBase(String url, Properties info) {
6767

6868
String parametersBlock = "";
6969
if (questionIndex >= 0) {
70-
uri = uri.replaceFirst("\\?", "");
7170
parametersBlock = uri;
7271
}
7372
setParameters(parametersBlock, info);
@@ -118,7 +117,7 @@ private void setDatabase(@NotNull String databaseBlock, Properties info) {
118117

119118
private void setParameters(@NotNull String parametersBlock, Properties info) {
120119
Map<String, String> parameters = new HashMap<>();
121-
String[] parametersParts = parametersBlock.split(",");
120+
String[] parametersParts = parametersBlock.split("&");
122121
for (String parameterBlock : parametersParts) {
123122
if (!parameterBlock.isEmpty()) {
124123
String[] nodeParts = parameterBlock.split("=", 2);

driver/src/test/jdbc/client/RedisURITest.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
import java.util.Comparator;
77

88
import static org.junit.Assert.assertEquals;
9+
import static org.junit.Assert.assertNull;
910

1011
public class RedisURITest {
12+
1113
@Test
1214
public void testURI() {
1315
RedisJedisURI uri = new RedisJedisURI("jdbc:redis://user:password@server:6380/7", null);
@@ -19,6 +21,54 @@ public void testURI() {
1921
assertEquals(7, uri.getDatabase());
2022
}
2123

24+
@Test
25+
public void testURIEmptyUser() {
26+
RedisJedisURI uri = new RedisJedisURI("jdbc:redis://password@server:6380/7", null);
27+
assertNull(uri.getUser());
28+
assertEquals("password", uri.getPassword());
29+
}
30+
31+
@Test
32+
public void testURIEmptyAuth() {
33+
RedisJedisURI uri = new RedisJedisURI("jdbc:redis://server:6380/7", null);
34+
assertNull(uri.getUser());
35+
assertNull(uri.getPassword());
36+
}
37+
38+
@Test
39+
public void testURIEmptyDatabase() {
40+
RedisJedisURI uri = new RedisJedisURI("jdbc:redis://server:6380", null);
41+
assertEquals(0, uri.getDatabase());
42+
}
43+
44+
@Test
45+
public void testURIEmptyDatabaseAfterSlash() {
46+
RedisJedisURI uri = new RedisJedisURI("jdbc:redis://user:password@server:6380/", null);
47+
assertEquals(0, uri.getDatabase());
48+
}
49+
50+
@Test
51+
public void testURIParamsAfterDatabase() {
52+
RedisJedisURI uri = new RedisJedisURI("jdbc:redis://user:password@server:6380/7?connectionTimeout=1000&socketTimeout=3000", null);
53+
assertEquals(1000, uri.getConnectionTimeoutMillis());
54+
assertEquals(3000, uri.getSocketTimeoutMillis());
55+
}
56+
57+
@Test
58+
public void testURIParamsAfterSlash() {
59+
RedisJedisURI uri = new RedisJedisURI("jdbc:redis://user:password@server:6380/?connectionTimeout=1000&socketTimeout=3000", null);
60+
assertEquals(1000, uri.getConnectionTimeoutMillis());
61+
assertEquals(3000, uri.getSocketTimeoutMillis());
62+
}
63+
64+
65+
@Test
66+
public void testURIParamsAfterHostAndPort() {
67+
RedisJedisURI uri = new RedisJedisURI("jdbc:redis://user:password@server:6380?connectionTimeout=1000&socketTimeout=3000", null);
68+
assertEquals(1000, uri.getConnectionTimeoutMillis());
69+
assertEquals(3000, uri.getSocketTimeoutMillis());
70+
}
71+
2272
@Test
2373
public void testClusterURI() {
2474
RedisJedisClusterURI uri = new RedisJedisClusterURI("jdbc:redis:cluster://user:password@host0:6379,host1:6380,host2:6381,host3:6382,host4:6383,host5:6384?maxAttempts=6", null);

0 commit comments

Comments
 (0)