diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java index 2a5df1150..6edb1c3d0 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java @@ -256,6 +256,7 @@ public class JedisConnection implements RedisConnection { public List closePipeline() { if (pipeline != null) { List execute = pipeline.syncAndReturnAll(); + pipeline = null; if (execute != null && !execute.isEmpty()) { Exception cause = null; for (int i = 0; i < execute.size(); i++) { diff --git a/src/main/java/org/springframework/data/redis/connection/rjc/RjcConnection.java b/src/main/java/org/springframework/data/redis/connection/rjc/RjcConnection.java index 525186b2c..baf855800 100644 --- a/src/main/java/org/springframework/data/redis/connection/rjc/RjcConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/rjc/RjcConnection.java @@ -142,6 +142,7 @@ public class RjcConnection implements RedisConnection { public List closePipeline() { if (pipeline != null) { + pipeline = null; try { return RjcUtils.maybeConvert(client.getAll()); } catch (Exception ex) { diff --git a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java index e026e2a95..691fd845d 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java @@ -1165,7 +1165,7 @@ public abstract class AbstractConnectionIntegrationTests { assertEquals(expected, actual); } - private boolean exists(String key, long timeout) { + protected boolean exists(String key, long timeout) { boolean exists = true; for (long currentTime = System.currentTimeMillis(); System.currentTimeMillis() - currentTime < timeout;) { diff --git a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionPipelineIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionPipelineIntegrationTests.java index 1558cecc0..6066e9f6f 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionPipelineIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionPipelineIntegrationTests.java @@ -17,10 +17,10 @@ package org.springframework.data.redis.connection; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Arrays; @@ -103,15 +103,10 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends public void testPubSubWithPatterns() throws Exception { } - @Test + @Test(expected = RedisPipelineException.class) public void exceptionExecuteNative() throws Exception { connection.execute("ZadD", getClass() + "#foo\t0.90\titem"); - try { - connection.closePipeline(); - fail("Expected a RedisPipelineException to be thrown"); - }catch(RedisPipelineException e) { - // expected - } + connection.closePipeline(); } @Test @@ -126,9 +121,8 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends public void testExpire() throws Exception { connection.set("exp", "true"); actual.add(connection.expire("exp", 1)); - Thread.sleep(2000); - actual.add(connection.exists("exp")); - verifyResults(Arrays.asList(new Object[] { 1l, 0l }), actual); + verifyResults(Arrays.asList(new Object[] { 1l }), actual); + assertFalse(exists("exp", 2500l)); } @Test @@ -136,9 +130,8 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends public void testExpireAt() throws Exception { connection.set("exp2", "true"); actual.add(connection.expireAt("exp2", System.currentTimeMillis() / 1000 + 1)); - Thread.sleep(2000); - actual.add(connection.exists("exp2")); - verifyResults(Arrays.asList(new Object[] { 1l, 0l }), actual); + verifyResults(Arrays.asList(new Object[] { 1l }), actual); + assertFalse(exists("exp2", 2500l)); } @Test @@ -147,9 +140,9 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends connection.set("exp3", "true"); actual.add(connection.expire("exp3", 1)); actual.add(connection.persist("exp3")); + verifyResults(Arrays.asList(new Object[] { 1l, 1l }), actual); Thread.sleep(1500); - actual.add(connection.exists("exp3")); - verifyResults(Arrays.asList(new Object[] { 1l, 1l, 1l }), actual); + assertTrue(connection.exists("exp3")); } @Test @@ -157,9 +150,8 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends public void testSetEx() throws Exception { connection.setEx("expy", 1l, "yep"); actual.add(connection.get("expy")); - Thread.sleep(2000); - actual.add(connection.exists("expy")); - verifyResults(Arrays.asList(new Object[] { "yep", 0l }), actual); + verifyResults(Arrays.asList(new Object[] { "yep" }), actual); + assertFalse(exists("expy", 2500l)); } @Test diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionPipelineIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionPipelineIntegrationTests.java index 8a31071d9..3ee17f2dc 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionPipelineIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionPipelineIntegrationTests.java @@ -31,7 +31,6 @@ import org.springframework.data.redis.RedisSystemException; import org.springframework.data.redis.connection.AbstractConnectionPipelineIntegrationTests; import org.springframework.data.redis.connection.DefaultStringTuple; import org.springframework.data.redis.connection.StringRedisConnection.StringTuple; -import org.springframework.test.annotation.IfProfileValue; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -92,14 +91,6 @@ public class JedisConnectionPipelineIntegrationTests extends public void testMultiDiscard() { } - @Ignore("DATAREDIS-155 Exists returns true after key is supposed to expire") - public void testExpire() throws Exception { - } - - @Ignore("DATAREDIS-155 Exists returns true after key is supposed to expire") - public void testSetEx() throws Exception { - } - // Unsupported Ops @Test(expected = RedisSystemException.class) public void testBitSet() throws Exception { @@ -230,27 +221,6 @@ public class JedisConnectionPipelineIntegrationTests extends verifyResults(Arrays.asList(new Object[] { 1l, 1l, value1, expected }), actual); } - @Test - @IfProfileValue(name = "runLongTests", value = "true") - public void testExpireAt() throws Exception { - connection.set("exp2", "true"); - actual.add(connection.expireAt("exp2", System.currentTimeMillis() / 1000 + 1)); - Thread.sleep(2000); - actual.add(connection.exists("exp2")); - verifyResults(Arrays.asList(new Object[] { 1l, false }), actual); - } - - @Test - @IfProfileValue(name = "runLongTests", value = "true") - public void testPersist() throws Exception { - connection.set("exp3", "true"); - actual.add(connection.expire("exp3", 1)); - actual.add(connection.persist("exp3")); - Thread.sleep(1500); - actual.add(connection.exists("exp3")); - verifyResults(Arrays.asList(new Object[] { 1l, 1l, true }), actual); - } - @SuppressWarnings({ "rawtypes", "unchecked" }) protected Object convertResult(Object result) { Object convertedResult = super.convertResult(result); diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionPipelineIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionPipelineIntegrationTests.java index b5c339a2b..30c4d2961 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionPipelineIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionPipelineIntegrationTests.java @@ -19,6 +19,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; import java.util.ArrayList; import java.util.Arrays; @@ -88,7 +89,7 @@ public class LettuceConnectionPipelineIntegrationTests extends @Test public void testInfo() throws Exception { assertNull(connection.info()); - List results = connection.closePipeline(); + List results = getResults(); assertEquals(1, results.size()); Properties info = LettuceUtils.info((String) results.get(0)); assertTrue("at least 5 settings should be present", info.size() >= 5); @@ -199,9 +200,9 @@ public class LettuceConnectionPipelineIntegrationTests extends connection.set("exp3", "true"); actual.add(connection.expire("exp3", 1)); actual.add(connection.persist("exp3")); + verifyResults(Arrays.asList(new Object[] { true, true }), actual); Thread.sleep(1500); - actual.add(connection.exists("exp3")); - verifyResults(Arrays.asList(new Object[] { true, true, true }), actual); + assertTrue(connection.exists("exp3")); } @Test @@ -209,9 +210,8 @@ public class LettuceConnectionPipelineIntegrationTests extends public void testExpireAt() throws Exception { connection.set("exp2", "true"); actual.add(connection.expireAt("exp2", System.currentTimeMillis() / 1000 + 1)); - Thread.sleep(2000); - actual.add(connection.exists("exp2")); - verifyResults(Arrays.asList(new Object[] { true, false }), actual); + verifyResults(Arrays.asList(new Object[] { true}), actual); + assertFalse(exists("exp2", 2500l)); } @Test @@ -219,19 +219,8 @@ public class LettuceConnectionPipelineIntegrationTests extends public void testExpire() throws Exception { connection.set("exp", "true"); actual.add(connection.expire("exp", 1)); - Thread.sleep(2000); - actual.add(connection.exists("exp")); - verifyResults(Arrays.asList(new Object[] { true, false }), actual); - } - - @Test - @IfProfileValue(name = "runLongTests", value = "true") - public void testSetEx() throws Exception { - connection.setEx("expy", 1l, "yep"); - actual.add(connection.get("expy")); - Thread.sleep(2000); - actual.add(connection.exists("expy")); - verifyResults(Arrays.asList(new Object[] { "yep", false }), actual); + verifyResults(Arrays.asList(new Object[] { true }), actual); + assertFalse(exists("exp", 2500)); } @SuppressWarnings({ "rawtypes", "unchecked" }) diff --git a/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionPipelineIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionPipelineIntegrationTests.java index f5fbe2ee2..9acd85d90 100644 --- a/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionPipelineIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/rjc/RjcConnectionPipelineIntegrationTests.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -48,11 +47,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; public class RjcConnectionPipelineIntegrationTests extends AbstractConnectionPipelineIntegrationTests { - @Before - public void setUp() { - super.setUp(); - } - @Ignore("DATAREDIS-134 string ops do not work with encoded values") public void testGetRangeSetRange() { } @@ -125,6 +119,11 @@ public class RjcConnectionPipelineIntegrationTests extends public void testType() { } + @Test + @Ignore("DATAREDIS-161 Syntax error in pipelined RJC op causes SocketTimeouts on subsequent calls") + public void exceptionExecuteNative() throws Exception { + } + // Overrides, usually due to return values being Long vs Boolean or Set vs // List