Add support for ZRANDMEMBER.
Closes: #2049 Original Pull Request: #2104
This commit is contained in:
committed by
Christoph Strobl
parent
0b8fbae2c3
commit
a523b821c5
@@ -2026,6 +2026,39 @@ public abstract class AbstractConnectionIntegrationTests {
|
||||
new DefaultStringTuple("James".getBytes(), "James", 12d))) }));
|
||||
}
|
||||
|
||||
@Test // GH-2049
|
||||
@EnabledOnCommand("ZRANDMEMBER")
|
||||
void testZRandMember() {
|
||||
|
||||
actual.add(connection.zAdd("myset", 2, "Bob"));
|
||||
actual.add(connection.zAdd("myset", 1, "James"));
|
||||
actual.add(connection.zRandMember("myset"));
|
||||
actual.add(connection.zRandMember("myset", 2));
|
||||
|
||||
List<Object> results = getResults();
|
||||
|
||||
assertThat(results.get(2)).isNotNull();
|
||||
assertThat(new LinkedHashSet<>((Collection) results.get(3)))
|
||||
.isEqualTo(new LinkedHashSet<>(Arrays.asList("Bob", "James")));
|
||||
}
|
||||
|
||||
@Test // GH-2049
|
||||
@EnabledOnCommand("ZRANDMEMBER")
|
||||
void testZRandMemberWithScore() {
|
||||
|
||||
actual.add(connection.zAdd("myset", 2, "Bob"));
|
||||
actual.add(connection.zAdd("myset", 1, "James"));
|
||||
actual.add(connection.zRandMemberWithScore("myset"));
|
||||
actual.add(connection.zRandMemberWithScores("myset", 2));
|
||||
|
||||
List<Object> results = getResults();
|
||||
|
||||
assertThat(results.get(2)).isNotNull();
|
||||
assertThat(new LinkedHashSet<>((Collection) results.get(3)))
|
||||
.isEqualTo(new LinkedHashSet<>(Arrays.asList(new DefaultStringTuple("Bob".getBytes(), "Bob", 2d),
|
||||
new DefaultStringTuple("James".getBytes(), "James", 1d))));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testZRangeWithScores() {
|
||||
|
||||
|
||||
@@ -637,6 +637,12 @@ public interface ClusterConnectionTests {
|
||||
// GH-2007
|
||||
void bzPopMaxShouldWorkCorrectly();
|
||||
|
||||
// GH-2049
|
||||
void zRandMemberShouldReturnResultCorrectly();
|
||||
|
||||
// GH-2049
|
||||
void zRandMemberWithScoreShouldReturnResultCorrectly();
|
||||
|
||||
// DATAREDIS-315
|
||||
void zRangeByLexShouldReturnResultCorrectly();
|
||||
|
||||
|
||||
@@ -2139,6 +2139,29 @@ public class JedisClusterConnectionTests implements ClusterConnectionTests {
|
||||
.isEqualTo(new DefaultTuple(VALUE_3_BYTES, 30D));
|
||||
}
|
||||
|
||||
@Test // GH-2049
|
||||
@EnabledOnCommand("ZRANDMEMBER")
|
||||
public void zRandMemberShouldReturnResultCorrectly() {
|
||||
|
||||
nativeConnection.zadd(KEY_1_BYTES, 10D, VALUE_1_BYTES);
|
||||
nativeConnection.zadd(KEY_1_BYTES, 20D, VALUE_2_BYTES);
|
||||
|
||||
assertThat(clusterConnection.zRandMember(KEY_1_BYTES)).isIn(VALUE_1_BYTES, VALUE_2_BYTES);
|
||||
assertThat(clusterConnection.zRandMember(KEY_1_BYTES, 2)).hasSize(2).contains(VALUE_1_BYTES, VALUE_2_BYTES);
|
||||
|
||||
}
|
||||
|
||||
@Test // GH-2049
|
||||
@EnabledOnCommand("ZRANDMEMBER")
|
||||
public void zRandMemberWithScoreShouldReturnResultCorrectly() {
|
||||
|
||||
nativeConnection.zadd(KEY_1_BYTES, 10D, VALUE_1_BYTES);
|
||||
nativeConnection.zadd(KEY_1_BYTES, 20D, VALUE_2_BYTES);
|
||||
|
||||
assertThat(clusterConnection.zRandMemberWithScore(KEY_1_BYTES)).isNotNull();
|
||||
assertThat(clusterConnection.zRandMemberWithScore(KEY_1_BYTES, 2)).hasSize(2);
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-315
|
||||
public void zRangeByLexShouldReturnResultCorrectly() {
|
||||
|
||||
|
||||
@@ -2179,6 +2179,29 @@ public class LettuceClusterConnectionTests implements ClusterConnectionTests {
|
||||
.isEqualTo(new DefaultTuple(VALUE_3_BYTES, 30D));
|
||||
}
|
||||
|
||||
@Test // GH-2049
|
||||
@EnabledOnCommand("ZRANDMEMBER")
|
||||
public void zRandMemberShouldReturnResultCorrectly() {
|
||||
|
||||
nativeConnection.zadd(KEY_1, 10D, VALUE_1);
|
||||
nativeConnection.zadd(KEY_1, 20D, VALUE_2);
|
||||
|
||||
assertThat(clusterConnection.zRandMember(KEY_1_BYTES)).isIn(VALUE_1_BYTES, VALUE_2_BYTES);
|
||||
assertThat(clusterConnection.zRandMember(KEY_1_BYTES, 2)).hasSize(2).contains(VALUE_1_BYTES, VALUE_2_BYTES);
|
||||
|
||||
}
|
||||
|
||||
@Test // GH-2049
|
||||
@EnabledOnCommand("ZRANDMEMBER")
|
||||
public void zRandMemberWithScoreShouldReturnResultCorrectly() {
|
||||
|
||||
nativeConnection.zadd(KEY_1, 10D, VALUE_1);
|
||||
nativeConnection.zadd(KEY_1, 20D, VALUE_2);
|
||||
|
||||
assertThat(clusterConnection.zRandMemberWithScore(KEY_1_BYTES)).isNotNull();
|
||||
assertThat(clusterConnection.zRandMemberWithScore(KEY_1_BYTES, 2)).hasSize(2);
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-315
|
||||
public void zRangeByLexShouldReturnResultCorrectly() {
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
|
||||
import org.springframework.data.domain.Range;
|
||||
import org.springframework.data.redis.ByteBufferObjectFactory;
|
||||
@@ -142,6 +143,47 @@ public class DefaultReactiveZSetOperationsIntegrationTests<K, V> {
|
||||
zSetOperations.incrementScore(key, value, 1.1).as(StepVerifier::create).expectNext(43.2).verifyComplete();
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // GH-2049
|
||||
@EnabledOnCommand("ZRANDMEMBER")
|
||||
void randomMember() {
|
||||
|
||||
K key = keyFactory.instance();
|
||||
V value1 = valueFactory.instance();
|
||||
V value2 = valueFactory.instance();
|
||||
|
||||
zSetOperations.add(key, value1, 42.1).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
zSetOperations.add(key, value2, 10).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
|
||||
zSetOperations.randomMember(key).as(StepVerifier::create).consumeNextWith(actual -> {
|
||||
|
||||
assertThat(actual).isIn(value1, value2);
|
||||
}).verifyComplete();
|
||||
|
||||
zSetOperations.randomMembers(key, 2).as(StepVerifier::create).expectNextCount(2).verifyComplete();
|
||||
zSetOperations.distinctRandomMembers(key, 2).as(StepVerifier::create).expectNextCount(2).verifyComplete();
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // GH-2049
|
||||
@Disabled("https://github.com/redis/redis/issues/9160")
|
||||
@EnabledOnCommand("ZRANDMEMBER")
|
||||
void randomMemberWithScore() {
|
||||
|
||||
K key = keyFactory.instance();
|
||||
V value1 = valueFactory.instance();
|
||||
V value2 = valueFactory.instance();
|
||||
|
||||
zSetOperations.add(key, value1, 42.1).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
zSetOperations.add(key, value2, 10).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
|
||||
zSetOperations.randomMemberWithScore(key).as(StepVerifier::create).consumeNextWith(actual -> {
|
||||
|
||||
assertThat(actual).isIn(new DefaultTypedTuple<>(value1, 42.1d), new DefaultTypedTuple<>(value2, 10d));
|
||||
}).verifyComplete();
|
||||
|
||||
zSetOperations.randomMembersWithScore(key, 2).as(StepVerifier::create).expectNextCount(2).verifyComplete();
|
||||
zSetOperations.distinctRandomMembersWithScore(key, 2).as(StepVerifier::create).expectNextCount(2).verifyComplete();
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // DATAREDIS-602
|
||||
void rank() {
|
||||
|
||||
|
||||
@@ -27,12 +27,14 @@ import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
|
||||
import org.springframework.data.redis.DoubleAsStringObjectFactory;
|
||||
import org.springframework.data.redis.DoubleObjectFactory;
|
||||
import org.springframework.data.redis.LongAsStringObjectFactory;
|
||||
import org.springframework.data.redis.LongObjectFactory;
|
||||
import org.springframework.data.redis.ObjectFactory;
|
||||
import org.springframework.data.redis.RawObjectFactory;
|
||||
import org.springframework.data.redis.connection.RedisZSetCommands;
|
||||
import org.springframework.data.redis.connection.RedisZSetCommands.Weights;
|
||||
import org.springframework.data.redis.core.ZSetOperations.TypedTuple;
|
||||
@@ -187,6 +189,49 @@ public class DefaultZSetOperationsIntegrationTests<K, V> {
|
||||
assertThat(tuple).isEqualTo(new DefaultTypedTuple<>(value1, 5.7));
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // GH-2049
|
||||
@EnabledOnCommand("ZRANDMEMBER")
|
||||
void testRandomMember() {
|
||||
|
||||
K key = keyFactory.instance();
|
||||
V value1 = valueFactory.instance();
|
||||
V value2 = valueFactory.instance();
|
||||
V value3 = valueFactory.instance();
|
||||
|
||||
zSetOps.add(key, value1, 1.9);
|
||||
zSetOps.add(key, value2, 3.7);
|
||||
zSetOps.add(key, value3, 5.8);
|
||||
|
||||
assertThat(zSetOps.randomMember(key)).isIn(value1, value2, value3);
|
||||
assertThat(zSetOps.randomMembers(key, 2)).hasSize(2).containsAnyOf(value1, value2, value3);
|
||||
assertThat(zSetOps.distinctRandomMembers(key, 2)).hasSize(2).containsAnyOf(value1, value2, value3);
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest // GH-2049
|
||||
@Disabled("https://github.com/redis/redis/issues/9160")
|
||||
@EnabledOnCommand("ZRANDMEMBER")
|
||||
void testRandomMemberWithScore() {
|
||||
|
||||
assumeThat(valueFactory).isNotInstanceOf(RawObjectFactory.class);
|
||||
|
||||
K key = keyFactory.instance();
|
||||
V value1 = valueFactory.instance();
|
||||
V value2 = valueFactory.instance();
|
||||
V value3 = valueFactory.instance();
|
||||
|
||||
zSetOps.add(key, value1, 1.9);
|
||||
zSetOps.add(key, value2, 3.7);
|
||||
zSetOps.add(key, value3, 5.8);
|
||||
|
||||
assertThat(zSetOps.randomMemberWithScore(key)).isIn(new DefaultTypedTuple<>(value1, 1.9d),
|
||||
new DefaultTypedTuple<>(value2, 3.7d), new DefaultTypedTuple<>(value3, 5.8d));
|
||||
assertThat(zSetOps.randomMembersWithScore(key, 2)).hasSize(2).containsAnyOf(new DefaultTypedTuple<>(value1, 1.9d),
|
||||
new DefaultTypedTuple<>(value2, 3.7d), new DefaultTypedTuple<>(value3, 5.8d));
|
||||
assertThat(zSetOps.distinctRandomMembersWithScore(key, 2)).hasSize(2).containsAnyOf(
|
||||
new DefaultTypedTuple<>(value1, 1.9d), new DefaultTypedTuple<>(value2, 3.7d),
|
||||
new DefaultTypedTuple<>(value3, 5.8d));
|
||||
}
|
||||
|
||||
@ParameterizedRedisTest
|
||||
void testRangeByScoreOffsetCount() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user