From 23b54c2cef17c4d85ab2e25cc659d37ceac83e49 Mon Sep 17 00:00:00 2001 From: Jonathan Leibiusky Date: Thu, 16 Jan 2014 20:37:47 -0500 Subject: [PATCH] Fix sentinel test not to be so sensitive to time --- Makefile | 1 + .../clients/jedis/tests/JedisClusterTest.java | 268 +++++++++--------- .../jedis/tests/JedisSentinelPoolTest.java | 1 + 3 files changed, 136 insertions(+), 134 deletions(-) diff --git a/Makefile b/Makefile index cf4751f..e00fb83 100644 --- a/Makefile +++ b/Makefile @@ -188,6 +188,7 @@ stop: test: make start + sleep 2 mvn -Dtest=${TEST} clean compile test make stop diff --git a/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java b/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java index ef48a21..c32a9be 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisClusterTest.java @@ -29,168 +29,168 @@ public class JedisClusterTest extends Assert { @Before public void setUp() throws InterruptedException { - node1 = new Jedis(nodeInfo1.getHost(), nodeInfo1.getPort()); - node1.connect(); - node1.flushAll(); - - node2 = new Jedis(nodeInfo2.getHost(), nodeInfo2.getPort()); - node2.connect(); - node2.flushAll(); - - node3 = new Jedis(nodeInfo3.getHost(), nodeInfo3.getPort()); - node3.connect(); - node3.flushAll(); - - // ---- configure cluster - - // add nodes to cluster - node1.clusterMeet("127.0.0.1", nodeInfo1.getPort()); - 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 = JedisCluster.HASHSLOTS / 3; - Pipeline pipeline1 = node1.pipelined(); - Pipeline pipeline2 = node2.pipelined(); - Pipeline pipeline3 = node3.pipelined(); - for (int i = 0; i < JedisCluster.HASHSLOTS; i++) { - if (i < slotsPerNode) { - pipeline1.clusterAddSlots(i); - } else if (i > slotsPerNode * 2) { - pipeline3.clusterAddSlots(i); - } else { - pipeline2.clusterAddSlots(i); - } - } - pipeline1.sync(); - pipeline2.sync(); - pipeline3.sync(); - - - waitForClusterReady(); + node1 = new Jedis(nodeInfo1.getHost(), nodeInfo1.getPort()); + node1.connect(); + node1.flushAll(); + + node2 = new Jedis(nodeInfo2.getHost(), nodeInfo2.getPort()); + node2.connect(); + node2.flushAll(); + + node3 = new Jedis(nodeInfo3.getHost(), nodeInfo3.getPort()); + node3.connect(); + node3.flushAll(); + + // ---- configure cluster + + // add nodes to cluster + node1.clusterMeet("127.0.0.1", nodeInfo1.getPort()); + 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 = JedisCluster.HASHSLOTS / 3; + Pipeline pipeline1 = node1.pipelined(); + Pipeline pipeline2 = node2.pipelined(); + Pipeline pipeline3 = node3.pipelined(); + for (int i = 0; i < JedisCluster.HASHSLOTS; i++) { + if (i < slotsPerNode) { + pipeline1.clusterAddSlots(i); + } else if (i > slotsPerNode * 2) { + pipeline3.clusterAddSlots(i); + } else { + pipeline2.clusterAddSlots(i); + } + } + pipeline1.sync(); + pipeline2.sync(); + pipeline3.sync(); + + waitForClusterReady(); } - - @After + @After public void tearDown() { - // clear all slots - int[] slotsToDelete = new int[JedisCluster.HASHSLOTS]; - for (int i = 0; i < JedisCluster.HASHSLOTS; i++) { - slotsToDelete[i] = i; - } - node1.clusterDelSlots(slotsToDelete); - node2.clusterDelSlots(slotsToDelete); - node3.clusterDelSlots(slotsToDelete); + // clear all slots + int[] slotsToDelete = new int[JedisCluster.HASHSLOTS]; + for (int i = 0; i < JedisCluster.HASHSLOTS; i++) { + slotsToDelete[i] = i; + } + node1.clusterDelSlots(slotsToDelete); + node2.clusterDelSlots(slotsToDelete); + node3.clusterDelSlots(slotsToDelete); } - @Test(expected=JedisMovedDataException.class) + @Test(expected = JedisMovedDataException.class) public void testThrowMovedException() { - node1.set("foo", "bar"); + node1.set("foo", "bar"); } - + @Test public void testMovedExceptionParameters() { - try { - node1.set("foo", "bar"); - } catch (JedisMovedDataException jme) { - assertEquals(12182, jme.getSlot()); - assertEquals(new HostAndPort("127.0.0.1", 7381), jme.getTargetNode()); - } - fail(); + try { + node1.set("foo", "bar"); + } catch (JedisMovedDataException jme) { + assertEquals(12182, jme.getSlot()); + assertEquals(new HostAndPort("127.0.0.1", 7381), + jme.getTargetNode()); + return; + } + fail(); } - @Test(expected=JedisAskDataException.class) + @Test(expected = JedisAskDataException.class) public void testThrowAskException() { - int keySlot = JedisClusterCRC16.getSlot("test"); - String node3Id = getNodeId(node3.clusterNodes()); - node2.clusterSetSlotMigrating(keySlot, node3Id); - node2.get("test"); + int keySlot = JedisClusterCRC16.getSlot("test"); + String node3Id = getNodeId(node3.clusterNodes()); + node2.clusterSetSlotMigrating(keySlot, node3Id); + node2.get("test"); } - + @Test public void testDiscoverNodesAutomatically() { - Set jedisClusterNode = new HashSet(); - jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); - JedisCluster jc = new JedisCluster(jedisClusterNode); - assertEquals(jc.getClusterNodes().size(), 3); + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + assertEquals(jc.getClusterNodes().size(), 3); } - + @Test public void testCalculateConnectionPerSlot() { - Set jedisClusterNode = new HashSet(); - jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); - JedisCluster jc = new JedisCluster(jedisClusterNode); - jc.set("foo", "bar"); - jc.set("test", "test"); - assertEquals("bar",node3.get("foo")); - assertEquals("test",node2.get("test")); + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + jc.set("foo", "bar"); + jc.set("test", "test"); + assertEquals("bar", node3.get("foo")); + assertEquals("test", node2.get("test")); } - + @Test public void testRecalculateSlotsWhenMoved() throws InterruptedException { - Set jedisClusterNode = new HashSet(); - jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); - JedisCluster jc = new JedisCluster(jedisClusterNode); - int slot51 = JedisClusterCRC16.getSlot("51"); - node2.clusterDelSlots(slot51); - node3.clusterDelSlots(slot51); - node3.clusterAddSlots(slot51); - - waitForClusterReady(); - jc.set("51", "foo"); - assertEquals("foo", jc.get("51")); + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + int slot51 = JedisClusterCRC16.getSlot("51"); + node2.clusterDelSlots(slot51); + node3.clusterDelSlots(slot51); + node3.clusterAddSlots(slot51); + + waitForClusterReady(); + jc.set("51", "foo"); + assertEquals("foo", jc.get("51")); } - + @Test public void testAskResponse() throws InterruptedException { - Set jedisClusterNode = new HashSet(); - jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); - JedisCluster jc = new JedisCluster(jedisClusterNode); - int slot51 = JedisClusterCRC16.getSlot("51"); - node3.clusterSetSlotImporting(slot51, getNodeId(node2.clusterNodes())); - node2.clusterSetSlotMigrating(slot51, getNodeId(node3.clusterNodes())); - jc.set("51", "foo"); - assertEquals("foo", jc.get("51")); + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + int slot51 = JedisClusterCRC16.getSlot("51"); + node3.clusterSetSlotImporting(slot51, getNodeId(node2.clusterNodes())); + node2.clusterSetSlotMigrating(slot51, getNodeId(node3.clusterNodes())); + jc.set("51", "foo"); + assertEquals("foo", jc.get("51")); } - - @Test(expected=JedisClusterException.class) + + @Test(expected = JedisClusterException.class) public void testThrowExceptionWithoutKey() { - Set jedisClusterNode = new HashSet(); - jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); - JedisCluster jc = new JedisCluster(jedisClusterNode); - jc.ping(); + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + jc.ping(); } - - @Test(expected=JedisClusterMaxRedirectionsException.class) + + @Test(expected = JedisClusterMaxRedirectionsException.class) public void testRedisClusterMaxRedirections() { - Set jedisClusterNode = new HashSet(); - jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); - JedisCluster jc = new JedisCluster(jedisClusterNode); - int slot51 = JedisClusterCRC16.getSlot("51"); - //This will cause an infinite redirection loop - node2.clusterSetSlotMigrating(slot51, getNodeId(node3.clusterNodes())); - jc.set("51", "foo"); + Set jedisClusterNode = new HashSet(); + jedisClusterNode.add(new HostAndPort("127.0.0.1", 7379)); + JedisCluster jc = new JedisCluster(jedisClusterNode); + int slot51 = JedisClusterCRC16.getSlot("51"); + // This will cause an infinite redirection loop + node2.clusterSetSlotMigrating(slot51, getNodeId(node3.clusterNodes())); + jc.set("51", "foo"); } - + private String getNodeId(String infoOutput) { - for (String infoLine : infoOutput.split("\n")) { - if (infoLine.contains("myself")) { - return infoLine.split(" ")[0]; - } - } - return ""; - } - - private void waitForClusterReady() throws InterruptedException { - boolean clusterOk = false; - while (!clusterOk) { - if (node1.clusterInfo().split("\n")[0].contains("ok") && - node2.clusterInfo().split("\n")[0].contains("ok") && - node3.clusterInfo().split("\n")[0].contains("ok") ) { - clusterOk = true; - } - Thread.sleep(50); - } + for (String infoLine : infoOutput.split("\n")) { + if (infoLine.contains("myself")) { + return infoLine.split(" ")[0]; + } } - -} \ No newline at end of file + return ""; + } + + private void waitForClusterReady() throws InterruptedException { + boolean clusterOk = false; + while (!clusterOk) { + if (node1.clusterInfo().split("\n")[0].contains("ok") + && node2.clusterInfo().split("\n")[0].contains("ok") + && node3.clusterInfo().split("\n")[0].contains("ok")) { + clusterOk = true; + } + Thread.sleep(50); + } + } + +} diff --git a/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java b/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java index c3a72a0..048eeca 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java @@ -69,6 +69,7 @@ public class JedisSentinelPoolTest extends JedisTestBase { } waitForFailover(pool, oldMaster); + Thread.sleep(100); jedis = pool.getResource(); assertEquals("PONG", jedis.ping());