Fix Lettuce and RJC zRevRangeByScore incorrect parameter ordering

DATAREDIS-167

- Fix min/max parameter ordering

- Fix Lettuce NPEs during transactions

- Fix LettuceConnection not passing offset/count to zRevRangeByScoreWithScores
This commit is contained in:
Jennifer Hickey
2013-04-09 17:07:51 -07:00
parent a01db2b732
commit f6c44dba78
6 changed files with 169 additions and 17 deletions

View File

@@ -46,6 +46,7 @@ import org.springframework.data.redis.Address;
import org.springframework.data.redis.Person;
import org.springframework.data.redis.connection.RedisListCommands.Position;
import org.springframework.data.redis.connection.RedisZSetCommands.Aggregate;
import org.springframework.data.redis.connection.RedisZSetCommands.Tuple;
import org.springframework.data.redis.connection.SortParameters.Order;
import org.springframework.data.redis.connection.StringRedisConnection.StringTuple;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
@@ -53,6 +54,7 @@ import org.springframework.data.redis.connection.srp.SrpConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationUtils;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.test.annotation.IfProfileValue;
import org.springframework.test.annotation.ProfileValueSourceConfiguration;
@@ -78,9 +80,12 @@ public abstract class AbstractConnectionIntegrationTests {
@Autowired
protected RedisConnectionFactory connectionFactory;
protected RedisConnection byteConnection;
@Before
public void setUp() {
connection = new DefaultStringRedisConnection(connectionFactory.getConnection());
byteConnection = connectionFactory.getConnection();
connection = new DefaultStringRedisConnection(byteConnection);
}
@After
@@ -1001,6 +1006,53 @@ public abstract class AbstractConnectionIntegrationTests {
connection.zRevRangeWithScores("myset", 0, -1));
}
@Test
public void testZRevRangeByScoreOffsetCount() {
byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes());
byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes());
assertEquals(
new LinkedHashSet<String>(Arrays.asList(new String[] { "Bob",
"James" })), SerializationUtils.deserialize(
byteConnection.zRevRangeByScore("myset".getBytes(), 0d,
3d, 0, 5), stringSerializer));
}
@Test
public void testZRevRangeByScore() {
byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes());
byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes());
assertEquals(
new LinkedHashSet<String>(Arrays.asList(new String[] { "Bob",
"James" })), SerializationUtils.deserialize(
byteConnection.zRevRangeByScore("myset".getBytes(), 0d,
3d), stringSerializer));
}
@Test
public void testZRevRangeByScoreWithScoresOffsetCount() {
byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes());
byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes());
assertEquals(
new LinkedHashSet<Tuple>(
Arrays.asList(new Tuple[] { new DefaultTuple("Bob"
.getBytes(), 2d) })),
byteConnection.zRevRangeByScoreWithScores("myset".getBytes(),
0d, 3d, 0, 1));
}
@Test
public void testZRevRangeByScoreWithScores() {
byteConnection.zAdd("myset".getBytes(), 2, "Bob".getBytes());
byteConnection.zAdd("myset".getBytes(), 1, "James".getBytes());
byteConnection.zAdd("myset".getBytes(), 3, "Joe".getBytes());
assertEquals(
new LinkedHashSet<Tuple>(Arrays.asList(new Tuple[] {
new DefaultTuple("Bob".getBytes(), 2d),
new DefaultTuple("James".getBytes(), 1d) })),
byteConnection.zRevRangeByScoreWithScores("myset".getBytes(),
0d, 2d));
}
@Test
public void testZRank() {
connection.zAdd("myset", 2, "Bob");

View File

@@ -617,6 +617,63 @@ abstract public class AbstractConnectionPipelineIntegrationTests extends
actual);
}
@Test
public void testZRevRangeByScoreOffsetCount() {
actual.add(connection.zAdd("myset".getBytes(), 2, "Bob".getBytes()));
actual.add(connection.zAdd("myset".getBytes(), 1, "James".getBytes()));
actual.add(byteConnection.zRevRangeByScore("myset".getBytes(), 0d, 3d,
0, 5));
verifyResults(
Arrays.asList(new Object[] { 1l, 1l,
Arrays.asList(new String[] { "Bob", "James" }) }),
actual);
}
@Test
public void testZRevRangeByScore() {
actual.add(connection.zAdd("myset".getBytes(), 2, "Bob".getBytes()));
actual.add(connection.zAdd("myset".getBytes(), 1, "James".getBytes()));
actual.add(byteConnection.zRevRangeByScore("myset".getBytes(), 0d, 3d));
verifyResults(
Arrays.asList(new Object[] { 1l, 1l,
Arrays.asList(new String[] { "Bob", "James" }) }),
actual);
}
@Test
public void testZRevRangeByScoreWithScoresOffsetCount() {
convertResultToTuples = true;
actual.add(connection.zAdd("myset".getBytes(), 2, "Bob".getBytes()));
actual.add(connection.zAdd("myset".getBytes(), 1, "James".getBytes()));
actual.add(byteConnection.zRevRangeByScoreWithScores(
"myset".getBytes(), 0d, 3d, 0, 1));
verifyResults(Arrays.asList(new Object[] {
1l,
1l,
Arrays.asList(new StringTuple[] { new DefaultStringTuple("Bob"
.getBytes(), "Bob", 2d) }) }), actual);
}
@Test
public void testZRevRangeByScoreWithScores() {
convertResultToTuples = true;
actual.add(connection.zAdd("myset".getBytes(), 2, "Bob".getBytes()));
actual.add(connection.zAdd("myset".getBytes(), 1, "James".getBytes()));
actual.add(connection.zAdd("myset".getBytes(), 3, "Joe".getBytes()));
actual.add(byteConnection.zRevRangeByScoreWithScores(
"myset".getBytes(), 0d, 2d));
verifyResults(
Arrays.asList(new Object[] {
1l,
1l,
1l,
Arrays.asList(new StringTuple[] {
new DefaultStringTuple("Bob".getBytes(), "Bob",
2d),
new DefaultStringTuple("James".getBytes(),
"James", 1d) }) }), actual);
}
@Test
public void testZRank() {
actual.add(connection.zAdd("myset", 2, "Bob"));

View File

@@ -117,6 +117,26 @@ public class JedisConnectionPipelineIntegrationTests extends
super.testInfo();
}
@Test(expected = RedisSystemException.class)
public void testZRevRangeByScore() {
super.testZRevRangeByScore();
}
@Test(expected = RedisSystemException.class)
public void testZRevRangeByScoreOffsetCount() {
super.testZRevRangeByScoreOffsetCount();
}
@Test(expected = RedisSystemException.class)
public void testZRevRangeByScoreWithScores() {
super.testZRevRangeByScoreWithScores();
}
@Test(expected = RedisSystemException.class)
public void testZRevRangeByScoreWithScoresOffsetCount() {
super.testZRevRangeByScoreWithScoresOffsetCount();
}
// Overrides, usually due to return values being Long vs Boolean or Set vs
// List

View File

@@ -240,6 +240,27 @@ public class JRedisConnectionIntegrationTests extends AbstractConnectionIntegrat
super.testBRPopLPushTimeout();
}
@Test(expected = UnsupportedOperationException.class)
public void testZRevRangeByScore() {
super.testZRevRangeByScore();
}
@Test(expected = UnsupportedOperationException.class)
public void testZRevRangeByScoreOffsetCount() {
super.testZRevRangeByScoreOffsetCount();
}
@Test(expected = UnsupportedOperationException.class)
public void testZRevRangeByScoreWithScores() {
super.testZRevRangeByScoreWithScores();
}
@Test(expected = UnsupportedOperationException.class)
public void testZRevRangeByScoreWithScoresOffsetCount() {
super.testZRevRangeByScoreWithScoresOffsetCount();
}
// Jredis returns null for rPush
@Test
public void testSort() {