DATAREDIS-668 - Add SPOP with COUNT command.
We now support SPOP command with COUNT option throughout the imperative, cluster and reactive API. Original pull request: #259.
This commit is contained in:
committed by
Mark Paluch
parent
3616d69bf6
commit
c87e0af0ef
@@ -27,7 +27,18 @@ import static org.springframework.data.redis.connection.RedisGeoCommands.Distanc
|
||||
import static org.springframework.data.redis.connection.RedisGeoCommands.GeoRadiusCommandArgs.*;
|
||||
import static org.springframework.data.redis.core.ScanOptions.*;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
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.CountDownLatch;
|
||||
import java.util.concurrent.LinkedBlockingDeque;
|
||||
@@ -36,6 +47,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import org.hamcrest.core.IsNot;
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
@@ -1458,6 +1470,17 @@ public abstract class AbstractConnectionIntegrationTests {
|
||||
new HashSet<String>(Arrays.asList(new String[] { "foo", "bar" })).contains((String) getResults().get(2)));
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-688
|
||||
public void testSPopWithCount() {
|
||||
|
||||
actual.add(connection.sAdd("myset", "foo"));
|
||||
actual.add(connection.sAdd("myset", "bar"));
|
||||
actual.add(connection.sAdd("myset", "baz"));
|
||||
actual.add(connection.sPop("myset", 2));
|
||||
|
||||
assertThat((Collection<Object>) getResults().get(3), hasSize(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSRandMember() {
|
||||
actual.add(connection.sAdd("myset", "foo"));
|
||||
|
||||
@@ -28,7 +28,16 @@ import redis.clients.jedis.JedisPool;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.junit.After;
|
||||
@@ -919,6 +928,15 @@ public class JedisClusterConnectionTests implements ClusterConnectionTests {
|
||||
assertThat(clusterConnection.sPop(KEY_1_BYTES), notNullValue());
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-668
|
||||
public void sPopWithCountShouldPopValueFromSetCorrectly() {
|
||||
|
||||
nativeConnection.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
|
||||
|
||||
assertThat(clusterConnection.setCommands().sPop(KEY_1_BYTES, 2), hasSize(2));
|
||||
assertThat(nativeConnection.scard(KEY_1), is(1L));
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-315
|
||||
public void sMoveShouldWorkWhenKeysMapToSameSlot() {
|
||||
|
||||
|
||||
@@ -934,6 +934,15 @@ public class LettuceClusterConnectionTests implements ClusterConnectionTests {
|
||||
assertThat(clusterConnection.sPop(KEY_1_BYTES), notNullValue());
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-668
|
||||
public void sPopWithCountShouldPopValueFromSetCorrectly() {
|
||||
|
||||
nativeConnection.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
|
||||
|
||||
assertThat(clusterConnection.setCommands().sPop(KEY_1_BYTES, 2), hasSize(2));
|
||||
assertThat(nativeConnection.scard(KEY_1), is(1L));
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-315
|
||||
public void sMoveShouldWorkWhenKeysMapToSameSlot() {
|
||||
|
||||
|
||||
@@ -69,6 +69,14 @@ public class LettuceReactiveSetCommandsTests extends LettuceReactiveCommandsTest
|
||||
assertThat(connection.setCommands().sPop(KEY_1_BBUFFER).block(), is(notNullValue()));
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-668
|
||||
public void sPopCountShouldRetrieveValues() {
|
||||
|
||||
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
|
||||
|
||||
StepVerifier.create(connection.setCommands().sPop(KEY_1_BBUFFER, 2)).expectNextCount(2).verifyComplete();
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-525
|
||||
public void sPopShouldReturnNullWhenNotPresent() {
|
||||
assertThat(connection.setCommands().sPop(KEY_1_BBUFFER).block(), is(nullValue()));
|
||||
|
||||
@@ -133,6 +133,21 @@ public class DefaultReactiveSetOperationsIntegrationTests<K, V> {
|
||||
}).verifyComplete();
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-668
|
||||
public void popWithCount() {
|
||||
|
||||
assumeFalse(valueFactory instanceof ByteBufferObjectFactory);
|
||||
|
||||
K key = keyFactory.instance();
|
||||
V value1 = valueFactory.instance();
|
||||
V value2 = valueFactory.instance();
|
||||
V value3 = valueFactory.instance();
|
||||
|
||||
StepVerifier.create(setOperations.add(key, value1, value2, value3)).expectNext(3L).verifyComplete();
|
||||
StepVerifier.create(setOperations.pop(key, 2)).expectNextCount(2).verifyComplete();
|
||||
StepVerifier.create(setOperations.size(key)).expectNext(1L).verifyComplete();
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-602
|
||||
public void move() {
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package org.springframework.data.redis.core;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assume.*;
|
||||
import static org.springframework.data.redis.matcher.RedisTestMatchers.*;
|
||||
@@ -28,6 +29,7 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.hamcrest.CoreMatchers;
|
||||
import org.hamcrest.collection.IsCollectionWithSize;
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Before;
|
||||
@@ -175,6 +177,20 @@ public class DefaultSetOperationsTests<K, V> {
|
||||
assertTrue(setOps.members(key).isEmpty());
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-668
|
||||
public void testPopWithCount() {
|
||||
|
||||
K key = keyFactory.instance();
|
||||
V v1 = valueFactory.instance();
|
||||
V v2 = valueFactory.instance();
|
||||
V v3 = valueFactory.instance();
|
||||
setOps.add(key, v1, v2, v3);
|
||||
|
||||
List<V> result = setOps.pop(key, 2);
|
||||
assertThat(result, hasSize(2));
|
||||
assertThat(result.get(0), instanceOf(v1.getClass()));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void testRandomMember() {
|
||||
|
||||
Reference in New Issue
Block a user