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 9a1e1cc5d..1558cecc0 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionPipelineIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionPipelineIntegrationTests.java @@ -20,6 +20,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.fail; import java.util.ArrayList; import java.util.Arrays; @@ -71,7 +72,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends @Before public void setUp() { super.setUp(); - connection.openPipeline(); + initConnection(); } @Ignore @@ -102,10 +103,15 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends public void testPubSubWithPatterns() throws Exception { } - @Test(expected = RedisPipelineException.class) + @Test public void exceptionExecuteNative() throws Exception { connection.execute("ZadD", getClass() + "#foo\t0.90\titem"); - connection.closePipeline(); + try { + connection.closePipeline(); + fail("Expected a RedisPipelineException to be thrown"); + }catch(RedisPipelineException e) { + // expected + } } @Test @@ -170,7 +176,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends public void testDbSize() { connection.set("dbparam", "foo"); assertNull(connection.dbSize()); - List results = connection.closePipeline(); + List results = getResults(); assertEquals(2, results.size()); assertTrue((Long) results.get(1) > 0); } @@ -179,7 +185,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends @Test public void testGetConfig() { assertNull(connection.getConfig("*")); - List results = convertResults(connection.closePipeline()); + List results = convertResults(); assertEquals(1, results.size()); assertTrue(!((List) results.get(0)).isEmpty()); } @@ -190,7 +196,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends connection.set("keytest", "true"); connection.set("keytest2", "true"); connection.keys("key*"); - List results = convertResults(connection.closePipeline()); + List results = convertResults(); assertEquals(1, results.size()); assertTrue(((List) results.get(0)).contains("keytest")); } @@ -199,7 +205,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends public void testRandomKey() { connection.set("some", "thing"); assertNull(connection.randomKey()); - List results = convertResults(connection.closePipeline()); + List results = convertResults(); assertEquals(1, results.size()); assertNotNull(results.get(0)); } @@ -208,7 +214,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends public void testType() { connection.set("something", "yo"); assertNull(connection.type("something")); - List results = convertResults(connection.closePipeline()); + List results = convertResults(); assertEquals(1, results.size()); assertEquals("string", results.get(0)); } @@ -260,7 +266,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends connection.set("testitnow2", "notok"); connection.discard(); connection.get("testitnow"); - List convertedResults = convertResults(connection.closePipeline()); + List convertedResults = convertResults(); assertEquals(Arrays.asList(new String[] { "willdo" }), convertedResults); connection.openPipeline(); // Ensure we can run a new tx after discarding previous one @@ -273,7 +279,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends connection.set("key", "value"); assertNull(connection.get("key")); assertNull(connection.exec()); - List convertedResults = convertResults(connection.closePipeline()); + List convertedResults = convertResults(); assertEquals(Arrays.asList(new Object[] { "value" }), convertedResults); } @@ -289,7 +295,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends connection.set("testitnow", "somethingelse"); connection.get("testitnow"); connection.exec(); - List convertedResults = convertResults(connection.closePipeline()); + List convertedResults = convertResults(); assertEquals(Arrays.asList(new Object[] { Arrays.asList(new String[] { "OK", "somethingelse" }) }), convertedResults); } @@ -394,7 +400,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends connection.sAdd("myset", "foo"); connection.sAdd("myset", "bar"); assertNull(connection.sPop("myset")); - List results = convertResults(connection.closePipeline()); + List results = convertResults(); assertEquals(3, results.size()); assertTrue(new HashSet(Arrays.asList(new String[] { "foo", "bar" })) .contains(results.get(2))); @@ -406,7 +412,7 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends connection.sAdd("myset", "foo"); connection.sAdd("myset", "bar"); assertNull(connection.sRandMember("myset")); - List results = convertResults(connection.closePipeline()); + List results = convertResults(); assertEquals(3, results.size()); assertTrue(new HashSet(Arrays.asList(new String[] { "foo", "bar" })) .contains(results.get(2))); @@ -787,17 +793,25 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends Arrays.asList(new String[] { "foo", "bar" }) }), actual); } + protected void initConnection() { + connection.openPipeline(); + } + protected void verifyResults(List expected, List actual) { List expectedPipeline = new ArrayList(); for (int i = 0; i < actual.size(); i++) { expectedPipeline.add(null); } assertEquals(expectedPipeline, actual); - List pipelinedResults = connection.closePipeline(); - assertEquals(expected, convertResults(pipelinedResults)); + assertEquals(expected, convertResults()); } - protected List convertResults(List pipelinedResults) { + protected List getResults() { + return connection.closePipeline(); + } + + protected List convertResults() { + List pipelinedResults = getResults(); List serializedResults = new ArrayList(); for (Object result : pipelinedResults) { Object convertedResult = convertResult(result); 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 fec646f17..8a31071d9 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 @@ -97,7 +97,7 @@ public class JedisConnectionPipelineIntegrationTests extends } @Ignore("DATAREDIS-155 Exists returns true after key is supposed to expire") - public void testSetEx() { + public void testSetEx() throws Exception { } // Unsupported Ops @@ -257,8 +257,8 @@ public class JedisConnectionPipelineIntegrationTests extends if (convertedResult instanceof Set) { if (convertResultToList) { // Other providers represent zSets as Lists, so transform here - return new ArrayList((Set) result); - } else if (!(((Set) result).isEmpty()) + return new ArrayList((Set) convertedResult); + } else if (!(((Set) convertedResult).isEmpty()) && ((Set) convertedResult).iterator().next() instanceof Tuple) { List tuples = new ArrayList(); for (Tuple value : ((Set) convertedResult)) { diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionTransactionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionTransactionIntegrationTests.java new file mode 100644 index 000000000..06a715997 --- /dev/null +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionTransactionIntegrationTests.java @@ -0,0 +1,77 @@ +package org.springframework.data.redis.connection.jedis; + +import static org.junit.Assert.fail; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.data.redis.RedisSystemException; +import org.springframework.data.redis.connection.RedisPipelineException; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration("JedisConnectionIntegrationTests-context.xml") +public class JedisConnectionTransactionIntegrationTests extends + JedisConnectionPipelineIntegrationTests { + + @Ignore("DATAREDIS-160 Jedis persist does not execute as part of a transaction") + public void testPersist() throws Exception { + } + + @Ignore("DATAREDIS-159 brPop executes twice in a transaction") + public void testBRPop() { + } + + @Ignore("DATAREDIS-159 brPop executes twice in a transaction") + public void testBRPopTimeout() { + } + + @Ignore + public void testMultiDiscard() { + } + + @Ignore + public void testMultiExec() { + } + + @Ignore + public void testUnwatch() { + } + + @Ignore + public void testWatch() { + } + + // Unsupported Ops + + @Test(expected = RedisSystemException.class) + public void testGetConfig() { + connection.getConfig("*"); + } + + @Test(expected = RedisSystemException.class) + public void testEcho() { + super.testEcho(); + } + + @Test + public void exceptionExecuteNative() throws Exception { + actual.add(connection.execute("ZadD", getClass() + "#foo\t0.90\titem")); + // Syntax error on queued commands are swallowed and no results are + // returned + verifyResults(Arrays.asList(new Object[] {}), actual); + } + + protected void initConnection() { + connection.multi(); + } + + protected List getResults() { + return connection.exec(); + } +} 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 73b2aaf22..f5fbe2ee2 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 @@ -161,7 +161,7 @@ public class RjcConnectionPipelineIntegrationTests extends connection.set("key", "value"); assertNull(connection.get("key")); assertNull(connection.exec()); - List convertedResults = convertResults(connection.closePipeline()); + List convertedResults = convertResults(); // "OK" will be decoded to null assertEquals(Arrays.asList(new Object[] { Arrays.asList(new String[] { null, "value" }) }), convertedResults); @@ -179,7 +179,7 @@ public class RjcConnectionPipelineIntegrationTests extends connection.set("testitnow", "somethingelse"); actual.add(connection.exec()); actual.add(connection.get("testitnow")); - List convertedResults = convertResults(connection.closePipeline()); + List convertedResults = convertResults(); // The null returned from exec will be filtered out assertEquals(Arrays.asList(new String[] { "something" }), convertedResults); } @@ -196,7 +196,7 @@ public class RjcConnectionPipelineIntegrationTests extends connection.set("testitnow", "somethingelse"); connection.get("testitnow"); connection.exec(); - List convertedResults = convertResults(connection.closePipeline()); + List convertedResults = convertResults(); // "OK" will be decoded to null assertEquals(Arrays.asList(new Object[] { Arrays.asList(new String[] { null, "somethingelse" }) }), convertedResults); @@ -218,8 +218,9 @@ public class RjcConnectionPipelineIntegrationTests extends assertEquals(Arrays.asList(new Object[] { null }), results); } - protected List convertResults(List pipelinedResults) { + protected List convertResults() { List serializedResults = new ArrayList(); + List pipelinedResults = getResults(); for (Object result : pipelinedResults) { Object convertedResult = convertResult(result); // closePipeline attempts to decode "OK" and "QUEUED" which turn