Add support for SMISMEMBER.
Allows querying with a single command whether multiple elements are members of a set. Also, refine DefaultRedisSet.containsAll(…) implementation. Closes #2037 Original Pull Request: #2105
This commit is contained in:
committed by
Christoph Strobl
parent
280d9541da
commit
90095d1c89
@@ -1656,6 +1656,15 @@ public abstract class AbstractConnectionIntegrationTests {
|
||||
verifyResults(Arrays.asList(new Object[] { 1L, 1L, true, false }));
|
||||
}
|
||||
|
||||
@Test // GH-2037
|
||||
@EnabledOnCommand("SMISMEMBER")
|
||||
void testSMIsMember() {
|
||||
actual.add(connection.sAdd("myset", "foo"));
|
||||
actual.add(connection.sAdd("myset", "bar"));
|
||||
actual.add(connection.sMIsMember("myset", "foo", "bar", "baz"));
|
||||
verifyResults(Arrays.asList(new Object[] { 1L, 1L, Arrays.asList(true, true, false) }));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSMove() {
|
||||
actual.add(connection.sAdd("myset", "foo"));
|
||||
|
||||
@@ -470,6 +470,9 @@ public interface ClusterConnectionTests {
|
||||
// DATAREDIS-315
|
||||
void sIsMemberShouldReturnTrueIfValueIsMemberOfSet();
|
||||
|
||||
// GH-2037
|
||||
void sMIsMemberShouldReturnCorrectValues();
|
||||
|
||||
// DATAREDIS-315
|
||||
void sMembersShouldReturnValuesContainedInSetCorrectly();
|
||||
|
||||
|
||||
@@ -1589,6 +1589,16 @@ public class JedisClusterConnectionTests implements ClusterConnectionTests {
|
||||
assertThat(clusterConnection.sIsMember(KEY_1_BYTES, VALUE_1_BYTES)).isTrue();
|
||||
}
|
||||
|
||||
@Test // GH-2037
|
||||
@EnabledOnCommand("SMISMEMBER")
|
||||
public void sMIsMemberShouldReturnCorrectValues() {
|
||||
|
||||
nativeConnection.sadd(KEY_1, VALUE_1, VALUE_2);
|
||||
|
||||
assertThat(clusterConnection.sMIsMember(KEY_1_BYTES, VALUE_1_BYTES, VALUE_2_BYTES, VALUE_3_BYTES))
|
||||
.containsExactly(true, true, false);
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-315
|
||||
public void sMembersShouldReturnValuesContainedInSetCorrectly() {
|
||||
|
||||
|
||||
@@ -1624,6 +1624,16 @@ public class LettuceClusterConnectionTests implements ClusterConnectionTests {
|
||||
assertThat(clusterConnection.sIsMember(KEY_1_BYTES, VALUE_1_BYTES)).isTrue();
|
||||
}
|
||||
|
||||
@Test // GH-2037
|
||||
@EnabledOnCommand("SMISMEMBER")
|
||||
public void sMIsMemberShouldReturnCorrectValues() {
|
||||
|
||||
nativeConnection.sadd(KEY_1, VALUE_1, VALUE_2);
|
||||
|
||||
assertThat(clusterConnection.sMIsMember(KEY_1_BYTES, VALUE_1_BYTES, VALUE_2_BYTES, VALUE_3_BYTES))
|
||||
.containsExactly(true, true, false);
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-315
|
||||
public void sMembersShouldReturnValuesContainedInSetCorrectly() {
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import reactor.test.StepVerifier;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.springframework.data.redis.core.ScanOptions;
|
||||
import org.springframework.data.redis.test.condition.EnabledOnCommand;
|
||||
import org.springframework.data.redis.test.extension.parametrized.ParameterizedRedisTest;
|
||||
|
||||
/**
|
||||
@@ -143,6 +144,18 @@ public class LettuceReactiveSetCommandsIntegrationIntegrationTests extends Lettu
|
||||
assertThat(connection.setCommands().sIsMember(KEY_1_BBUFFER, VALUE_3_BBUFFER).block()).isFalse();
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // GH-2037
|
||||
@EnabledOnCommand("SMISMEMBER")
|
||||
void sMIsMemberShouldReturnCorrectly() {
|
||||
|
||||
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2);
|
||||
|
||||
connection.setCommands().sMIsMember(KEY_1_BBUFFER, Arrays.asList(VALUE_1_BBUFFER, VALUE_3_BBUFFER)) //
|
||||
.as(StepVerifier::create) //
|
||||
.expectNext(Arrays.asList(true, false)) //
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // DATAREDIS-525, DATAREDIS-647
|
||||
void sInterShouldIntersectSetsCorrectly() {
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.springframework.data.redis.ObjectFactory;
|
||||
import org.springframework.data.redis.connection.RedisConnection;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.core.ReactiveOperationsTestParams.Fixture;
|
||||
import org.springframework.data.redis.test.condition.EnabledOnCommand;
|
||||
import org.springframework.data.redis.test.extension.parametrized.MethodSource;
|
||||
import org.springframework.data.redis.test.extension.parametrized.ParameterizedRedisTest;
|
||||
|
||||
@@ -154,6 +155,23 @@ public class DefaultReactiveSetOperationsIntegrationTests<K, V> {
|
||||
setOperations.isMember(key, value1).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // GH-2037
|
||||
@EnabledOnCommand("SMISMEMBER")
|
||||
void isMembers() {
|
||||
|
||||
assumeThat(valueFactory instanceof ByteBufferObjectFactory).isFalse();
|
||||
|
||||
K key = keyFactory.instance();
|
||||
V value1 = valueFactory.instance();
|
||||
V value2 = valueFactory.instance();
|
||||
|
||||
setOperations.add(key, value1).as(StepVerifier::create).expectNext(1L).verifyComplete();
|
||||
setOperations.isMember(key, value1, value2).as(StepVerifier::create).consumeNextWith(actual -> {
|
||||
|
||||
assertThat(actual).containsEntry(value1, true).containsEntry(value2, false);
|
||||
}).verifyComplete();
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // DATAREDIS-602, DATAREDIS-873
|
||||
void intersect() {
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import java.util.Set;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
|
||||
import org.springframework.data.redis.ObjectFactory;
|
||||
import org.springframework.data.redis.test.condition.EnabledOnCommand;
|
||||
import org.springframework.data.redis.test.extension.parametrized.MethodSource;
|
||||
import org.springframework.data.redis.test.extension.parametrized.ParameterizedRedisTest;
|
||||
|
||||
@@ -322,4 +323,23 @@ public class DefaultSetOperationsIntegrationTests<K, V> {
|
||||
assertThat(setOps.intersectAndStore(sourceKey1, sourceKey2, destinationKey)).isEqualTo(2L);
|
||||
assertThat(setOps.intersectAndStore(Arrays.asList(sourceKey1, sourceKey2), destinationKey)).isEqualTo(2L);
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // GH-2037
|
||||
@EnabledOnCommand("SMISMEMBER")
|
||||
void isMember() {
|
||||
|
||||
K key = keyFactory.instance();
|
||||
|
||||
V v1 = valueFactory.instance();
|
||||
V v2 = valueFactory.instance();
|
||||
V v3 = valueFactory.instance();
|
||||
V v4 = valueFactory.instance();
|
||||
|
||||
setOps.add(key, v1, v2, v3);
|
||||
|
||||
assertThat(setOps.isMember(key, v1)).isTrue();
|
||||
assertThat(setOps.isMember(key, v4)).isFalse();
|
||||
assertThat(setOps.isMember(key, v1, v2, v3, v4)).containsEntry(v1, true).containsEntry(v2, true)
|
||||
.containsEntry(v3, true).containsEntry(v4, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import static org.assertj.core.api.Assertions.*;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -30,6 +31,7 @@ import org.springframework.data.redis.ObjectFactory;
|
||||
import org.springframework.data.redis.core.BoundSetOperations;
|
||||
import org.springframework.data.redis.core.Cursor;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.test.condition.EnabledOnCommand;
|
||||
import org.springframework.data.redis.test.extension.parametrized.ParameterizedRedisTest;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
@@ -67,6 +69,21 @@ public abstract class AbstractRedisSetIntegrationTests<T> extends AbstractRedisC
|
||||
return new DefaultRedisSet<>((BoundSetOperations<String, T>) set.getOperations().boundSetOps(key));
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // GH-2037
|
||||
@EnabledOnCommand("SMISMEMBER")
|
||||
void testContainsAll() {
|
||||
T t1 = getT();
|
||||
T t2 = getT();
|
||||
T t3 = getT();
|
||||
|
||||
set.add(t1);
|
||||
set.add(t2);
|
||||
|
||||
assertThat(set.containsAll(Arrays.asList(t1, t2, t3))).isFalse();
|
||||
assertThat(set.containsAll(Arrays.asList(t1, t2))).isTrue();
|
||||
assertThat(set.containsAll(Collections.emptyList())).isTrue();
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest
|
||||
void testDiff() {
|
||||
RedisSet<T> diffSet1 = createSetFor("test:set:diff1");
|
||||
|
||||
Reference in New Issue
Block a user