Support zAdd with multiple values

DATAREDIS-99
This commit is contained in:
Jennifer Hickey
2013-08-01 18:05:25 -07:00
parent 628cc175bc
commit 44460dfdee
24 changed files with 262 additions and 3 deletions

View File

@@ -34,6 +34,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
@@ -52,6 +53,7 @@ import org.springframework.data.redis.TestCondition;
import org.springframework.data.redis.connection.RedisListCommands.Position;
import org.springframework.data.redis.connection.RedisStringCommands.BitOperation;
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.core.StringRedisTemplate;
@@ -1472,7 +1474,22 @@ public abstract class AbstractConnectionIntegrationTests {
actual.add(connection.zAdd("myset", 2, "Bob"));
actual.add(connection.zAdd("myset", 1, "James"));
actual.add(connection.zRange("myset", 0, -1));
verifyResults(Arrays.asList(new Object[] { true, true, new LinkedHashSet<String>(Arrays.asList(new String[] { "James", "Bob" })) }));
verifyResults(Arrays.asList(new Object[] { true, true,
new LinkedHashSet<String>(Arrays.asList(new String[] { "James", "Bob" })) }));
}
@Test
public void testZAddMultiple() {
Set<StringTuple> strTuples = new HashSet<StringTuple>();
strTuples.add(new DefaultStringTuple("Bob".getBytes(), "Bob", 2.0));
strTuples.add(new DefaultStringTuple("James".getBytes(), "James", 1.0));
Set<Tuple> tuples = new HashSet<Tuple>();
tuples.add(new DefaultTuple("Joe".getBytes(), 2.5));
actual.add(connection.zAdd("myset",strTuples));
actual.add(connection.zAdd("myset".getBytes(), tuples));
actual.add(connection.zRange("myset", 0, -1));
verifyResults(Arrays.asList(new Object[] { 2l, 1l,
new LinkedHashSet<String>(Arrays.asList(new String[] { "James", "Bob", "Joe" })) }));
}
@Test

View File

