diff --git a/Makefile b/Makefile index 6e63f1b6ce..96d106b000 100644 --- a/Makefile +++ b/Makefile @@ -274,6 +274,50 @@ cluster-enabled yes cluster-config-file /tmp/redis_cluster_node5.conf endef +# STABLE CLUSTER REDIS NODES +# The structure of this cluster is not changed by the tests! +define REDIS_STABLE_CLUSTER_NODE1_CONF +daemonize yes +protected-mode no +requirepass cluster +port 7479 +cluster-node-timeout 15000 +pidfile /tmp/redis_stable_cluster_node1.pid +logfile /tmp/redis_stable_cluster_node1.log +save "" +appendonly no +cluster-enabled yes +cluster-config-file /tmp/redis_stable_cluster_node1.conf +endef + +define REDIS_STABLE_CLUSTER_NODE2_CONF +daemonize yes +protected-mode no +requirepass cluster +port 7480 +cluster-node-timeout 15000 +pidfile /tmp/redis_stable_cluster_node2.pid +logfile /tmp/redis_stable_cluster_node2.log +save "" +appendonly no +cluster-enabled yes +cluster-config-file /tmp/redis_stable_cluster_node2.conf +endef + +define REDIS_STABLE_CLUSTER_NODE3_CONF +daemonize yes +protected-mode no +requirepass cluster +port 7481 +cluster-node-timeout 15000 +pidfile /tmp/redis_stable_cluster_node3.pid +logfile /tmp/redis_stable_cluster_node3.log +save "" +appendonly no +cluster-enabled yes +cluster-config-file /tmp/redis_stable_cluster_node3.conf +endef + # UDS REDIS NODES define REDIS_UDS daemonize yes @@ -355,6 +399,9 @@ export REDIS_CLUSTER_NODE2_CONF export REDIS_CLUSTER_NODE3_CONF export REDIS_CLUSTER_NODE4_CONF export REDIS_CLUSTER_NODE5_CONF +export REDIS_STABLE_CLUSTER_NODE1_CONF +export REDIS_STABLE_CLUSTER_NODE2_CONF +export REDIS_STABLE_CLUSTER_NODE3_CONF export REDIS_UDS export REDIS_UNAVAILABLE_CONF export STUNNEL_CONF @@ -393,8 +440,12 @@ start: stunnel cleanup echo "$$REDIS_CLUSTER_NODE3_CONF" | redis-server - echo "$$REDIS_CLUSTER_NODE4_CONF" | redis-server - echo "$$REDIS_CLUSTER_NODE5_CONF" | redis-server - + echo "$$REDIS_STABLE_CLUSTER_NODE1_CONF" | redis-server - + echo "$$REDIS_STABLE_CLUSTER_NODE2_CONF" | redis-server - + echo "$$REDIS_STABLE_CLUSTER_NODE3_CONF" | redis-server - echo "$$REDIS_UDS" | redis-server - echo "$$REDIS_UNAVAILABLE_CONF" | redis-server - + redis-cli -a cluster --cluster create 127.0.0.1:7479 127.0.0.1:7480 127.0.0.1:7481 --cluster-yes cleanup: - rm -vf /tmp/redis_cluster_node*.conf 2>/dev/null @@ -426,6 +477,9 @@ stop: kill `cat /tmp/redis_cluster_node3.pid` || true kill `cat /tmp/redis_cluster_node4.pid` || true kill `cat /tmp/redis_cluster_node5.pid` || true + kill `cat /tmp/redis_stable_cluster_node1.pid` + kill `cat /tmp/redis_stable_cluster_node2.pid` + kill `cat /tmp/redis_stable_cluster_node3.pid` kill `cat /tmp/redis_uds.pid` || true kill `cat /tmp/stunnel.pid` || true [ -f /tmp/redis_unavailable.pid ] && kill `cat /tmp/redis_unavailable.pid` || true @@ -439,6 +493,9 @@ stop: rm -f /tmp/redis_cluster_node3.conf rm -f /tmp/redis_cluster_node4.conf rm -f /tmp/redis_cluster_node5.conf + rm -f /tmp/redis_stable_cluster_node1.conf + rm -f /tmp/redis_stable_cluster_node2.conf + rm -f /tmp/redis_stable_cluster_node3.conf test: compile-module start sleep 2 diff --git a/src/test/java/redis/clients/jedis/HostAndPorts.java b/src/test/java/redis/clients/jedis/HostAndPorts.java index 0ce0269f2a..1f919117bb 100644 --- a/src/test/java/redis/clients/jedis/HostAndPorts.java +++ b/src/test/java/redis/clients/jedis/HostAndPorts.java @@ -8,6 +8,7 @@ public final class HostAndPorts { private static List redisHostAndPortList = new ArrayList<>(); private static List sentinelHostAndPortList = new ArrayList<>(); private static List clusterHostAndPortList = new ArrayList<>(); + private static List stableClusterHostAndPortList = new ArrayList<>(); static { redisHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_PORT)); @@ -34,6 +35,10 @@ public final class HostAndPorts { clusterHostAndPortList.add(new HostAndPort("localhost", 7382)); clusterHostAndPortList.add(new HostAndPort("localhost", 7383)); clusterHostAndPortList.add(new HostAndPort("localhost", 7384)); + + stableClusterHostAndPortList.add(new HostAndPort("localhost", 7479)); + stableClusterHostAndPortList.add(new HostAndPort("localhost", 7480)); + stableClusterHostAndPortList.add(new HostAndPort("localhost", 7481)); } public static List parseHosts(String envHosts, @@ -71,6 +76,10 @@ public static List getClusterServers() { return clusterHostAndPortList; } + public static List getStableClusterServers() { + return stableClusterHostAndPortList; + } + private HostAndPorts() { throw new InstantiationError("Must not instantiate this class"); } diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterAllKindOfValuesCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterAllKindOfValuesCommandsTest.java index 80898ccd71..c71d5eb7cf 100644 --- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterAllKindOfValuesCommandsTest.java +++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterAllKindOfValuesCommandsTest.java @@ -1,266 +1,255 @@ -//package redis.clients.jedis.commands.unified.cluster; -// -//import static org.junit.Assert.assertEquals; -//import static org.junit.Assert.assertFalse; -//import static org.junit.Assert.assertNull; -//import static org.junit.Assert.assertTrue; -//import static redis.clients.jedis.params.ScanParams.SCAN_POINTER_START; -// -//import java.util.Collections; -//import java.util.HashSet; -//import java.util.Set; -// -//import org.junit.AfterClass; -//import org.junit.Before; -//import org.junit.BeforeClass; -//import org.junit.Test; -// -//import redis.clients.jedis.params.ScanParams; -//import redis.clients.jedis.resps.ScanResult; -//import redis.clients.jedis.commands.unified.AllKindOfValuesCommandsTestBase; -// -//public class ClusterAllKindOfValuesCommandsTest extends AllKindOfValuesCommandsTestBase { -// -// @BeforeClass -// public static void prepare() throws InterruptedException { -// jedis = ClusterCommandsTestHelper.initAndGetCluster(); -// } -// -// @AfterClass -// public static void closeCluster() { -// jedis.close(); -// } -// -// @AfterClass -// public static void resetCluster() { -// ClusterCommandsTestHelper.tearClusterDown(); -// } -// -// @Before -// public void setUp() { -// ClusterCommandsTestHelper.clearClusterData(); -// } -// -// @Test -// @Override -// public void existsMany() { -// String status = jedis.set("{foo}1", "bar1"); -// assertEquals("OK", status); -// -// status = jedis.set("{foo}2", "bar2"); -// assertEquals("OK", status); -// -// assertEquals(2L, jedis.exists("{foo}1", "{foo}2")); -// -// assertEquals(1L, jedis.del("{foo}1")); -// -// assertEquals(1L, jedis.exists("{foo}1", "{foo}2")); -// } -// -// @Test -// @Override -// public void del() { -// jedis.set("{foo}1", "bar1"); -// jedis.set("{foo}2", "bar2"); -// jedis.set("{foo}3", "bar3"); -// -// assertEquals(3L, jedis.del("{foo}1", "{foo}2", "{foo}3")); -// -// assertFalse(jedis.exists("{foo}1")); -// assertFalse(jedis.exists("{foo}2")); -// assertFalse(jedis.exists("{foo}3")); -// -// jedis.set("{foo}1", "bar1"); -// -// assertEquals(1L, jedis.del("{foo}1", "{foo}2")); -// -// assertEquals(0L, jedis.del("{foo}1", "{foo}2")); -// } -// -// @Test -// @Override -// public void unlink() { -// jedis.set("{foo}1", "bar1"); -// jedis.set("{foo}2", "bar2"); -// jedis.set("{foo}3", "bar3"); -// -// assertEquals(3, jedis.unlink("{foo}1", "{foo}2", "{foo}3")); -// -// assertEquals(0, jedis.exists("{foo}1", "{foo}2", "{foo}3")); -// -// jedis.set("{foo}1", "bar1"); -// -// assertEquals(1, jedis.unlink("{foo}1", "{foo}2")); -// -// assertEquals(0, jedis.unlink("{foo}1", "{foo}2")); -// -// jedis.set("{foo}", "bar"); -// assertEquals(1, jedis.unlink("{foo}")); -// assertFalse(jedis.exists("{foo}")); -// } -// -// @Test -// @Override -// public void keys() { -// jedis.set("{foo}", "bar"); -// jedis.set("{foo}bar", "bar"); -// -// Set keys = jedis.keys("{foo}*"); -// Set expected = new HashSet<>(); -// expected.add("{foo}"); -// expected.add("{foo}bar"); -// assertEquals(expected, keys); -// -// expected.clear(); -// keys = jedis.keys("{bar}*"); -// -// assertEquals(expected, keys); -// } -// -// @Test -// @Override -// public void rename() { -// jedis.set("foo{#}", "bar"); -// String status = jedis.rename("foo{#}", "bar{#}"); -// assertEquals("OK", status); -// -// assertNull(jedis.get("foo{#}")); -// -// assertEquals("bar", jedis.get("bar{#}")); -// } -// -// @Test -// @Override -// public void renamenx() { -// jedis.set("foo{&}", "bar"); -// assertEquals(1, jedis.renamenx("foo{&}", "bar{&}")); -// -// jedis.set("foo{&}", "bar"); -// assertEquals(0, jedis.renamenx("foo{&}", "bar{&}")); -// } -// -// @Test(expected = UnsupportedOperationException.class) -// @Override -// public void dbSize() { -// super.dbSize(); -// } -// -// @Test -// @Override -// public void touch() throws Exception { -// assertEquals(0, jedis.touch("{foo}1", "{foo}2", "{foo}3")); -// -// jedis.set("{foo}1", "bar1"); -// -// Thread.sleep(1100); // little over 1 sec -// assertTrue(jedis.objectIdletime("{foo}1") > 0); -// -// assertEquals(1, jedis.touch("{foo}1")); -// assertEquals(0L, jedis.objectIdletime("{foo}1").longValue()); -// -// assertEquals(1, jedis.touch("{foo}1", "{foo}2", "{foo}3")); -// -// jedis.set("{foo}2", "bar2"); -// -// jedis.set("{foo}3", "bar3"); -// -// assertEquals(3, jedis.touch("{foo}1", "{foo}2", "{foo}3")); -// } -// -// @Test -// @Override -// public void scan() { -// jedis.set("{%}b", "b"); -// jedis.set("a{%}", "a"); -// -// ScanResult result = jedis.scan(SCAN_POINTER_START, new ScanParams().match("*{%}*")); -// -// assertEquals(SCAN_POINTER_START, result.getCursor()); -// assertFalse(result.getResult().isEmpty()); -// } -// -// @Test -// @Override -// public void scanMatch() { -// ScanParams params = new ScanParams(); -// params.match("a{-}*"); -// -// jedis.set("b{-}", "b"); -// jedis.set("a{-}", "a"); -// jedis.set("a{-}a", "aa"); -// ScanResult result = jedis.scan(SCAN_POINTER_START, params); -// -// assertEquals(SCAN_POINTER_START, result.getCursor()); -// assertFalse(result.getResult().isEmpty()); -// } -// -// @Test -// @Override -// public void scanCount() { -// ScanParams params = new ScanParams(); -// params.match("{a}*"); -// params.count(2); -// -// for (int i = 0; i < 10; i++) { -// jedis.set("{a}" + i, "a" + i); -// } -// -// ScanResult result = jedis.scan(SCAN_POINTER_START, params); -// assertTrue(result.getResult().size() >= 2); -// } -// -// @Test -// @Override -// public void scanType() { -// ScanParams noCount = new ScanParams().match("*{+}*"); -// ScanParams pagingParams = new ScanParams().match("*{+}*").count(4); -// -// jedis.set("{+}a", "a"); -// jedis.hset("{+}b", "b", "b"); -// jedis.set("c{+}", "c"); -// jedis.sadd("d{+}", "d"); -// jedis.set("e{+}", "e"); -// jedis.zadd("{+}f", 0d, "f"); -// jedis.set("{+}g", "g"); -// -// // string -// ScanResult scanResult; -// -// scanResult = jedis.scan(SCAN_POINTER_START, pagingParams, "string"); -// assertFalse(scanResult.isCompleteIteration()); -// int page1Count = scanResult.getResult().size(); -// scanResult = jedis.scan(scanResult.getCursor(), pagingParams, "string"); -// assertTrue(scanResult.isCompleteIteration()); -// int page2Count = scanResult.getResult().size(); -// assertEquals(4, page1Count + page2Count); -// -// -// scanResult = jedis.scan(SCAN_POINTER_START, noCount, "hash"); -// assertEquals(Collections.singletonList("{+}b"), scanResult.getResult()); -// scanResult = jedis.scan(SCAN_POINTER_START, noCount, "set"); -// assertEquals(Collections.singletonList("d{+}"), scanResult.getResult()); -// scanResult = jedis.scan(SCAN_POINTER_START, noCount, "zset"); -// assertEquals(Collections.singletonList("{+}f"), scanResult.getResult()); -// } -// -// @Test(expected = IllegalArgumentException.class) -// @Override -// public void scanIsCompleteIteration() { -// super.scanIsCompleteIteration(); -// } -// -// @Test -// @Override -// public void copy() { -// assertFalse(jedis.copy("unkn{o}wn", "f{o}o", false)); -// -// jedis.set("{foo}1", "bar"); -// assertTrue(jedis.copy("{foo}1", "{foo}2", false)); -// assertEquals("bar", jedis.get("{foo}2")); -// -// // replace -// jedis.set("{foo}1", "bar1"); -// assertTrue(jedis.copy("{foo}1", "{foo}2", true)); -// assertEquals("bar1", jedis.get("{foo}2")); -// } -//} +package redis.clients.jedis.commands.unified.cluster; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static redis.clients.jedis.params.ScanParams.SCAN_POINTER_START; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import redis.clients.jedis.commands.unified.AllKindOfValuesCommandsTestBase; +import redis.clients.jedis.params.ScanParams; +import redis.clients.jedis.resps.ScanResult; + +public class ClusterAllKindOfValuesCommandsTest extends AllKindOfValuesCommandsTestBase { + + @Before + public void setUp() { + jedis = ClusterCommandsTestHelper.getCleanCluster(); + } + + @After + public void tearDown() { + jedis.close(); + ClusterCommandsTestHelper.clearClusterData(); + } + + @Test + @Override + public void existsMany() { + String status = jedis.set("{foo}1", "bar1"); + assertEquals("OK", status); + + status = jedis.set("{foo}2", "bar2"); + assertEquals("OK", status); + + assertEquals(2L, jedis.exists("{foo}1", "{foo}2")); + + assertEquals(1L, jedis.del("{foo}1")); + + assertEquals(1L, jedis.exists("{foo}1", "{foo}2")); + } + + @Test + @Override + public void del() { + jedis.set("{foo}1", "bar1"); + jedis.set("{foo}2", "bar2"); + jedis.set("{foo}3", "bar3"); + + assertEquals(3L, jedis.del("{foo}1", "{foo}2", "{foo}3")); + + assertFalse(jedis.exists("{foo}1")); + assertFalse(jedis.exists("{foo}2")); + assertFalse(jedis.exists("{foo}3")); + + jedis.set("{foo}1", "bar1"); + + assertEquals(1L, jedis.del("{foo}1", "{foo}2")); + + assertEquals(0L, jedis.del("{foo}1", "{foo}2")); + } + + @Test + @Override + public void unlink() { + jedis.set("{foo}1", "bar1"); + jedis.set("{foo}2", "bar2"); + jedis.set("{foo}3", "bar3"); + + assertEquals(3, jedis.unlink("{foo}1", "{foo}2", "{foo}3")); + + assertEquals(0, jedis.exists("{foo}1", "{foo}2", "{foo}3")); + + jedis.set("{foo}1", "bar1"); + + assertEquals(1, jedis.unlink("{foo}1", "{foo}2")); + + assertEquals(0, jedis.unlink("{foo}1", "{foo}2")); + + jedis.set("{foo}", "bar"); + assertEquals(1, jedis.unlink("{foo}")); + assertFalse(jedis.exists("{foo}")); + } + + @Test + @Override + public void keys() { + jedis.set("{foo}", "bar"); + jedis.set("{foo}bar", "bar"); + + Set keys = jedis.keys("{foo}*"); + Set expected = new HashSet<>(); + expected.add("{foo}"); + expected.add("{foo}bar"); + assertEquals(expected, keys); + + expected.clear(); + keys = jedis.keys("{bar}*"); + + assertEquals(expected, keys); + } + + @Test + @Override + public void rename() { + jedis.set("foo{#}", "bar"); + String status = jedis.rename("foo{#}", "bar{#}"); + assertEquals("OK", status); + + assertNull(jedis.get("foo{#}")); + + assertEquals("bar", jedis.get("bar{#}")); + } + + @Test + @Override + public void renamenx() { + jedis.set("foo{&}", "bar"); + assertEquals(1, jedis.renamenx("foo{&}", "bar{&}")); + + jedis.set("foo{&}", "bar"); + assertEquals(0, jedis.renamenx("foo{&}", "bar{&}")); + } + + @Test(expected = UnsupportedOperationException.class) + @Override + public void dbSize() { + super.dbSize(); + } + + @Test + @Override + public void touch() throws Exception { + assertEquals(0, jedis.touch("{foo}1", "{foo}2", "{foo}3")); + + jedis.set("{foo}1", "bar1"); + + Thread.sleep(1100); // little over 1 sec + assertTrue(jedis.objectIdletime("{foo}1") > 0); + + assertEquals(1, jedis.touch("{foo}1")); + assertEquals(0L, jedis.objectIdletime("{foo}1").longValue()); + + assertEquals(1, jedis.touch("{foo}1", "{foo}2", "{foo}3")); + + jedis.set("{foo}2", "bar2"); + + jedis.set("{foo}3", "bar3"); + + assertEquals(3, jedis.touch("{foo}1", "{foo}2", "{foo}3")); + } + + @Test + @Override + public void scan() { + jedis.set("{%}b", "b"); + jedis.set("a{%}", "a"); + + ScanResult result = jedis.scan(SCAN_POINTER_START, new ScanParams().match("*{%}*")); + + assertEquals(SCAN_POINTER_START, result.getCursor()); + assertFalse(result.getResult().isEmpty()); + } + + @Test + @Override + public void scanMatch() { + ScanParams params = new ScanParams(); + params.match("a{-}*"); + + jedis.set("b{-}", "b"); + jedis.set("a{-}", "a"); + jedis.set("a{-}a", "aa"); + ScanResult result = jedis.scan(SCAN_POINTER_START, params); + + assertEquals(SCAN_POINTER_START, result.getCursor()); + assertFalse(result.getResult().isEmpty()); + } + + @Test + @Override + public void scanCount() { + ScanParams params = new ScanParams(); + params.match("{a}*"); + params.count(2); + + for (int i = 0; i < 10; i++) { + jedis.set("{a}" + i, "a" + i); + } + + ScanResult result = jedis.scan(SCAN_POINTER_START, params); + assertTrue(result.getResult().size() >= 2); + } + + @Test + @Override + public void scanType() { + ScanParams noCount = new ScanParams().match("*{+}*"); + ScanParams pagingParams = new ScanParams().match("*{+}*").count(4); + + jedis.set("{+}a", "a"); + jedis.hset("{+}b", "b", "b"); + jedis.set("c{+}", "c"); + jedis.sadd("d{+}", "d"); + jedis.set("e{+}", "e"); + jedis.zadd("{+}f", 0d, "f"); + jedis.set("{+}g", "g"); + + // string + ScanResult scanResult; + + scanResult = jedis.scan(SCAN_POINTER_START, pagingParams, "string"); + assertFalse(scanResult.isCompleteIteration()); + int page1Count = scanResult.getResult().size(); + scanResult = jedis.scan(scanResult.getCursor(), pagingParams, "string"); + assertTrue(scanResult.isCompleteIteration()); + int page2Count = scanResult.getResult().size(); + assertEquals(4, page1Count + page2Count); + + + scanResult = jedis.scan(SCAN_POINTER_START, noCount, "hash"); + assertEquals(Collections.singletonList("{+}b"), scanResult.getResult()); + scanResult = jedis.scan(SCAN_POINTER_START, noCount, "set"); + assertEquals(Collections.singletonList("d{+}"), scanResult.getResult()); + scanResult = jedis.scan(SCAN_POINTER_START, noCount, "zset"); + assertEquals(Collections.singletonList("{+}f"), scanResult.getResult()); + } + + @Test(expected = IllegalArgumentException.class) + @Override + public void scanIsCompleteIteration() { + super.scanIsCompleteIteration(); + } + + @Test + @Override + public void copy() { + assertFalse(jedis.copy("unkn{o}wn", "f{o}o", false)); + + jedis.set("{foo}1", "bar"); + assertTrue(jedis.copy("{foo}1", "{foo}2", false)); + assertEquals("bar", jedis.get("{foo}2")); + + // replace + jedis.set("{foo}1", "bar1"); + assertTrue(jedis.copy("{foo}1", "{foo}2", true)); + assertEquals("bar1", jedis.get("{foo}2")); + } +} diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterBinaryValuesCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterBinaryValuesCommandsTest.java index 6dcbbd823b..8b70e29271 100644 --- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterBinaryValuesCommandsTest.java +++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterBinaryValuesCommandsTest.java @@ -1,45 +1,35 @@ -//package redis.clients.jedis.commands.unified.cluster; -// -//import org.junit.AfterClass; -//import org.junit.Before; -//import org.junit.BeforeClass; -//import org.junit.Ignore; -//import redis.clients.jedis.commands.unified.BinaryValuesCommandsTestBase; -// -//public class ClusterBinaryValuesCommandsTest extends BinaryValuesCommandsTestBase { -// -// @BeforeClass -// public static void prepare() throws InterruptedException { -// jedis = ClusterCommandsTestHelper.initAndGetCluster(); -// } -// -// @AfterClass -// public static void closeCluster() { -// jedis.close(); -// } -// -// @AfterClass -// public static void resetCluster() { -// ClusterCommandsTestHelper.tearClusterDown(); -// } -// -// @Before -// public void setUp() { -// ClusterCommandsTestHelper.clearClusterData(); -// } -// -// @Ignore -// @Override -// public void mget() { -// } -// -// @Ignore -// @Override -// public void mset() { -// } -// -// @Ignore -// @Override -// public void msetnx() { -// } -//} +package redis.clients.jedis.commands.unified.cluster; + +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import redis.clients.jedis.commands.unified.BinaryValuesCommandsTestBase; + +public class ClusterBinaryValuesCommandsTest extends BinaryValuesCommandsTestBase { + + @Before + public void setUp() { + jedis = ClusterCommandsTestHelper.getCleanCluster(); + } + + @After + public void tearDown() { + jedis.close(); + ClusterCommandsTestHelper.clearClusterData(); + } + + @Ignore + @Override + public void mget() { + } + + @Ignore + @Override + public void mset() { + } + + @Ignore + @Override + public void msetnx() { + } +} diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterBitCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterBitCommandsTest.java index 47804941fc..64f4f8376c 100644 --- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterBitCommandsTest.java +++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterBitCommandsTest.java @@ -1,78 +1,67 @@ -//package redis.clients.jedis.commands.unified.cluster; -// -//import static org.junit.Assert.assertEquals; -// -//import org.junit.AfterClass; -//import org.junit.Before; -//import org.junit.BeforeClass; -//import org.junit.Ignore; -//import org.junit.Test; -// -//import redis.clients.jedis.args.BitOP; -//import redis.clients.jedis.exceptions.JedisDataException; -//import redis.clients.jedis.commands.unified.BitCommandsTestBase; -// -//public class ClusterBitCommandsTest extends BitCommandsTestBase { -// -// @BeforeClass -// public static void prepare() throws InterruptedException { -// jedis = ClusterCommandsTestHelper.initAndGetCluster(); -// } -// -// @AfterClass -// public static void closeCluster() { -// jedis.close(); -// } -// -// @AfterClass -// public static void resetCluster() { -// ClusterCommandsTestHelper.tearClusterDown(); -// } -// -// @Before -// public void setUp() { -// ClusterCommandsTestHelper.clearClusterData(); -// } -// -// @Test -// @Override -// public void bitOp() { -// jedis.set("{key}1", "\u0060"); -// jedis.set("{key}2", "\u0044"); -// -// jedis.bitop(BitOP.AND, "resultAnd{key}", "{key}1", "{key}2"); -// String resultAnd = jedis.get("resultAnd{key}"); -// assertEquals("\u0040", resultAnd); -// -// jedis.bitop(BitOP.OR, "resultOr{key}", "{key}1", "{key}2"); -// String resultOr = jedis.get("resultOr{key}"); -// assertEquals("\u0064", resultOr); -// -// jedis.bitop(BitOP.XOR, "resultXor{key}", "{key}1", "{key}2"); -// String resultXor = jedis.get("resultXor{key}"); -// assertEquals("\u0024", resultXor); -// } -// -// @Test -// @Override -// public void bitOpNot() { -// jedis.setbit("key", 0, true); -// jedis.setbit("key", 4, true); -// -// jedis.bitop(BitOP.NOT, "resultNot{key}", "key"); -// String resultNot = jedis.get("resultNot{key}"); -// assertEquals("\u0077", resultNot); -// } -// -// @Ignore -// @Override -// public void bitOpBinary() { -// } -// -// @Test(expected = JedisDataException.class) -// @Override -// public void bitOpNotMultiSourceShouldFail() { -// jedis.bitop(BitOP.NOT, "{!}dest", "{!}src1", "{!}src2"); -// } -// -//} +package redis.clients.jedis.commands.unified.cluster; + +import static org.junit.Assert.assertEquals; + +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import redis.clients.jedis.args.BitOP; +import redis.clients.jedis.commands.unified.BitCommandsTestBase; +import redis.clients.jedis.exceptions.JedisDataException; + +public class ClusterBitCommandsTest extends BitCommandsTestBase { + + @Before + public void setUp() { + jedis = ClusterCommandsTestHelper.getCleanCluster(); + } + + @After + public void tearDown() { + jedis.close(); + ClusterCommandsTestHelper.clearClusterData(); + } + + @Test + @Override + public void bitOp() { + jedis.set("{key}1", "\u0060"); + jedis.set("{key}2", "\u0044"); + + jedis.bitop(BitOP.AND, "resultAnd{key}", "{key}1", "{key}2"); + String resultAnd = jedis.get("resultAnd{key}"); + assertEquals("\u0040", resultAnd); + + jedis.bitop(BitOP.OR, "resultOr{key}", "{key}1", "{key}2"); + String resultOr = jedis.get("resultOr{key}"); + assertEquals("\u0064", resultOr); + + jedis.bitop(BitOP.XOR, "resultXor{key}", "{key}1", "{key}2"); + String resultXor = jedis.get("resultXor{key}"); + assertEquals("\u0024", resultXor); + } + + @Test + @Override + public void bitOpNot() { + jedis.setbit("key", 0, true); + jedis.setbit("key", 4, true); + + jedis.bitop(BitOP.NOT, "resultNot{key}", "key"); + String resultNot = jedis.get("resultNot{key}"); + assertEquals("\u0077", resultNot); + } + + @Ignore + @Override + public void bitOpBinary() { + } + + @Test(expected = JedisDataException.class) + @Override + public void bitOpNotMultiSourceShouldFail() { + jedis.bitop(BitOP.NOT, "{!}dest", "{!}src1", "{!}src2"); + } + +} diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterCommandsTestHelper.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterCommandsTestHelper.java index e5dc2508f3..238f3044e2 100644 --- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterCommandsTestHelper.java +++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterCommandsTestHelper.java @@ -1,82 +1,28 @@ -//package redis.clients.jedis.commands.unified.cluster; -// -//import static redis.clients.jedis.Protocol.CLUSTER_HASHSLOTS; -// -//import java.util.Collections; -// -//import redis.clients.jedis.HostAndPort; -//import redis.clients.jedis.Jedis; -//import redis.clients.jedis.JedisCluster; -//import redis.clients.jedis.args.ClusterResetType; -//import redis.clients.jedis.HostAndPorts; -//import redis.clients.jedis.util.JedisClusterTestUtil; -// -//public class ClusterCommandsTestHelper { -// -// private static final HostAndPort nodeInfo1 = HostAndPorts.getClusterServers().get(0); -// private static final HostAndPort nodeInfo2 = HostAndPorts.getClusterServers().get(1); -// private static final HostAndPort nodeInfo3 = HostAndPorts.getClusterServers().get(2); -// -// private static Jedis node1; -// private static Jedis node2; -// private static Jedis node3; -// -// static JedisCluster initAndGetCluster() throws InterruptedException { -// -// node1 = new Jedis(nodeInfo1); -// node1.auth("cluster"); -// node1.flushAll(); -// -// node2 = new Jedis(nodeInfo2); -// node2.auth("cluster"); -// node2.flushAll(); -// -// node3 = new Jedis(nodeInfo3); -// node3.auth("cluster"); -// node3.flushAll(); -// -// // ---- configure cluster -// // add nodes to cluster -// node1.clusterMeet("127.0.0.1", nodeInfo2.getPort()); -// node1.clusterMeet("127.0.0.1", nodeInfo3.getPort()); -// -// // split available slots across the three nodes -// int slotsPerNode = CLUSTER_HASHSLOTS / 3; -// int[] node1Slots = new int[slotsPerNode]; -// int[] node2Slots = new int[slotsPerNode + 1]; -// int[] node3Slots = new int[slotsPerNode]; -// for (int i = 0, slot1 = 0, slot2 = 0, slot3 = 0; i < CLUSTER_HASHSLOTS; i++) { -// if (i < slotsPerNode) { -// node1Slots[slot1++] = i; -// } else if (i > slotsPerNode * 2) { -// node3Slots[slot3++] = i; -// } else { -// node2Slots[slot2++] = i; -// } -// } -// -// node1.clusterAddSlots(node1Slots); -// node2.clusterAddSlots(node2Slots); -// node3.clusterAddSlots(node3Slots); -// -// JedisClusterTestUtil.waitForClusterReady(node1, node2, node2); -// -// return new JedisCluster(Collections.singleton( -// new HostAndPort("127.0.0.1", nodeInfo1.getPort())), null, "cluster"); -// } -// -// static void tearClusterDown() { -// node1.flushDB(); -// node2.flushDB(); -// node3.flushDB(); -// node1.clusterReset(ClusterResetType.SOFT); -// node2.clusterReset(ClusterResetType.SOFT); -// node3.clusterReset(ClusterResetType.SOFT); -// } -// -// static void clearClusterData() { -// node1.flushDB(); -// node2.flushDB(); -// node3.flushDB(); -// } -//} +package redis.clients.jedis.commands.unified.cluster; + +import java.util.Collections; + +import redis.clients.jedis.DefaultJedisClientConfig; +import redis.clients.jedis.HostAndPorts; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisCluster; +import redis.clients.jedis.util.RedisProtocolUtil; + +public class ClusterCommandsTestHelper { + + static JedisCluster getCleanCluster() { + clearClusterData(); + return new JedisCluster( + Collections.singleton(HostAndPorts.getStableClusterServers().get(0)), + DefaultJedisClientConfig.builder().password("cluster").protocol(RedisProtocolUtil.getRedisProtocol()).build()); + } + + static void clearClusterData() { + for (int i = 0; i < 3; i++) { + try (Jedis jedis = new Jedis(HostAndPorts.getStableClusterServers().get(i))) { + jedis.auth("cluster"); + jedis.flushAll(); + } + } + } +} diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterGeoCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterGeoCommandsTest.java index 31a400b775..76ef6d1c73 100644 --- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterGeoCommandsTest.java +++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterGeoCommandsTest.java @@ -1,89 +1,88 @@ -//package redis.clients.jedis.commands.unified.cluster; -// -//import static org.junit.Assert.assertEquals; -// -//import java.util.ArrayList; -//import java.util.HashMap; -//import java.util.List; -//import java.util.Map; -// -//import org.junit.AfterClass; -//import org.junit.Before; -//import org.junit.BeforeClass; -//import org.junit.Ignore; -//import org.junit.Test; -// -//import redis.clients.jedis.GeoCoordinate; -//import redis.clients.jedis.args.GeoUnit; -//import redis.clients.jedis.params.GeoRadiusParam; -//import redis.clients.jedis.params.GeoRadiusStoreParam; -//import redis.clients.jedis.commands.unified.GeoCommandsTestBase; -// -//public class ClusterGeoCommandsTest extends GeoCommandsTestBase { -// -// @BeforeClass -// public static void prepare() throws InterruptedException { -// jedis = ClusterCommandsTestHelper.initAndGetCluster(); -// } -// -// @AfterClass -// public static void closeCluster() { -// jedis.close(); -// } -// -// @AfterClass -// public static void resetCluster() { -// ClusterCommandsTestHelper.tearClusterDown(); -// } -// -// @Before -// public void setUp() { -// ClusterCommandsTestHelper.clearClusterData(); -// } -// -// @Test -// @Override -// public void georadiusStore() { -// // prepare datas -// Map coordinateMap = new HashMap<>(); -// coordinateMap.put("Palermo", new GeoCoordinate(13.361389, 38.115556)); -// coordinateMap.put("Catania", new GeoCoordinate(15.087269, 37.502669)); -// jedis.geoadd("Sicily {ITA}", coordinateMap); -// -// long size = jedis.georadiusStore("Sicily {ITA}", 15, 37, 200, GeoUnit.KM, -// GeoRadiusParam.geoRadiusParam(), -// GeoRadiusStoreParam.geoRadiusStoreParam().store("{ITA} SicilyStore")); -// assertEquals(2, size); -// List expected = new ArrayList<>(); -// expected.add("Palermo"); -// expected.add("Catania"); -// assertEquals(expected, jedis.zrange("{ITA} SicilyStore", 0, -1)); -// } -// -// @Ignore -// @Override -// public void georadiusStoreBinary() { -// } -// -// @Test -// @Override -// public void georadiusByMemberStore() { -// jedis.geoadd("Sicily {ITA}", 13.583333, 37.316667, "Agrigento"); -// jedis.geoadd("Sicily {ITA}", 13.361389, 38.115556, "Palermo"); -// jedis.geoadd("Sicily {ITA}", 15.087269, 37.502669, "Catania"); -// -// long size = jedis.georadiusByMemberStore("Sicily {ITA}", "Agrigento", 100, GeoUnit.KM, -// GeoRadiusParam.geoRadiusParam(), -// GeoRadiusStoreParam.geoRadiusStoreParam().store("{ITA} SicilyStore")); -// assertEquals(2, size); -// List expected = new ArrayList<>(); -// expected.add("Agrigento"); -// expected.add("Palermo"); -// assertEquals(expected, jedis.zrange("{ITA} SicilyStore", 0, -1)); -// } -// -// @Ignore -// @Override -// public void georadiusByMemberStoreBinary() { -// } -//} +package redis.clients.jedis.commands.unified.cluster; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import redis.clients.jedis.GeoCoordinate; +import redis.clients.jedis.args.GeoUnit; +import redis.clients.jedis.commands.unified.GeoCommandsTestBase; +import redis.clients.jedis.params.GeoRadiusParam; +import redis.clients.jedis.params.GeoRadiusStoreParam; + +public class ClusterGeoCommandsTest extends GeoCommandsTestBase { + + @Before + public void setUp() { + jedis = ClusterCommandsTestHelper.getCleanCluster(); + } + + @After + public void tearDown() { + jedis.close(); + ClusterCommandsTestHelper.clearClusterData(); + } + + @Test + @Override + public void georadiusStore() { + // prepare datas + Map coordinateMap = new HashMap<>(); + coordinateMap.put("Palermo", new GeoCoordinate(13.361389, 38.115556)); + coordinateMap.put("Catania", new GeoCoordinate(15.087269, 37.502669)); + jedis.geoadd("Sicily {ITA}", coordinateMap); + + long size = jedis.georadiusStore("Sicily {ITA}", 15, 37, 200, GeoUnit.KM, + GeoRadiusParam.geoRadiusParam(), + GeoRadiusStoreParam.geoRadiusStoreParam().store("{ITA} SicilyStore")); + assertEquals(2, size); + List expected = new ArrayList<>(); + expected.add("Palermo"); + expected.add("Catania"); + assertEquals(expected, jedis.zrange("{ITA} SicilyStore", 0, -1)); + } + + @Ignore + @Override + public void georadiusStoreBinary() { + } + + @Test + @Override + public void georadiusByMemberStore() { + jedis.geoadd("Sicily {ITA}", 13.583333, 37.316667, "Agrigento"); + jedis.geoadd("Sicily {ITA}", 13.361389, 38.115556, "Palermo"); + jedis.geoadd("Sicily {ITA}", 15.087269, 37.502669, "Catania"); + + long size = jedis.georadiusByMemberStore("Sicily {ITA}", "Agrigento", 100, GeoUnit.KM, + GeoRadiusParam.geoRadiusParam(), + GeoRadiusStoreParam.geoRadiusStoreParam().store("{ITA} SicilyStore")); + assertEquals(2, size); + List expected = new ArrayList<>(); + expected.add("Agrigento"); + expected.add("Palermo"); + assertEquals(expected, jedis.zrange("{ITA} SicilyStore", 0, -1)); + } + + @Ignore + @Override + public void georadiusByMemberStoreBinary() { + } + + @Test + @Ignore + public void geosearchstore() { + } + + @Test + @Ignore + public void geosearchstoreWithdist() { + } +} diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterHyperLogLogCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterHyperLogLogCommandsTest.java index 911e40396d..49da95e026 100644 --- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterHyperLogLogCommandsTest.java +++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterHyperLogLogCommandsTest.java @@ -1,78 +1,68 @@ -//package redis.clients.jedis.commands.unified.cluster; -// -//import static org.junit.Assert.assertEquals; -// -//import org.junit.AfterClass; -//import org.junit.Before; -//import org.junit.BeforeClass; -//import org.junit.Ignore; -//import org.junit.Test; -//import redis.clients.jedis.commands.unified.HyperLogLogCommandsTestBase; -// -//public class ClusterHyperLogLogCommandsTest extends HyperLogLogCommandsTestBase { -// -// @BeforeClass -// public static void prepare() throws InterruptedException { -// jedis = ClusterCommandsTestHelper.initAndGetCluster(); -// } -// -// @AfterClass -// public static void closeCluster() { -// jedis.close(); -// } -// -// @AfterClass -// public static void resetCluster() { -// ClusterCommandsTestHelper.tearClusterDown(); -// } -// -// @Before -// public void setUp() { -// ClusterCommandsTestHelper.clearClusterData(); -// } -// -// @Test -// @Override -// public void pfcounts() { -// long status = jedis.pfadd("{hll}_1", "foo", "bar", "zap"); -// assertEquals(1, status); -// status = jedis.pfadd("{hll}_2", "foo", "bar", "zap"); -// assertEquals(1, status); -// -// status = jedis.pfadd("{hll}_3", "foo", "bar", "baz"); -// assertEquals(1, status); -// status = jedis.pfcount("{hll}_1"); -// assertEquals(3, status); -// status = jedis.pfcount("{hll}_2"); -// assertEquals(3, status); -// status = jedis.pfcount("{hll}_3"); -// assertEquals(3, status); -// -// status = jedis.pfcount("{hll}_1", "{hll}_2"); -// assertEquals(3, status); -// -// status = jedis.pfcount("{hll}_1", "{hll}_2", "{hll}_3"); -// assertEquals(4, status); -// } -// -// @Test -// @Override -// public void pfmerge() { -// long status = jedis.pfadd("{hll}1", "foo", "bar", "zap", "a"); -// assertEquals(1, status); -// -// status = jedis.pfadd("{hll}2", "a", "b", "c", "foo"); -// assertEquals(1, status); -// -// String mergeStatus = jedis.pfmerge("{hll}3", "{hll}1", "{hll}2"); -// assertEquals("OK", mergeStatus); -// -// status = jedis.pfcount("{hll}3"); -// assertEquals(6, status); -// } -// -// @Ignore -// @Override -// public void pfmergeBinary() { -// } -//} +package redis.clients.jedis.commands.unified.cluster; + +import static org.junit.Assert.assertEquals; + +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import redis.clients.jedis.commands.unified.HyperLogLogCommandsTestBase; + +public class ClusterHyperLogLogCommandsTest extends HyperLogLogCommandsTestBase { + + @Before + public void setUp() { + jedis = ClusterCommandsTestHelper.getCleanCluster(); + } + + @After + public void tearDown() { + jedis.close(); + ClusterCommandsTestHelper.clearClusterData(); + } + + @Test + @Override + public void pfcounts() { + long status = jedis.pfadd("{hll}_1", "foo", "bar", "zap"); + assertEquals(1, status); + status = jedis.pfadd("{hll}_2", "foo", "bar", "zap"); + assertEquals(1, status); + + status = jedis.pfadd("{hll}_3", "foo", "bar", "baz"); + assertEquals(1, status); + status = jedis.pfcount("{hll}_1"); + assertEquals(3, status); + status = jedis.pfcount("{hll}_2"); + assertEquals(3, status); + status = jedis.pfcount("{hll}_3"); + assertEquals(3, status); + + status = jedis.pfcount("{hll}_1", "{hll}_2"); + assertEquals(3, status); + + status = jedis.pfcount("{hll}_1", "{hll}_2", "{hll}_3"); + assertEquals(4, status); + } + + @Test + @Override + public void pfmerge() { + long status = jedis.pfadd("{hll}1", "foo", "bar", "zap", "a"); + assertEquals(1, status); + + status = jedis.pfadd("{hll}2", "a", "b", "c", "foo"); + assertEquals(1, status); + + String mergeStatus = jedis.pfmerge("{hll}3", "{hll}1", "{hll}2"); + assertEquals("OK", mergeStatus); + + status = jedis.pfcount("{hll}3"); + assertEquals(6, status); + } + + @Ignore + @Override + public void pfmergeBinary() { + } +} diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterListCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterListCommandsTest.java index 4560a85be4..10af17a110 100644 --- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterListCommandsTest.java +++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterListCommandsTest.java @@ -1,266 +1,302 @@ -//package redis.clients.jedis.commands.unified.cluster; -// -//import static org.junit.Assert.assertArrayEquals; -//import static org.junit.Assert.assertEquals; -//import static org.junit.Assert.assertNotNull; -//import static org.junit.Assert.assertNull; -// -//import java.util.ArrayList; -//import java.util.Arrays; -//import java.util.Collections; -//import java.util.List; -// -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -// -//import org.junit.AfterClass; -//import org.junit.Before; -//import org.junit.BeforeClass; -//import org.junit.Test; -// -//import redis.clients.jedis.args.ListDirection; -//import redis.clients.jedis.resps.KeyedListElement; -//import redis.clients.jedis.commands.unified.ListCommandsTestBase; -// -//public class ClusterListCommandsTest extends ListCommandsTestBase { -// -// private final Logger logger = LoggerFactory.getLogger(getClass()); -// -// @BeforeClass -// public static void prepare() throws InterruptedException { -// jedis = ClusterCommandsTestHelper.initAndGetCluster(); -// } -// -// @AfterClass -// public static void closeCluster() { -// jedis.close(); -// } -// -// @AfterClass -// public static void resetCluster() { -// ClusterCommandsTestHelper.tearClusterDown(); -// } -// -// @Before -// public void setUp() { -// ClusterCommandsTestHelper.clearClusterData(); -// } -// -// @Test -// @Override -// public void rpoplpush() { -// jedis.rpush("foo{|}", "a"); -// jedis.rpush("foo{|}", "b"); -// jedis.rpush("foo{|}", "c"); -// -// jedis.rpush("dst{|}", "foo"); -// jedis.rpush("dst{|}", "bar"); -// -// String element = jedis.rpoplpush("foo{|}", "dst{|}"); -// -// assertEquals("c", element); -// -// List srcExpected = new ArrayList<>(); -// srcExpected.add("a"); -// srcExpected.add("b"); -// -// List dstExpected = new ArrayList<>(); -// dstExpected.add("c"); -// dstExpected.add("foo"); -// dstExpected.add("bar"); -// -// assertEquals(srcExpected, jedis.lrange("foo{|}", 0, 1000)); -// assertEquals(dstExpected, jedis.lrange("dst{|}", 0, 1000)); -// } -// -// @Test -// @Override -// public void blpop() throws InterruptedException { -// List result = jedis.blpop(1, "foo"); -// assertNull(result); -// -// jedis.lpush("foo", "bar"); -// result = jedis.blpop(1, "foo"); -// -// assertNotNull(result); -// assertEquals(2, result.size()); -// assertEquals("foo", result.get(0)); -// assertEquals("bar", result.get(1)); -// -// // Multi keys -// result = jedis.blpop(1, "{foo}", "{foo}1"); -// assertNull(result); -// -// jedis.lpush("{foo}", "bar"); -// jedis.lpush("{foo}1", "bar1"); -// result = jedis.blpop(1, "{foo}1", "{foo}"); -// -// assertNotNull(result); -// assertEquals(2, result.size()); -// assertEquals("{foo}1", result.get(0)); -// assertEquals("bar1", result.get(1)); -// -// // Binary -// jedis.lpush(bfoo, bbar); -// List bresult = jedis.blpop(1, bfoo); -// -// assertNotNull(bresult); -// assertEquals(2, bresult.size()); -// assertArrayEquals(bfoo, bresult.get(0)); -// assertArrayEquals(bbar, bresult.get(1)); -// } -// -// @Test -// @Override -// public void blpopDouble() throws InterruptedException { -// KeyedListElement result = jedis.blpop(0.1, "foo"); -// assertNull(result); -// -// jedis.lpush("foo", "bar"); -// result = jedis.blpop(3.2, "foo"); -// -// assertNotNull(result); -// assertEquals("foo", result.getKey()); -// assertEquals("bar", result.getElement()); -// -// // Multi keys -// result = jedis.blpop(0.18, "{foo}", "{foo}1"); -// assertNull(result); -// -// jedis.lpush("{foo}", "bar"); -// jedis.lpush("{foo}1", "bar1"); -// result = jedis.blpop(1d, "{foo}1", "{foo}"); -// -// assertNotNull(result); -// assertEquals("{foo}1", result.getKey()); -// assertEquals("bar1", result.getElement()); -// -// // Binary -// jedis.lpush(bfoo, bbar); -// List bresult = jedis.blpop(3.12, bfoo); -// -// assertNotNull(bresult); -// assertEquals(2, bresult.size()); -// assertArrayEquals(bfoo, bresult.get(0)); -// assertArrayEquals(bbar, bresult.get(1)); -// } -// -// @Test -// @Override -// public void brpop() throws InterruptedException { -// List result = jedis.brpop(1, "foo"); -// assertNull(result); -// -// jedis.lpush("foo", "bar"); -// result = jedis.brpop(1, "foo"); -// assertNotNull(result); -// assertEquals(2, result.size()); -// assertEquals("foo", result.get(0)); -// assertEquals("bar", result.get(1)); -// -// // Multi keys -// result = jedis.brpop(1, "{foo}", "{foo}1"); -// assertNull(result); -// -// jedis.lpush("{foo}", "bar"); -// jedis.lpush("{foo}1", "bar1"); -// result = jedis.brpop(1, "{foo}1", "{foo}"); -// -// assertNotNull(result); -// assertEquals(2, result.size()); -// assertEquals("{foo}1", result.get(0)); -// assertEquals("bar1", result.get(1)); -// -// // Binary -// jedis.lpush(bfoo, bbar); -// List bresult = jedis.brpop(1, bfoo); -// assertNotNull(bresult); -// assertEquals(2, bresult.size()); -// assertArrayEquals(bfoo, bresult.get(0)); -// assertArrayEquals(bbar, bresult.get(1)); -// } -// -// @Test -// @Override -// public void brpopDouble() throws InterruptedException { -// KeyedListElement result = jedis.brpop(0.1, "foo"); -// assertNull(result); -// -// jedis.lpush("foo", "bar"); -// result = jedis.brpop(3.2, "foo"); -// -// assertNotNull(result); -// assertEquals("foo", result.getKey()); -// assertEquals("bar", result.getElement()); -// -// // Multi keys -// result = jedis.brpop(0.18, "{foo}", "{foo}1"); -// assertNull(result); -// -// jedis.lpush("{foo}", "bar"); -// jedis.lpush("{foo}1", "bar1"); -// result = jedis.brpop(1d, "{foo}1", "{foo}"); -// -// assertNotNull(result); -// assertEquals("{foo}1", result.getKey()); -// assertEquals("bar1", result.getElement()); -// -// // Binary -// jedis.lpush(bfoo, bbar); -// List bresult = jedis.brpop(3.12, bfoo); -// -// assertNotNull(bresult); -// assertEquals(2, bresult.size()); -// assertArrayEquals(bfoo, bresult.get(0)); -// assertArrayEquals(bbar, bresult.get(1)); -// } -// -// @Test -// @Override -// public void brpoplpush() { -// -// new Thread(new Runnable() { -// @Override -// public void run() { -// try { -// Thread.sleep(100); -// } catch (InterruptedException e) { -// logger.error("", e); -// } -// jedis.lpush("foo{|}", "a"); -// } -// }).start(); -// -// String element = jedis.brpoplpush("foo{|}", "bar{|}", 0); -// -// assertEquals("a", element); -// assertEquals(1, jedis.llen("bar{|}")); -// assertEquals("a", jedis.lrange("bar{|}", 0, -1).get(0)); -// } -// -// @Test -// @Override -// public void lmove() { -// jedis.rpush("{|}foo", "bar1", "bar2", "bar3"); -// assertEquals("bar3", jedis.lmove("{|}foo", "{|}bar", ListDirection.RIGHT, ListDirection.LEFT)); -// assertEquals(Collections.singletonList("bar3"), jedis.lrange("{|}bar", 0, -1)); -// assertEquals(Arrays.asList("bar1", "bar2"), jedis.lrange("{|}foo", 0, -1)); -// } -// -// @Test -// @Override -// public void blmove() { -// new Thread(() -> { -// try { -// Thread.sleep(100); -// } catch (InterruptedException e) { -// logger.error("", e); -// } -// jedis.rpush("{|}foo", "bar1", "bar2", "bar3"); -// }).start(); -// -// assertEquals("bar3", jedis.blmove("{|}foo", "{|}bar", ListDirection.RIGHT, ListDirection.LEFT, 0)); -// assertEquals(Collections.singletonList("bar3"), jedis.lrange("{|}bar", 0, -1)); -// assertEquals(Arrays.asList("bar1", "bar2"), jedis.lrange("{|}foo", 0, -1)); -// } -//} +package redis.clients.jedis.commands.unified.cluster; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import redis.clients.jedis.args.ListDirection; +import redis.clients.jedis.commands.unified.ListCommandsTestBase; +import redis.clients.jedis.util.KeyValue; + +public class ClusterListCommandsTest extends ListCommandsTestBase { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + @Before + public void setUp() { + jedis = ClusterCommandsTestHelper.getCleanCluster(); + } + + @After + public void tearDown() { + jedis.close(); + ClusterCommandsTestHelper.clearClusterData(); + } + + @Test + @Override + public void rpoplpush() { + jedis.rpush("foo{|}", "a"); + jedis.rpush("foo{|}", "b"); + jedis.rpush("foo{|}", "c"); + + jedis.rpush("dst{|}", "foo"); + jedis.rpush("dst{|}", "bar"); + + String element = jedis.rpoplpush("foo{|}", "dst{|}"); + + assertEquals("c", element); + + List srcExpected = new ArrayList<>(); + srcExpected.add("a"); + srcExpected.add("b"); + + List dstExpected = new ArrayList<>(); + dstExpected.add("c"); + dstExpected.add("foo"); + dstExpected.add("bar"); + + assertEquals(srcExpected, jedis.lrange("foo{|}", 0, 1000)); + assertEquals(dstExpected, jedis.lrange("dst{|}", 0, 1000)); + } + + @Test + @Override + public void blpop() throws InterruptedException { + List result = jedis.blpop(1, "foo"); + assertNull(result); + + jedis.lpush("foo", "bar"); + result = jedis.blpop(1, "foo"); + + assertNotNull(result); + assertEquals(2, result.size()); + assertEquals("foo", result.get(0)); + assertEquals("bar", result.get(1)); + + // Multi keys + result = jedis.blpop(1, "{foo}", "{foo}1"); + assertNull(result); + + jedis.lpush("{foo}", "bar"); + jedis.lpush("{foo}1", "bar1"); + result = jedis.blpop(1, "{foo}1", "{foo}"); + + assertNotNull(result); + assertEquals(2, result.size()); + assertEquals("{foo}1", result.get(0)); + assertEquals("bar1", result.get(1)); + + // Binary + jedis.lpush(bfoo, bbar); + List bresult = jedis.blpop(1, bfoo); + + assertNotNull(bresult); + assertEquals(2, bresult.size()); + assertArrayEquals(bfoo, bresult.get(0)); + assertArrayEquals(bbar, bresult.get(1)); + } + + @Test + @Override + public void blpopDouble() throws InterruptedException { + KeyValue result = jedis.blpop(0.1, "foo"); + assertNull(result); + + jedis.lpush("foo", "bar"); + result = jedis.blpop(3.2, "foo"); + + assertNotNull(result); + assertEquals("foo", result.getKey()); + assertEquals("bar", result.getValue()); + + // Multi keys + result = jedis.blpop(0.18, "{foo}", "{foo}1"); + assertNull(result); + + jedis.lpush("{foo}", "bar"); + jedis.lpush("{foo}1", "bar1"); + result = jedis.blpop(1d, "{foo}1", "{foo}"); + + assertNotNull(result); + assertEquals("{foo}1", result.getKey()); + assertEquals("bar1", result.getValue()); + + // Binary + jedis.lpush(bfoo, bbar); + KeyValue bresult = jedis.blpop(3.12, bfoo); + + assertNotNull(bresult); + assertArrayEquals(bfoo, bresult.getKey()); + assertArrayEquals(bbar, bresult.getValue()); + } + + @Test + @Override + public void brpop() throws InterruptedException { + List result = jedis.brpop(1, "foo"); + assertNull(result); + + jedis.lpush("foo", "bar"); + result = jedis.brpop(1, "foo"); + assertNotNull(result); + assertEquals(2, result.size()); + assertEquals("foo", result.get(0)); + assertEquals("bar", result.get(1)); + + // Multi keys + result = jedis.brpop(1, "{foo}", "{foo}1"); + assertNull(result); + + jedis.lpush("{foo}", "bar"); + jedis.lpush("{foo}1", "bar1"); + result = jedis.brpop(1, "{foo}1", "{foo}"); + + assertNotNull(result); + assertEquals(2, result.size()); + assertEquals("{foo}1", result.get(0)); + assertEquals("bar1", result.get(1)); + + // Binary + jedis.lpush(bfoo, bbar); + List bresult = jedis.brpop(1, bfoo); + assertNotNull(bresult); + assertEquals(2, bresult.size()); + assertArrayEquals(bfoo, bresult.get(0)); + assertArrayEquals(bbar, bresult.get(1)); + } + + @Test + @Override + public void brpopDouble() throws InterruptedException { + KeyValue result = jedis.brpop(0.1, "foo"); + assertNull(result); + + jedis.lpush("foo", "bar"); + result = jedis.brpop(3.2, "foo"); + + assertNotNull(result); + assertEquals("foo", result.getKey()); + assertEquals("bar", result.getValue()); + + // Multi keys + result = jedis.brpop(0.18, "{foo}", "{foo}1"); + assertNull(result); + + jedis.lpush("{foo}", "bar"); + jedis.lpush("{foo}1", "bar1"); + result = jedis.brpop(1d, "{foo}1", "{foo}"); + + assertNotNull(result); + assertEquals("{foo}1", result.getKey()); + assertEquals("bar1", result.getValue()); + + // Binary + jedis.lpush(bfoo, bbar); + KeyValue bresult = jedis.brpop(3.12, bfoo); + + assertNotNull(bresult); + assertArrayEquals(bfoo, bresult.getKey()); + assertArrayEquals(bbar, bresult.getValue()); + } + + @Test + @Override + public void brpoplpush() { + + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + logger.error("", e); + } + jedis.lpush("foo{|}", "a"); + } + }).start(); + + String element = jedis.brpoplpush("foo{|}", "bar{|}", 0); + + assertEquals("a", element); + assertEquals(1, jedis.llen("bar{|}")); + assertEquals("a", jedis.lrange("bar{|}", 0, -1).get(0)); + } + + @Test + @Override + public void lmove() { + jedis.rpush("{|}foo", "bar1", "bar2", "bar3"); + assertEquals("bar3", jedis.lmove("{|}foo", "{|}bar", ListDirection.RIGHT, ListDirection.LEFT)); + assertEquals(Collections.singletonList("bar3"), jedis.lrange("{|}bar", 0, -1)); + assertEquals(Arrays.asList("bar1", "bar2"), jedis.lrange("{|}foo", 0, -1)); + } + + @Test + @Override + public void blmove() { + new Thread(() -> { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + logger.error("", e); + } + jedis.rpush("{|}foo", "bar1", "bar2", "bar3"); + }).start(); + + assertEquals("bar3", jedis.blmove("{|}foo", "{|}bar", ListDirection.RIGHT, ListDirection.LEFT, 0)); + assertEquals(Collections.singletonList("bar3"), jedis.lrange("{|}bar", 0, -1)); + assertEquals(Arrays.asList("bar1", "bar2"), jedis.lrange("{|}foo", 0, -1)); + } + + @Test + public void lmpop() { + String mylist1 = "mylist1{.}"; + String mylist2 = "mylist2{.}"; + + // add elements to list + jedis.lpush(mylist1, "one", "two", "three", "four", "five"); + jedis.lpush(mylist2, "one", "two", "three", "four", "five"); + + KeyValue> elements = jedis.lmpop(ListDirection.LEFT, mylist1, mylist2); + assertEquals(mylist1, elements.getKey()); + assertEquals(1, elements.getValue().size()); + + elements = jedis.lmpop(ListDirection.LEFT, 5, mylist1, mylist2); + assertEquals(mylist1, elements.getKey()); + assertEquals(4, elements.getValue().size()); + + elements = jedis.lmpop(ListDirection.RIGHT, 100, mylist1, mylist2); + assertEquals(mylist2, elements.getKey()); + assertEquals(5, elements.getValue().size()); + + elements = jedis.lmpop(ListDirection.RIGHT, mylist1, mylist2); + assertNull(elements); + } + + @Test + public void blmpopSimple() { + String mylist1 = "mylist1{.}"; + String mylist2 = "mylist2{.}"; + + // add elements to list + jedis.lpush(mylist1, "one", "two", "three", "four", "five"); + jedis.lpush(mylist2, "one", "two", "three", "four", "five"); + + KeyValue> elements = jedis.blmpop(1L, ListDirection.LEFT, mylist1, mylist2); + assertEquals(mylist1, elements.getKey()); + assertEquals(1, elements.getValue().size()); + + elements = jedis.blmpop(1L, ListDirection.LEFT, 5, mylist1, mylist2); + assertEquals(mylist1, elements.getKey()); + assertEquals(4, elements.getValue().size()); + + elements = jedis.blmpop(1L, ListDirection.RIGHT, 100, mylist1, mylist2); + assertEquals(mylist2, elements.getKey()); + assertEquals(5, elements.getValue().size()); + + elements = jedis.blmpop(1L, ListDirection.RIGHT, mylist1, mylist2); + assertNull(elements); + } +} diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterSetCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterSetCommandsTest.java index 80a21dedb8..cd0bc2234f 100644 --- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterSetCommandsTest.java +++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterSetCommandsTest.java @@ -1,175 +1,200 @@ -//package redis.clients.jedis.commands.unified.cluster; -// -//import static org.junit.Assert.assertEquals; -// -//import java.util.HashSet; -//import java.util.Set; -//import org.junit.AfterClass; -//import org.junit.Before; -//import org.junit.BeforeClass; -//import org.junit.Test; -//import redis.clients.jedis.commands.unified.SetCommandsTestBase; -// -//public class ClusterSetCommandsTest extends SetCommandsTestBase { -// -// @BeforeClass -// public static void prepare() throws InterruptedException { -// jedis = ClusterCommandsTestHelper.initAndGetCluster(); -// } -// -// @AfterClass -// public static void closeCluster() { -// jedis.close(); -// } -// -// @AfterClass -// public static void resetCluster() { -// ClusterCommandsTestHelper.tearClusterDown(); -// } -// -// @Before -// public void setUp() { -// ClusterCommandsTestHelper.clearClusterData(); -// } -// -// @Test -// @Override -// public void smove() { -// jedis.sadd("{.}foo", "a"); -// jedis.sadd("{.}foo", "b"); -// -// jedis.sadd("{.}bar", "c"); -// -// long status = jedis.smove("{.}foo", "{.}bar", "a"); -// assertEquals(status, 1); -// -// Set expectedSrc = new HashSet<>(); -// expectedSrc.add("b"); -// -// Set expectedDst = new HashSet<>(); -// expectedDst.add("c"); -// expectedDst.add("a"); -// -// assertEquals(expectedSrc, jedis.smembers("{.}foo")); -// assertEquals(expectedDst, jedis.smembers("{.}bar")); -// -// status = jedis.smove("{.}foo", "{.}bar", "a"); -// assertEquals(status, 0); -// } -// -// @Test -// @Override -// public void sinter() { -// jedis.sadd("foo{.}", "a"); -// jedis.sadd("foo{.}", "b"); -// -// jedis.sadd("bar{.}", "b"); -// jedis.sadd("bar{.}", "c"); -// -// Set expected = new HashSet<>(); -// expected.add("b"); -// -// Set intersection = jedis.sinter("foo{.}", "bar{.}"); -// assertEquals(expected, intersection); -// } -// -// @Test -// @Override -// public void sinterstore() { -// jedis.sadd("foo{.}", "a"); -// jedis.sadd("foo{.}", "b"); -// -// jedis.sadd("bar{.}", "b"); -// jedis.sadd("bar{.}", "c"); -// -// Set expected = new HashSet<>(); -// expected.add("b"); -// -// long status = jedis.sinterstore("car{.}", "foo{.}", "bar{.}"); -// assertEquals(1, status); -// -// assertEquals(expected, jedis.smembers("car{.}")); -// } -// -// @Test -// @Override -// public void sunion() { -// jedis.sadd("{.}foo", "a"); -// jedis.sadd("{.}foo", "b"); -// -// jedis.sadd("{.}bar", "b"); -// jedis.sadd("{.}bar", "c"); -// -// Set expected = new HashSet<>(); -// expected.add("a"); -// expected.add("b"); -// expected.add("c"); -// -// Set union = jedis.sunion("{.}foo", "{.}bar"); -// assertEquals(expected, union); -// } -// -// @Test -// @Override -// public void sunionstore() { -// jedis.sadd("{.}foo", "a"); -// jedis.sadd("{.}foo", "b"); -// -// jedis.sadd("{.}bar", "b"); -// jedis.sadd("{.}bar", "c"); -// -// Set expected = new HashSet<>(); -// expected.add("a"); -// expected.add("b"); -// expected.add("c"); -// -// long status = jedis.sunionstore("{.}car", "{.}foo", "{.}bar"); -// assertEquals(3, status); -// -// assertEquals(expected, jedis.smembers("{.}car")); -// } -// -// @Test -// @Override -// public void sdiff() { -// jedis.sadd("foo{.}", "x"); -// jedis.sadd("foo{.}", "a"); -// jedis.sadd("foo{.}", "b"); -// jedis.sadd("foo{.}", "c"); -// -// jedis.sadd("bar{.}", "c"); -// -// jedis.sadd("car{.}", "a"); -// jedis.sadd("car{.}", "d"); -// -// Set expected = new HashSet<>(); -// expected.add("x"); -// expected.add("b"); -// -// Set diff = jedis.sdiff("foo{.}", "bar{.}", "car{.}"); -// assertEquals(expected, diff); -// } -// -// @Test -// @Override -// public void sdiffstore() { -// jedis.sadd("foo{.}", "x"); -// jedis.sadd("foo{.}", "a"); -// jedis.sadd("foo{.}", "b"); -// jedis.sadd("foo{.}", "c"); -// -// jedis.sadd("bar{.}", "c"); -// -// jedis.sadd("car{.}", "a"); -// jedis.sadd("car{.}", "d"); -// -// Set expected = new HashSet<>(); -// expected.add("x"); -// expected.add("b"); -// -// long status = jedis.sdiffstore("tar{.}", "foo{.}", "bar{.}", "car{.}"); -// assertEquals(2, status); -// assertEquals(expected, jedis.smembers("tar{.}")); -// } -// -//} +package redis.clients.jedis.commands.unified.cluster; + +import static org.junit.Assert.assertEquals; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import redis.clients.jedis.commands.unified.SetCommandsTestBase; + +public class ClusterSetCommandsTest extends SetCommandsTestBase { + + final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; + final byte[] bfoo_same_hashslot = { 0x01, 0x02, 0x03, 0x04, 0x03, 0x00, 0x03, 0x1b }; + final byte[] ba = { 0x0A }; + final byte[] bb = { 0x0B }; + final byte[] bc = { 0x0C }; + + @Before + public void setUp() { + jedis = ClusterCommandsTestHelper.getCleanCluster(); + } + + @After + public void tearDown() { + jedis.close(); + ClusterCommandsTestHelper.clearClusterData(); + } + + @Test + @Override + public void smove() { + jedis.sadd("{.}foo", "a"); + jedis.sadd("{.}foo", "b"); + + jedis.sadd("{.}bar", "c"); + + long status = jedis.smove("{.}foo", "{.}bar", "a"); + assertEquals(status, 1); + + Set expectedSrc = new HashSet<>(); + expectedSrc.add("b"); + + Set expectedDst = new HashSet<>(); + expectedDst.add("c"); + expectedDst.add("a"); + + assertEquals(expectedSrc, jedis.smembers("{.}foo")); + assertEquals(expectedDst, jedis.smembers("{.}bar")); + + status = jedis.smove("{.}foo", "{.}bar", "a"); + assertEquals(status, 0); + } + + @Test + @Override + public void sinter() { + jedis.sadd("foo{.}", "a"); + jedis.sadd("foo{.}", "b"); + + jedis.sadd("bar{.}", "b"); + jedis.sadd("bar{.}", "c"); + + Set expected = new HashSet<>(); + expected.add("b"); + + Set intersection = jedis.sinter("foo{.}", "bar{.}"); + assertEquals(expected, intersection); + } + + @Test + @Override + public void sinterstore() { + jedis.sadd("foo{.}", "a"); + jedis.sadd("foo{.}", "b"); + + jedis.sadd("bar{.}", "b"); + jedis.sadd("bar{.}", "c"); + + Set expected = new HashSet<>(); + expected.add("b"); + + long status = jedis.sinterstore("car{.}", "foo{.}", "bar{.}"); + assertEquals(1, status); + + assertEquals(expected, jedis.smembers("car{.}")); + } + + @Test + @Override + public void sunion() { + jedis.sadd("{.}foo", "a"); + jedis.sadd("{.}foo", "b"); + + jedis.sadd("{.}bar", "b"); + jedis.sadd("{.}bar", "c"); + + Set expected = new HashSet<>(); + expected.add("a"); + expected.add("b"); + expected.add("c"); + + Set union = jedis.sunion("{.}foo", "{.}bar"); + assertEquals(expected, union); + } + + @Test + @Override + public void sunionstore() { + jedis.sadd("{.}foo", "a"); + jedis.sadd("{.}foo", "b"); + + jedis.sadd("{.}bar", "b"); + jedis.sadd("{.}bar", "c"); + + Set expected = new HashSet<>(); + expected.add("a"); + expected.add("b"); + expected.add("c"); + + long status = jedis.sunionstore("{.}car", "{.}foo", "{.}bar"); + assertEquals(3, status); + + assertEquals(expected, jedis.smembers("{.}car")); + } + + @Test + @Override + public void sdiff() { + jedis.sadd("foo{.}", "x"); + jedis.sadd("foo{.}", "a"); + jedis.sadd("foo{.}", "b"); + jedis.sadd("foo{.}", "c"); + + jedis.sadd("bar{.}", "c"); + + jedis.sadd("car{.}", "a"); + jedis.sadd("car{.}", "d"); + + Set expected = new HashSet<>(); + expected.add("x"); + expected.add("b"); + + Set diff = jedis.sdiff("foo{.}", "bar{.}", "car{.}"); + assertEquals(expected, diff); + } + + @Test + @Override + public void sdiffstore() { + jedis.sadd("foo{.}", "x"); + jedis.sadd("foo{.}", "a"); + jedis.sadd("foo{.}", "b"); + jedis.sadd("foo{.}", "c"); + + jedis.sadd("bar{.}", "c"); + + jedis.sadd("car{.}", "a"); + jedis.sadd("car{.}", "d"); + + Set expected = new HashSet<>(); + expected.add("x"); + expected.add("b"); + + long status = jedis.sdiffstore("tar{.}", "foo{.}", "bar{.}", "car{.}"); + assertEquals(2, status); + assertEquals(expected, jedis.smembers("tar{.}")); + } + + @Test + public void sintercard() { + jedis.sadd("foo{.}", "a"); + jedis.sadd("foo{.}", "b"); + + jedis.sadd("bar{.}", "a"); + jedis.sadd("bar{.}", "b"); + jedis.sadd("bar{.}", "c"); + + long card = jedis.sintercard("foo{.}", "bar{.}"); + assertEquals(2, card); + long limitedCard = jedis.sintercard(1, "foo{.}", "bar{.}"); + assertEquals(1, limitedCard); + + // Binary + jedis.sadd(bfoo, ba); + jedis.sadd(bfoo, bb); + + jedis.sadd(bfoo_same_hashslot, ba); + jedis.sadd(bfoo_same_hashslot, bb); + jedis.sadd(bfoo_same_hashslot, bc); + + long bcard = jedis.sintercard(bfoo, bfoo_same_hashslot); + assertEquals(2, bcard); + long blimitedCard = jedis.sintercard(1, bfoo, bfoo_same_hashslot); + assertEquals(1, blimitedCard); + } + +} diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterSortedSetCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterSortedSetCommandsTest.java index 589c735959..84748693f3 100644 --- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterSortedSetCommandsTest.java +++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterSortedSetCommandsTest.java @@ -1,190 +1,243 @@ -//package redis.clients.jedis.commands.unified.cluster; -// -//import static org.junit.Assert.assertEquals; -// -//import java.util.ArrayList; -//import java.util.Collections; -//import java.util.LinkedHashSet; -//import java.util.List; -//import java.util.Set; -// -//import org.junit.AfterClass; -//import org.junit.Before; -//import org.junit.BeforeClass; -//import org.junit.Test; -// -//import redis.clients.jedis.params.ZAddParams; -//import redis.clients.jedis.params.ZParams; -//import redis.clients.jedis.resps.KeyedZSetElement; -//import redis.clients.jedis.resps.Tuple; -//import redis.clients.jedis.commands.unified.SortedSetCommandsTestBase; -// -//public class ClusterSortedSetCommandsTest extends SortedSetCommandsTestBase { -// -// @BeforeClass -// public static void prepare() throws InterruptedException { -// jedis = ClusterCommandsTestHelper.initAndGetCluster(); -// } -// -// @AfterClass -// public static void closeCluster() { -// jedis.close(); -// } -// -// @AfterClass -// public static void resetCluster() { -// ClusterCommandsTestHelper.tearClusterDown(); -// } -// -// @Before -// public void setUp() { -// ClusterCommandsTestHelper.clearClusterData(); -// } -// -// @Test -// @Override -// public void zunion() { -// jedis.zadd("{:}foo", 1, "a"); -// jedis.zadd("{:}foo", 2, "b"); -// jedis.zadd("{:}bar", 2, "a"); -// jedis.zadd("{:}bar", 2, "b"); -// -// ZParams params = new ZParams(); -// params.weights(2, 2.5); -// params.aggregate(ZParams.Aggregate.SUM); -// Set expected = new LinkedHashSet<>(); -// expected.add("a"); -// expected.add("b"); -// assertEquals(expected, jedis.zunion(params, "{:}foo", "{:}bar")); -// -// Set expectedTuple = new LinkedHashSet<>(); -// expectedTuple.add(new Tuple("b", new Double(9))); -// expectedTuple.add(new Tuple("a", new Double(7))); -// assertEquals(expectedTuple, jedis.zunionWithScores(params, "{:}foo", "{:}bar")); -// } -// -// @Test -// @Override -// public void zunionstore() { -// jedis.zadd("{:}foo", 1, "a"); -// jedis.zadd("{:}foo", 2, "b"); -// jedis.zadd("{:}bar", 2, "a"); -// jedis.zadd("{:}bar", 2, "b"); -// -// assertEquals(2, jedis.zunionstore("{:}dst", "{:}foo", "{:}bar")); -// -// List expected = new ArrayList<>(); -// expected.add(new Tuple("a", new Double(3))); -// expected.add(new Tuple("b", new Double(4))); -// assertEquals(expected, jedis.zrangeWithScores("{:}dst", 0, 100)); -// } -// -// @Test -// @Override -// public void zunionstoreParams() { -// jedis.zadd("{:}foo", 1, "a"); -// jedis.zadd("{:}foo", 2, "b"); -// jedis.zadd("{:}bar", 2, "a"); -// jedis.zadd("{:}bar", 2, "b"); -// -// ZParams params = new ZParams(); -// params.weights(2, 2.5); -// params.aggregate(ZParams.Aggregate.SUM); -// -// assertEquals(2, jedis.zunionstore("{:}dst", params, "{:}foo", "{:}bar")); -// -// List expected = new ArrayList<>(); -// expected.add(new Tuple("a", new Double(7))); -// expected.add(new Tuple("b", new Double(9))); -// assertEquals(expected, jedis.zrangeWithScores("{:}dst", 0, 100)); -// } -// -// @Test -// @Override -// public void zinter() { -// jedis.zadd("foo{:}", 1, "a"); -// jedis.zadd("foo{:}", 2, "b"); -// jedis.zadd("bar{:}", 2, "a"); -// -// ZParams params = new ZParams(); -// params.weights(2, 2.5); -// params.aggregate(ZParams.Aggregate.SUM); -// assertEquals(Collections.singleton("a"), jedis.zinter(params, "foo{:}", "bar{:}")); -// -// assertEquals(Collections.singleton(new Tuple("a", new Double(7))), -// jedis.zinterWithScores(params, "foo{:}", "bar{:}")); -// } -// -// @Test -// @Override -// public void zinterstore() { -// jedis.zadd("foo{:}", 1, "a"); -// jedis.zadd("foo{:}", 2, "b"); -// jedis.zadd("bar{:}", 2, "a"); -// -// assertEquals(1, jedis.zinterstore("dst{:}", "foo{:}", "bar{:}")); -// -// assertEquals(Collections.singletonList(new Tuple("a", new Double(3))), -// jedis.zrangeWithScores("dst{:}", 0, 100)); -// } -// -// @Test -// @Override -// public void zintertoreParams() { -// jedis.zadd("foo{:}", 1, "a"); -// jedis.zadd("foo{:}", 2, "b"); -// jedis.zadd("bar{:}", 2, "a"); -// -// ZParams params = new ZParams(); -// params.weights(2, 2.5); -// params.aggregate(ZParams.Aggregate.SUM); -// -// assertEquals(1, jedis.zinterstore("dst{:}", params, "foo{:}", "bar{:}")); -// -// assertEquals(Collections.singletonList(new Tuple("a", new Double(7))), -// jedis.zrangeWithScores("dst{:}", 0, 100)); -// } -// -// @Test -// @Override -// public void bzpopmax() { -// jedis.zadd("f{:}oo", 1d, "a", ZAddParams.zAddParams().nx()); -// jedis.zadd("f{:}oo", 10d, "b", ZAddParams.zAddParams().nx()); -// jedis.zadd("b{:}ar", 0.1d, "c", ZAddParams.zAddParams().nx()); -// assertEquals(new KeyedZSetElement("f{:}oo", "b", 10d), jedis.bzpopmax(0, "f{:}oo", "b{:}ar")); -// } -// -// @Test -// @Override -// public void bzpopmin() { -// jedis.zadd("fo{:}o", 1d, "a", ZAddParams.zAddParams().nx()); -// jedis.zadd("fo{:}o", 10d, "b", ZAddParams.zAddParams().nx()); -// jedis.zadd("ba{:}r", 0.1d, "c", ZAddParams.zAddParams().nx()); -// assertEquals(new KeyedZSetElement("ba{:}r", "c", 0.1d), jedis.bzpopmin(0, "ba{:}r", "fo{:}o")); -// } -// -// @Test -// @Override -// public void zdiff() { -// jedis.zadd("{:}foo", 1.0, "a"); -// jedis.zadd("{:}foo", 2.0, "b"); -// jedis.zadd("{:}bar", 1.0, "a"); -// -// assertEquals(0, jedis.zdiff("{bar}1", "{bar}2").size()); -// assertEquals(Collections.singleton("b"), jedis.zdiff("{:}foo", "{:}bar")); -// assertEquals(Collections.singleton(new Tuple("b", 2.0d)), jedis.zdiffWithScores("{:}foo", "{:}bar")); -// } -// -// @Test -// @Override -// public void zdiffstore() { -// jedis.zadd("foo{:}", 1.0, "a"); -// jedis.zadd("foo{:}", 2.0, "b"); -// jedis.zadd("bar{:}", 1.0, "a"); -// -// assertEquals(0, jedis.zdiffstore("{bar}3", "{bar}1", "{bar}2")); -// assertEquals(1, jedis.zdiffstore("bar{:}3", "foo{:}", "bar{:}")); -// assertEquals(Collections.singletonList("b"), jedis.zrange("bar{:}3", 0, -1)); -// } -// -//} +package redis.clients.jedis.commands.unified.cluster; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.junit.Assert.assertEquals; +import static redis.clients.jedis.util.AssertUtil.assertByteArrayListEquals; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import redis.clients.jedis.commands.unified.SortedSetCommandsTestBase; +import redis.clients.jedis.params.ZAddParams; +import redis.clients.jedis.params.ZParams; +import redis.clients.jedis.params.ZRangeParams; +import redis.clients.jedis.resps.Tuple; +import redis.clients.jedis.util.KeyValue; + +public class ClusterSortedSetCommandsTest extends SortedSetCommandsTestBase { + + final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; + final byte[] bfoo_same_hashslot = { 0x01, 0x02, 0x03, 0x04, 0x03, 0x00, 0x03, 0x1b }; + final byte[] ba = { 0x0A }; + final byte[] bb = { 0x0B }; + final byte[] bc = { 0x0C }; + + @Before + public void setUp() { + jedis = ClusterCommandsTestHelper.getCleanCluster(); + } + + @After + public void tearDown() { + jedis.close(); + ClusterCommandsTestHelper.clearClusterData(); + } + + @Test + @Override + public void zunion() { + jedis.zadd("{:}foo", 1, "a"); + jedis.zadd("{:}foo", 2, "b"); + jedis.zadd("{:}bar", 2, "a"); + jedis.zadd("{:}bar", 2, "b"); + + ZParams params = new ZParams(); + params.weights(2, 2.5); + params.aggregate(ZParams.Aggregate.SUM); + + assertThat(jedis.zunion(params, "{:}foo", "{:}bar"), + containsInAnyOrder("a", "b")); + + assertThat(jedis.zunionWithScores(params, "{:}foo", "{:}bar"), + containsInAnyOrder( + new Tuple("b", new Double(9)), + new Tuple("a", new Double(7)) + )); + } + + @Test + @Override + public void zunionstore() { + jedis.zadd("{:}foo", 1, "a"); + jedis.zadd("{:}foo", 2, "b"); + jedis.zadd("{:}bar", 2, "a"); + jedis.zadd("{:}bar", 2, "b"); + + assertEquals(2, jedis.zunionstore("{:}dst", "{:}foo", "{:}bar")); + + List expected = new ArrayList<>(); + expected.add(new Tuple("a", new Double(3))); + expected.add(new Tuple("b", new Double(4))); + assertEquals(expected, jedis.zrangeWithScores("{:}dst", 0, 100)); + } + + @Test + @Override + public void zunionstoreParams() { + jedis.zadd("{:}foo", 1, "a"); + jedis.zadd("{:}foo", 2, "b"); + jedis.zadd("{:}bar", 2, "a"); + jedis.zadd("{:}bar", 2, "b"); + + ZParams params = new ZParams(); + params.weights(2, 2.5); + params.aggregate(ZParams.Aggregate.SUM); + + assertEquals(2, jedis.zunionstore("{:}dst", params, "{:}foo", "{:}bar")); + + List expected = new ArrayList<>(); + expected.add(new Tuple("a", new Double(7))); + expected.add(new Tuple("b", new Double(9))); + assertEquals(expected, jedis.zrangeWithScores("{:}dst", 0, 100)); + } + + @Test + @Override + public void zinter() { + jedis.zadd("foo{:}", 1, "a"); + jedis.zadd("foo{:}", 2, "b"); + jedis.zadd("bar{:}", 2, "a"); + + ZParams params = new ZParams(); + params.weights(2, 2.5); + params.aggregate(ZParams.Aggregate.SUM); + assertThat(jedis.zinter(params, "foo{:}", "bar{:}"), + containsInAnyOrder("a")); + + assertThat(jedis.zinterWithScores(params, "foo{:}", "bar{:}"), + containsInAnyOrder(new Tuple("a", new Double(7)))); + } + + @Test + @Override + public void zinterstore() { + jedis.zadd("foo{:}", 1, "a"); + jedis.zadd("foo{:}", 2, "b"); + jedis.zadd("bar{:}", 2, "a"); + + assertEquals(1, jedis.zinterstore("dst{:}", "foo{:}", "bar{:}")); + + assertEquals(Collections.singletonList(new Tuple("a", new Double(3))), + jedis.zrangeWithScores("dst{:}", 0, 100)); + } + + @Test + @Override + public void zintertoreParams() { + jedis.zadd("foo{:}", 1, "a"); + jedis.zadd("foo{:}", 2, "b"); + jedis.zadd("bar{:}", 2, "a"); + + ZParams params = new ZParams(); + params.weights(2, 2.5); + params.aggregate(ZParams.Aggregate.SUM); + + assertEquals(1, jedis.zinterstore("dst{:}", params, "foo{:}", "bar{:}")); + + assertEquals(Collections.singletonList(new Tuple("a", new Double(7))), + jedis.zrangeWithScores("dst{:}", 0, 100)); + } + + @Test + @Override + public void bzpopmax() { + jedis.zadd("f{:}oo", 1d, "a", ZAddParams.zAddParams().nx()); + jedis.zadd("f{:}oo", 10d, "b", ZAddParams.zAddParams().nx()); + jedis.zadd("b{:}ar", 0.1d, "c", ZAddParams.zAddParams().nx()); + assertEquals(new KeyValue<>("f{:}oo", new Tuple("b", 10d)), jedis.bzpopmax(0, "f{:}oo", "b{:}ar")); + } + + @Test + @Override + public void bzpopmin() { + jedis.zadd("fo{:}o", 1d, "a", ZAddParams.zAddParams().nx()); + jedis.zadd("fo{:}o", 10d, "b", ZAddParams.zAddParams().nx()); + jedis.zadd("ba{:}r", 0.1d, "c", ZAddParams.zAddParams().nx()); + assertEquals(new KeyValue<>("ba{:}r", new Tuple("c", 0.1d)), jedis.bzpopmin(0, "ba{:}r", "fo{:}o")); + } + + @Test + @Override + public void zdiff() { + jedis.zadd("{:}foo", 1.0, "a"); + jedis.zadd("{:}foo", 2.0, "b"); + jedis.zadd("{:}bar", 1.0, "a"); + + assertEquals(0, jedis.zdiff("{bar}1", "{bar}2").size()); + + assertThat(jedis.zdiff("{:}foo", "{:}bar"), + containsInAnyOrder("b")); + + assertThat(jedis.zdiffWithScores("{:}foo", "{:}bar"), + containsInAnyOrder(new Tuple("b", 2.0d))); + } + + @Test + @Override + public void zdiffstore() { + jedis.zadd("foo{:}", 1.0, "a"); + jedis.zadd("foo{:}", 2.0, "b"); + jedis.zadd("bar{:}", 1.0, "a"); + + assertEquals(0, jedis.zdiffstore("{bar}3", "{bar}1", "{bar}2")); + assertEquals(1, jedis.zdiffstore("bar{:}3", "foo{:}", "bar{:}")); + assertEquals(Collections.singletonList("b"), jedis.zrange("bar{:}3", 0, -1)); + } + + @Test + public void zrangestore() { + jedis.zadd("foo{.}", 1, "aa"); + jedis.zadd("foo{.}", 2, "c"); + jedis.zadd("foo{.}", 3, "bb"); + + long stored = jedis.zrangestore("bar{.}", "foo{.}", ZRangeParams.zrangeByScoreParams(1, 2)); + assertEquals(2, stored); + + List range = jedis.zrange("bar{.}", 0, -1); + List expected = new ArrayList<>(); + expected.add("aa"); + expected.add("c"); + assertEquals(expected, range); + + // Binary + jedis.zadd(bfoo, 1d, ba); + jedis.zadd(bfoo, 10d, bb); + jedis.zadd(bfoo, 0.1d, bc); + jedis.zadd(bfoo, 2d, ba); + + long bstored = jedis.zrangestore(bfoo_same_hashslot, bfoo, ZRangeParams.zrangeParams(0, 1).rev()); + assertEquals(2, bstored); + + List brange = jedis.zrevrange(bfoo_same_hashslot, 0, 1); + List bexpected = new ArrayList<>(); + bexpected.add(bb); + bexpected.add(ba); + assertByteArrayListEquals(bexpected, brange); + } + + @Test + public void zintercard() { + jedis.zadd("foo{.}", 1, "a"); + jedis.zadd("foo{.}", 2, "b"); + jedis.zadd("bar{.}", 2, "a"); + jedis.zadd("bar{.}", 1, "b"); + + assertEquals(2, jedis.zintercard("foo{.}", "bar{.}")); + assertEquals(1, jedis.zintercard(1, "foo{.}", "bar{.}")); + + // Binary + jedis.zadd(bfoo, 1, ba); + jedis.zadd(bfoo, 2, bb); + jedis.zadd(bfoo_same_hashslot, 2, ba); + jedis.zadd(bfoo_same_hashslot, 2, bb); + + assertEquals(2, jedis.zintercard(bfoo, bfoo_same_hashslot)); + assertEquals(1, jedis.zintercard(1, bfoo, bfoo_same_hashslot)); + } + +} diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterStringValuesCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterStringValuesCommandsTest.java index 1df7b892c6..c7b743f5e4 100644 --- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterStringValuesCommandsTest.java +++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterStringValuesCommandsTest.java @@ -1,85 +1,96 @@ -//package redis.clients.jedis.commands.unified.cluster; -// -//import static org.junit.Assert.assertEquals; -// -//import java.util.ArrayList; -//import java.util.List; -//import org.junit.AfterClass; -//import org.junit.Before; -//import org.junit.BeforeClass; -//import org.junit.Test; -//import redis.clients.jedis.commands.unified.StringValuesCommandsTestBase; -// -//public class ClusterStringValuesCommandsTest extends StringValuesCommandsTestBase { -// -// @BeforeClass -// public static void prepare() throws InterruptedException { -// jedis = ClusterCommandsTestHelper.initAndGetCluster(); -// } -// -// @AfterClass -// public static void closeCluster() { -// jedis.close(); -// } -// -// @AfterClass -// public static void resetCluster() { -// ClusterCommandsTestHelper.tearClusterDown(); -// } -// -// @Before -// public void setUp() { -// ClusterCommandsTestHelper.clearClusterData(); -// } -// -// @Test -// @Override -// public void mget() { -// List values = jedis.mget("foo{^}", "bar{^}"); -// List expected = new ArrayList<>(); -// expected.add(null); -// expected.add(null); -// -// assertEquals(expected, values); -// -// jedis.set("foo{^}", "bar"); -// -// expected = new ArrayList<>(); -// expected.add("bar"); -// expected.add(null); -// values = jedis.mget("foo{^}", "bar{^}"); -// -// assertEquals(expected, values); -// -// jedis.set("bar{^}", "foo"); -// -// expected = new ArrayList<>(); -// expected.add("bar"); -// expected.add("foo"); -// values = jedis.mget("foo{^}", "bar{^}"); -// -// assertEquals(expected, values); -// } -// -// @Test -// @Override -// public void mset() { -// String status = jedis.mset("{^}foo", "bar", "{^}bar", "foo"); -// assertEquals("OK", status); -// assertEquals("bar", jedis.get("{^}foo")); -// assertEquals("foo", jedis.get("{^}bar")); -// } -// -// @Test -// @Override -// public void msetnx() { -// assertEquals(1, jedis.msetnx("{^}foo", "bar", "{^}bar", "foo")); -// assertEquals("bar", jedis.get("{^}foo")); -// assertEquals("foo", jedis.get("{^}bar")); -// -// assertEquals(0, jedis.msetnx("{^}foo", "bar1", "{^}bar2", "foo2")); -// assertEquals("bar", jedis.get("{^}foo")); -// assertEquals("foo", jedis.get("{^}bar")); -// } -// -//} +package redis.clients.jedis.commands.unified.cluster; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import redis.clients.jedis.commands.unified.StringValuesCommandsTestBase; +import redis.clients.jedis.params.LCSParams; +import redis.clients.jedis.resps.LCSMatchResult; + +public class ClusterStringValuesCommandsTest extends StringValuesCommandsTestBase { + + @Before + public void setUp() { + jedis = ClusterCommandsTestHelper.getCleanCluster(); + } + + @After + public void tearDown() { + jedis.close(); + ClusterCommandsTestHelper.clearClusterData(); + } + + @Test + @Override + public void mget() { + List values = jedis.mget("foo{^}", "bar{^}"); + List expected = new ArrayList<>(); + expected.add(null); + expected.add(null); + + assertEquals(expected, values); + + jedis.set("foo{^}", "bar"); + + expected = new ArrayList<>(); + expected.add("bar"); + expected.add(null); + values = jedis.mget("foo{^}", "bar{^}"); + + assertEquals(expected, values); + + jedis.set("bar{^}", "foo"); + + expected = new ArrayList<>(); + expected.add("bar"); + expected.add("foo"); + values = jedis.mget("foo{^}", "bar{^}"); + + assertEquals(expected, values); + } + + @Test + @Override + public void mset() { + String status = jedis.mset("{^}foo", "bar", "{^}bar", "foo"); + assertEquals("OK", status); + assertEquals("bar", jedis.get("{^}foo")); + assertEquals("foo", jedis.get("{^}bar")); + } + + @Test + @Override + public void msetnx() { + assertEquals(1, jedis.msetnx("{^}foo", "bar", "{^}bar", "foo")); + assertEquals("bar", jedis.get("{^}foo")); + assertEquals("foo", jedis.get("{^}bar")); + + assertEquals(0, jedis.msetnx("{^}foo", "bar1", "{^}bar2", "foo2")); + assertEquals("bar", jedis.get("{^}foo")); + assertEquals("foo", jedis.get("{^}bar")); + } + + @Test + public void lcs() { + jedis.mset("key1{.}", "ohmytext", "key2{.}", "mynewtext"); + + LCSMatchResult stringMatchResult = jedis.lcs("key1{.}", "key2{.}", + LCSParams.LCSParams()); + assertEquals("mytext", stringMatchResult.getMatchString()); + + stringMatchResult = jedis.lcs("key1{.}", "key2{.}", + LCSParams.LCSParams().idx().withMatchLen()); + assertEquals(stringMatchResult.getLen(), 6); + assertEquals(2, stringMatchResult.getMatches().size()); + + stringMatchResult = jedis.lcs("key1{.}", "key2{.}", + LCSParams.LCSParams().idx().minMatchLen(10)); + assertEquals(0, stringMatchResult.getMatches().size()); + } + +}