Fix NPEs on Jedis closePipeline/exec after move

DATAREDIS-218
This commit is contained in:
Jennifer Hickey
2013-07-15 14:34:43 -07:00
parent 11e4b03dcb
commit 4f5eb9748a
6 changed files with 98 additions and 3 deletions

View File

@@ -1611,6 +1611,21 @@ public abstract class AbstractConnectionIntegrationTests {
Arrays.asList(new String[] { "foo", "bar" }) }), actual);
}
@Test
public void testMove() {
connection.set("foo", "bar");
actual.add(connection.move("foo", 1));
verifyResults(Arrays.asList(new Object[] { true}), actual);
connection.select(1);
try {
assertEquals("bar",connection.get("foo"));
} finally {
if(connection.exists("foo")) {
connection.del("foo");
}
}
}
protected void verifyResults(List<Object> expected, List<Object> actual) {
assertEquals(expected, convertResults(true));
}

View File

@@ -1043,6 +1043,21 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends
verifyResults(Arrays.asList(new Object[] {Arrays.asList(new Object[] { 0l })}), actual);
}
@Test
public void testMove() {
connection.set("foo", "bar");
actual.add(connection.move("foo", 1));
verifyResults(Arrays.asList(new Object[] { 1l }), actual);
connection.select(1);
try {
assertEquals("bar",connection.get("foo"));
} finally {
if(connection.exists("foo")) {
connection.del("foo");
}
}
}
protected void initConnection() {
connection.openPipeline();
}

View File

@@ -33,8 +33,10 @@ import org.springframework.data.redis.RedisConnectionFailureException;
import org.springframework.data.redis.SettingsUtils;
import org.springframework.data.redis.connection.AbstractConnectionIntegrationTests;
import org.springframework.data.redis.connection.DefaultSortParameters;
import org.springframework.data.redis.connection.DefaultStringRedisConnection;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.SortParameters.Order;
import org.springframework.data.redis.connection.StringRedisConnection;
import org.springframework.test.annotation.IfProfileValue;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -626,4 +628,24 @@ public class JRedisConnectionIntegrationTests extends AbstractConnectionIntegrat
assertEquals("bar", stringSerializer.deserialize(response.getBulkData()));
}
@Test
public void testMove() {
connection.set("foo", "bar");
actual.add(connection.move("foo", 1));
verifyResults(Arrays.asList(new Object[] { true}), actual);
// JRedis does not support select() on existing conn, create new one
JredisConnectionFactory factory2 = new JredisConnectionFactory();
factory2.setDatabase(1);
factory2.afterPropertiesSet();
StringRedisConnection conn2 = new DefaultStringRedisConnection(factory2.getConnection());
try {
assertEquals("bar",conn2.get("foo"));
} finally {
if(conn2.exists("foo")) {
conn2.del("foo");
}
conn2.close();
}
}
}

View File

@@ -22,6 +22,7 @@ import static org.junit.Assert.fail;
import static org.junit.Assume.assumeTrue;
import static org.springframework.data.redis.SpinBarrier.waitFor;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Test;
@@ -36,6 +37,7 @@ import org.springframework.data.redis.connection.DefaultStringRedisConnection;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisStringCommands.BitOperation;
import org.springframework.data.redis.connection.ReturnType;
import org.springframework.data.redis.connection.StringRedisConnection;
import org.springframework.test.annotation.IfProfileValue;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -261,4 +263,24 @@ public class LettuceConnectionIntegrationTests extends AbstractConnectionIntegra
}
}, 3000l));
}
@Test
public void testMove() {
connection.set("foo", "bar");
actual.add(connection.move("foo", 1));
verifyResults(Arrays.asList(new Object[] { true}), actual);
// Lettuce does not support select when using shared conn, use a new conn factory
LettuceConnectionFactory factory2 = new LettuceConnectionFactory();
factory2.setDatabase(1);
factory2.afterPropertiesSet();
StringRedisConnection conn2 = new DefaultStringRedisConnection(factory2.getConnection());
try {
assertEquals("bar",conn2.get("foo"));
} finally {
if(conn2.exists("foo")) {
conn2.del("foo");
}
conn2.close();
}
}
}

View File

@@ -42,8 +42,9 @@ import org.springframework.data.redis.TestCondition;
import org.springframework.data.redis.connection.AbstractConnectionPipelineIntegrationTests;
import org.springframework.data.redis.connection.DefaultStringRedisConnection;
import org.springframework.data.redis.connection.DefaultStringTuple;
import org.springframework.data.redis.connection.ReturnType;
import org.springframework.data.redis.connection.RedisStringCommands.BitOperation;
import org.springframework.data.redis.connection.ReturnType;
import org.springframework.data.redis.connection.StringRedisConnection;
import org.springframework.data.redis.connection.StringRedisConnection.StringTuple;
import org.springframework.test.annotation.IfProfileValue;
import org.springframework.test.context.ContextConfiguration;
@@ -449,6 +450,26 @@ public class LettuceConnectionPipelineIntegrationTests extends
}, 3000l));
}
@Test
public void testMove() {
connection.set("foo", "bar");
actual.add(connection.move("foo", 1));
verifyResults(Arrays.asList(new Object[] { true}), actual);
// Lettuce does not support select when using shared conn, use a new conn factory
LettuceConnectionFactory factory2 = new LettuceConnectionFactory();
factory2.setDatabase(1);
factory2.afterPropertiesSet();
StringRedisConnection conn2 = new DefaultStringRedisConnection(factory2.getConnection());
try {
assertEquals("bar",conn2.get("foo"));
} finally {
if(conn2.exists("foo")) {
conn2.del("foo");
}
conn2.close();
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
protected Object convertResult(Object result) {
Object convertedResult = super.convertResult(result);