@@ -997,6 +997,18 @@ public class DefaultStringRedisConnectionPipelineTests extends DefaultStringRedi
super.testZAdd();
}
@Test
public void testZAddMultipleBytes() {
doReturn(Arrays.asList(new Object[] { 1l })).when(nativeConnection).closePipeline();
super.testZAddMultipleBytes();
}
@Test
public void testZAddMultiple() {
doReturn(Arrays.asList(new Object[] { 1l })).when(nativeConnection).closePipeline();
super.testZAddMultiple();
}
@Test
public void testZCardBytes() {
doReturn(Arrays.asList(new Object[] { 5l })).when(nativeConnection).closePipeline();

View File

@@ -965,6 +965,18 @@ public class DefaultStringRedisConnectionPipelineTxTests extends
super.testZAdd();
}
@Test
public void testZAddMultipleBytes() {
doReturn(Arrays.asList(new Object[] { Arrays.asList(new Object[] { 1l })})).when(nativeConnection).closePipeline();
super.testZAddMultipleBytes();
}
@Test
public void testZAddMultiple() {
doReturn(Arrays.asList(new Object[] { Arrays.asList(new Object[] { 1l })})).when(nativeConnection).closePipeline();
super.testZAddMultiple();
}
@Test
public void testZCardBytes() {
doReturn(Arrays.asList(new Object[] {Arrays.asList(new Object[] { 5l })})).when(nativeConnection).closePipeline();

View File

@@ -1190,6 +1190,26 @@ public class DefaultStringRedisConnectionTests {
verifyResults(Arrays.asList(new Object[] { true }));
}
@Test
public void testZAddMultipleBytes() {
Set<Tuple> tuples = new HashSet<Tuple>();
tuples.add(new DefaultTuple(barBytes, 3.0));
doReturn(1l).when(nativeConnection).zAdd(fooBytes, tuples);
actual.add(connection.zAdd(fooBytes, tuples));
verifyResults(Arrays.asList(new Object[] { 1l }));
}
@Test
public void testZAddMultiple() {
Set<Tuple> tuples = new HashSet<Tuple>();
tuples.add(new DefaultTuple(barBytes, 3.0));
Set<StringTuple> strTuples = new HashSet<StringTuple>();
strTuples.add(new DefaultStringTuple(barBytes, bar, 3.0));
doReturn(1l).when(nativeConnection).zAdd(fooBytes, tuples);
actual.add(connection.zAdd(foo, strTuples));
verifyResults(Arrays.asList(new Object[] { 1l }));
}
@Test
public void testZCardBytes() {
doReturn(5l).when(nativeConnection).zCard(fooBytes);

View File

@@ -964,6 +964,18 @@ public class DefaultStringRedisConnectionTxTests extends DefaultStringRedisConne
super.testZAdd();
}
@Test
public void testZAddMultipleBytes() {
doReturn(Arrays.asList(new Object[] { 1l })).when(nativeConnection).exec();
super.testZAddMultipleBytes();
}
@Test
public void testZAddMultiple() {
doReturn(Arrays.asList(new Object[] { 1l })).when(nativeConnection).exec();
super.testZAddMultiple();
}
@Test
public void testZCardBytes() {
doReturn(Arrays.asList(new Object[] { 5l })).when(nativeConnection).exec();

View File

@@ -16,14 +16,19 @@
package org.springframework.data.redis.connection.jedis;
import java.util.HashSet;
import java.util.Set;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.data.redis.SettingsUtils;
import org.springframework.data.redis.connection.AbstractConnectionIntegrationTests;
import org.springframework.data.redis.connection.DefaultStringTuple;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.ReturnType;
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;
@@ -218,6 +223,14 @@ public class JedisConnectionIntegrationTests extends AbstractConnectionIntegrati
factory2.destroy();
}
@Test(expected=UnsupportedOperationException.class)
public void testZAddSameScores() {
Set<StringTuple> strTuples = new HashSet<StringTuple>();
strTuples.add(new DefaultStringTuple("Bob".getBytes(), "Bob", 2.0));
strTuples.add(new DefaultStringTuple("James".getBytes(), "James", 2.0));
connection.zAdd("myset", strTuples);
}
@Test(expected=InvalidDataAccessApiUsageException.class)
@IfProfileValue(name = "redisVersion", value = "2.6")
public void testEvalReturnSingleError() {

View File

@@ -451,4 +451,9 @@ public class JedisConnectionPipelineIntegrationTests extends
public void testSRemMultiple() {
super.testSRemMultiple();
}
@Test(expected=UnsupportedOperationException.class)
public void testZAddMultiple() {
super.testZAddMultiple();
}
}

View File

@@ -387,4 +387,9 @@ public class JedisConnectionTransactionIntegrationTests extends
public void testSRemMultiple() {
super.testSRemMultiple();
}
@Test(expected=UnsupportedOperationException.class)
public void testZAddMultiple() {
super.testZAddMultiple();
}
}

View File

@@ -585,6 +585,11 @@ public class JRedisConnectionIntegrationTests extends AbstractConnectionIntegrat
super.testSRemMultiple();
}
@Test(expected=UnsupportedOperationException.class)
public void testZAddMultiple() {
super.testZAddMultiple();
}
// Jredis returns null for rPush and lPush
@Test
public void testLLen() {

View File

@@ -21,6 +21,8 @@ import static org.springframework.data.redis.matcher.RedisTestMatchers.isEqual;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import org.junit.After;
@@ -156,4 +158,22 @@ public class DefaultZSetOperationsTests<K,V> {
TypedTuple<V> tuple = tuples.iterator().next();
assertThat(tuple, isEqual(new DefaultTypedTuple<V>(value2, 3.7)));
}
@Test
public void testAddMultiple() {
K key = keyFactory.instance();
V value1 = valueFactory.instance();
V value2 = valueFactory.instance();
V value3 = valueFactory.instance();
Set<TypedTuple<V>> values = new HashSet<TypedTuple<V>>();
values.add(new DefaultTypedTuple<V>(value1, 1.7));
values.add(new DefaultTypedTuple<V>(value2, 3.2));
values.add(new DefaultTypedTuple<V>(value3, 0.8));
assertEquals(Long.valueOf(3), zSetOps.add(key, values));
Set<V> expected = new LinkedHashSet<V>();
expected.add(value3);
expected.add(value1);
expected.add(value2);
assertThat(zSetOps.range(key, 0, -1), isEqual(expected));
}
}