Skip to content

Commit fd819d5

Browse files
committed
feat: fix CamelliaRedisProxyResource
1 parent f1d0dc5 commit fd819d5

6 files changed

Lines changed: 162 additions & 9 deletions

File tree

camellia-redis-client/camellia-redis/src/main/java/com/netease/nim/camellia/redis/resource/RedisClientResourceUtil.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,13 @@ public static Resource parseResourceByUrl(Resource resource) {
7878
Map<String, String> paramMap = RedisResourceUtil.getParamMap(substring);
7979

8080
CamelliaRedisProxyResource camelliaRedisProxyResource;
81-
String bid = paramMap.get("bid");
81+
String bidStr = paramMap.get("bid");
8282
String bgroup = paramMap.get("bgroup");
83-
if (bid != null && bgroup != null) {
84-
camelliaRedisProxyResource = new CamelliaRedisProxyResource(password, proxyName, Long.parseLong(bid), bgroup);
83+
String dbStr = paramMap.get("db");
84+
if (bidStr != null || bgroup != null || dbStr != null) {
85+
long bid = bidStr == null ? -1 : Long.parseLong(bidStr);
86+
int db = dbStr == null ? 0 : Integer.parseInt(dbStr);
87+
camelliaRedisProxyResource = new CamelliaRedisProxyResource(password, proxyName, bid, bgroup, db);
8588
} else {
8689
camelliaRedisProxyResource = new CamelliaRedisProxyResource(password, proxyName);
8790
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.netease.nim.camellia.redis.resource;
2+
3+
import com.netease.nim.camellia.core.model.Resource;
4+
import com.netease.nim.camellia.redis.base.resource.CamelliaRedisProxyResource;
5+
import com.netease.nim.camellia.redis.proxy.CamelliaRedisProxyContext;
6+
import org.junit.Assert;
7+
import org.junit.BeforeClass;
8+
import org.junit.Test;
9+
import redis.clients.jedis.JedisPool;
10+
11+
/**
12+
* Created by caojiajun on 2026/4/30
13+
*/
14+
public class RedisClientResourceUtilTest {
15+
16+
private static final JedisPool jedisPool = new JedisPool();
17+
18+
@BeforeClass
19+
public static void beforeClass() {
20+
CamelliaRedisProxyContext.register(resource -> jedisPool);
21+
}
22+
23+
@Test
24+
public void shouldPreserveCamelliaRedisProxyDbParam() {
25+
Resource resource = RedisClientResourceUtil.parseResourceByUrl(
26+
new Resource("camellia-redis-proxy://pass@proxyName?bid=1&bgroup=default&db=2"));
27+
28+
Assert.assertTrue(resource instanceof CamelliaRedisProxyResource);
29+
CamelliaRedisProxyResource proxyResource = (CamelliaRedisProxyResource) resource;
30+
Assert.assertEquals(1L, proxyResource.getBid());
31+
Assert.assertEquals("default", proxyResource.getBgroup());
32+
Assert.assertEquals(2, proxyResource.getDb());
33+
Assert.assertEquals("camellia-redis-proxy://pass@proxyName?bid=1&bgroup=default&db=2", proxyResource.getUrl());
34+
}
35+
36+
@Test
37+
public void shouldPreserveCamelliaRedisProxyDbParamWithoutBidAndBgroup() {
38+
Resource resource = RedisClientResourceUtil.parseResourceByUrl(
39+
new Resource("camellia-redis-proxy://pass@proxyName?db=3"));
40+
41+
Assert.assertTrue(resource instanceof CamelliaRedisProxyResource);
42+
CamelliaRedisProxyResource proxyResource = (CamelliaRedisProxyResource) resource;
43+
Assert.assertEquals(-1L, proxyResource.getBid());
44+
Assert.assertNull(proxyResource.getBgroup());
45+
Assert.assertEquals(3, proxyResource.getDb());
46+
Assert.assertEquals("camellia-redis-proxy://pass@proxyName?db=3", proxyResource.getUrl());
47+
}
48+
}

camellia-redis-client/camellia-redis3/src/main/java/com/netease/nim/camellia/redis/resource/RedisClientResourceUtil.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,13 @@ public static Resource parseResourceByUrl(Resource resource) {
7878
Map<String, String> paramMap = RedisResourceUtil.getParamMap(substring);
7979

8080
CamelliaRedisProxyResource camelliaRedisProxyResource;
81-
String bid = paramMap.get("bid");
81+
String bidStr = paramMap.get("bid");
8282
String bgroup = paramMap.get("bgroup");
83-
if (bid != null && bgroup != null) {
84-
camelliaRedisProxyResource = new CamelliaRedisProxyResource(password, proxyName, Long.parseLong(bid), bgroup);
83+
String dbStr = paramMap.get("db");
84+
if (bidStr != null || bgroup != null || dbStr != null) {
85+
long bid = bidStr == null ? -1 : Long.parseLong(bidStr);
86+
int db = dbStr == null ? 0 : Integer.parseInt(dbStr);
87+
camelliaRedisProxyResource = new CamelliaRedisProxyResource(password, proxyName, bid, bgroup, db);
8588
} else {
8689
camelliaRedisProxyResource = new CamelliaRedisProxyResource(password, proxyName);
8790
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.netease.nim.camellia.redis.resource;
2+
3+
import com.netease.nim.camellia.core.model.Resource;
4+
import com.netease.nim.camellia.redis.base.resource.CamelliaRedisProxyResource;
5+
import com.netease.nim.camellia.redis.proxy.CamelliaRedisProxyContext;
6+
import org.junit.Assert;
7+
import org.junit.BeforeClass;
8+
import org.junit.Test;
9+
import redis.clients.jedis.JedisPool;
10+
11+
/**
12+
* Created by caojiajun on 2026/4/30
13+
*/
14+
public class RedisClientResourceUtilTest {
15+
16+
private static final JedisPool jedisPool = new JedisPool();
17+
18+
@BeforeClass
19+
public static void beforeClass() {
20+
CamelliaRedisProxyContext.register(resource -> jedisPool);
21+
}
22+
23+
@Test
24+
public void shouldPreserveCamelliaRedisProxyDbParam() {
25+
Resource resource = RedisClientResourceUtil.parseResourceByUrl(
26+
new Resource("camellia-redis-proxy://pass@proxyName?bid=1&bgroup=default&db=2"));
27+
28+
Assert.assertTrue(resource instanceof CamelliaRedisProxyResource);
29+
CamelliaRedisProxyResource proxyResource = (CamelliaRedisProxyResource) resource;
30+
Assert.assertEquals(1L, proxyResource.getBid());
31+
Assert.assertEquals("default", proxyResource.getBgroup());
32+
Assert.assertEquals(2, proxyResource.getDb());
33+
Assert.assertEquals("camellia-redis-proxy://pass@proxyName?bid=1&bgroup=default&db=2", proxyResource.getUrl());
34+
}
35+
36+
@Test
37+
public void shouldPreserveCamelliaRedisProxyDbParamWithoutBidAndBgroup() {
38+
Resource resource = RedisClientResourceUtil.parseResourceByUrl(
39+
new Resource("camellia-redis-proxy://pass@proxyName?db=3"));
40+
41+
Assert.assertTrue(resource instanceof CamelliaRedisProxyResource);
42+
CamelliaRedisProxyResource proxyResource = (CamelliaRedisProxyResource) resource;
43+
Assert.assertEquals(-1L, proxyResource.getBid());
44+
Assert.assertNull(proxyResource.getBgroup());
45+
Assert.assertEquals(3, proxyResource.getDb());
46+
Assert.assertEquals("camellia-redis-proxy://pass@proxyName?db=3", proxyResource.getUrl());
47+
}
48+
}

camellia-redis-client/camellia-redis5/src/main/java/com/netease/nim/camellia/redis/resource/RedisClientResourceUtil.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,13 @@ public static Resource parseResourceByUrl(Resource resource) {
7878
Map<String, String> paramMap = RedisResourceUtil.getParamMap(substring);
7979

8080
CamelliaRedisProxyResource camelliaRedisProxyResource;
81-
String bid = paramMap.get("bid");
81+
String bidStr = paramMap.get("bid");
8282
String bgroup = paramMap.get("bgroup");
83-
if (bid != null && bgroup != null) {
84-
camelliaRedisProxyResource = new CamelliaRedisProxyResource(password, proxyName, Long.parseLong(bid), bgroup);
83+
String dbStr = paramMap.get("db");
84+
if (bidStr != null || bgroup != null || dbStr != null) {
85+
long bid = bidStr == null ? -1 : Long.parseLong(bidStr);
86+
int db = dbStr == null ? 0 : Integer.parseInt(dbStr);
87+
camelliaRedisProxyResource = new CamelliaRedisProxyResource(password, proxyName, bid, bgroup, db);
8588
} else {
8689
camelliaRedisProxyResource = new CamelliaRedisProxyResource(password, proxyName);
8790
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.netease.nim.camellia.redis.resource;
2+
3+
import com.netease.nim.camellia.core.model.Resource;
4+
import com.netease.nim.camellia.redis.base.resource.CamelliaRedisProxyResource;
5+
import com.netease.nim.camellia.redis.proxy.CamelliaRedisProxyContext;
6+
import org.junit.Assert;
7+
import org.junit.BeforeClass;
8+
import org.junit.Test;
9+
import redis.clients.jedis.JedisPool;
10+
11+
/**
12+
* Created by caojiajun on 2026/4/30
13+
*/
14+
public class RedisClientResourceUtilTest {
15+
16+
private static final JedisPool jedisPool = new JedisPool();
17+
18+
@BeforeClass
19+
public static void beforeClass() {
20+
CamelliaRedisProxyContext.register(resource -> jedisPool);
21+
}
22+
23+
@Test
24+
public void shouldPreserveCamelliaRedisProxyDbParam() {
25+
Resource resource = RedisClientResourceUtil.parseResourceByUrl(
26+
new Resource("camellia-redis-proxy://pass@proxyName?bid=1&bgroup=default&db=2"));
27+
28+
Assert.assertTrue(resource instanceof CamelliaRedisProxyResource);
29+
CamelliaRedisProxyResource proxyResource = (CamelliaRedisProxyResource) resource;
30+
Assert.assertEquals(1L, proxyResource.getBid());
31+
Assert.assertEquals("default", proxyResource.getBgroup());
32+
Assert.assertEquals(2, proxyResource.getDb());
33+
Assert.assertEquals("camellia-redis-proxy://pass@proxyName?bid=1&bgroup=default&db=2", proxyResource.getUrl());
34+
}
35+
36+
@Test
37+
public void shouldPreserveCamelliaRedisProxyDbParamWithoutBidAndBgroup() {
38+
Resource resource = RedisClientResourceUtil.parseResourceByUrl(
39+
new Resource("camellia-redis-proxy://pass@proxyName?db=3"));
40+
41+
Assert.assertTrue(resource instanceof CamelliaRedisProxyResource);
42+
CamelliaRedisProxyResource proxyResource = (CamelliaRedisProxyResource) resource;
43+
Assert.assertEquals(-1L, proxyResource.getBid());
44+
Assert.assertNull(proxyResource.getBgroup());
45+
Assert.assertEquals(3, proxyResource.getDb());
46+
Assert.assertEquals("camellia-redis-proxy://pass@proxyName?db=3", proxyResource.getUrl());
47+
}
48+
}

0 commit comments

Comments
 (0)