Add tests for Jedis ops in transactions

This commit is contained in:
Jennifer Hickey
2013-04-01 16:11:38 -07:00
parent 8ec6b79e09
commit 634e8ccd72
4 changed files with 115 additions and 23 deletions

View File

@@ -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<Object> results = connection.closePipeline();
List<Object> 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<Object> results = convertResults(connection.closePipeline());
List<Object> 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<Object> results = convertResults(connection.closePipeline());
List<Object> 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<Object> results = convertResults(connection.closePipeline());
List<Object> 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<Object> results = convertResults(connection.closePipeline());
List<Object> 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<Object> convertedResults = convertResults(connection.closePipeline());
List<Object> 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<Object> convertedResults = convertResults(connection.closePipeline());
List<Object> 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<Object> convertedResults = convertResults(connection.closePipeline());
List<Object> 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<Object> results = convertResults(connection.closePipeline());
List<Object> results = convertResults();
assertEquals(3, results.size());
assertTrue(new HashSet<String>(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<Object> results = convertResults(connection.closePipeline());
List<Object> results = convertResults();
assertEquals(3, results.size());
assertTrue(new HashSet<String>(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<Object> expected, List<Object> actual) {
List<Object> expectedPipeline = new ArrayList<Object>();
for (int i = 0; i < actual.size(); i++) {
expectedPipeline.add(null);
}
assertEquals(expectedPipeline, actual);
List<Object> pipelinedResults = connection.closePipeline();
assertEquals(expected, convertResults(pipelinedResults));
assertEquals(expected, convertResults());
}
protected List<Object> convertResults(List<Object> pipelinedResults) {
protected List<Object> getResults() {
return connection.closePipeline();
}
protected List<Object> convertResults() {
List<Object> pipelinedResults = getResults();
List<Object> serializedResults = new ArrayList<Object>();
for (Object result : pipelinedResults) {
Object convertedResult = convertResult(result);

View File

@@ -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<StringTuple> tuples = new ArrayList<StringTuple>();
for (Tuple value : ((Set<Tuple>) convertedResult)) {

View File

@@ -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<Object> getResults() {
return connection.exec();
}
}

View File

@@ -161,7 +161,7 @@ public class RjcConnectionPipelineIntegrationTests extends
connection.set("key", "value");
assertNull(connection.get("key"));
assertNull(connection.exec());
List<Object> convertedResults = convertResults(connection.closePipeline());
List<Object> 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<Object> convertedResults = convertResults(connection.closePipeline());
List<Object> 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<Object> convertedResults = convertResults(connection.closePipeline());
List<Object> 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<Object> convertResults(List<Object> pipelinedResults) {
protected List<Object> convertResults() {
List<Object> serializedResults = new ArrayList<Object>();
List<Object> pipelinedResults = getResults();
for (Object result : pipelinedResults) {
Object convertedResult = convertResult(result);
// closePipeline attempts to decode "OK" and "QUEUED" which turn