This is an automated email from the ASF dual-hosted git repository.
jensdeppe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new d093b73 GEODE-9831: support SISMEMBER support command (#7164)
d093b73 is described below
commit d093b73cafeeb7b40e9156f3a3a85bb706881a98
Author: Kris10 <[email protected]>
AuthorDate: Wed Dec 8 08:34:06 2021 -0800
GEODE-9831: support SISMEMBER support command (#7164)
* Update geode-docs/tools_modules/geode_for_redis.html.md.erb
---
.../tools_modules/geode_for_redis.html.md.erb | 1 +
geode-for-redis/README.md | 1 +
.../server/AbstractHitsMissesIntegrationTest.java | 10 +--
.../set/AbstractSIsMemberIntegrationTest.java | 78 ++++++++++++++--------
.../redis/internal/commands/RedisCommandType.java | 2 +-
5 files changed, 57 insertions(+), 35 deletions(-)
diff --git a/geode-docs/tools_modules/geode_for_redis.html.md.erb
b/geode-docs/tools_modules/geode_for_redis.html.md.erb
index 91c6c16..06d9d8d 100644
--- a/geode-docs/tools_modules/geode_for_redis.html.md.erb
+++ b/geode-docs/tools_modules/geode_for_redis.html.md.erb
@@ -113,6 +113,7 @@ If the server is functioning properly, you should see a
response of `PONG`.
- SADD <br/>
- SCARD <br/>
- SDIFF <br/>
+ - SISMEMBER <br/>
- SET <br/>
- SETNX <br/>
- SLOWLOG **[3]** <br/>
diff --git a/geode-for-redis/README.md b/geode-for-redis/README.md
index 82d452e..1f4d70f 100644
--- a/geode-for-redis/README.md
+++ b/geode-for-redis/README.md
@@ -199,6 +199,7 @@ Geode for Redis implements a subset of the full Redis
command set.
- SADD
- SCARD
- SDIFF
+- SISMEMBER
- SET
- SETEX
- SETNX
diff --git
a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractHitsMissesIntegrationTest.java
b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractHitsMissesIntegrationTest.java
index 511e9fc..0dc3084 100644
---
a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractHitsMissesIntegrationTest.java
+++
b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/server/AbstractHitsMissesIntegrationTest.java
@@ -384,6 +384,11 @@ public abstract class AbstractHitsMissesIntegrationTest
implements RedisIntegrat
}
@Test
+ public void testSismember() {
+ runCommandAndAssertHitsAndMisses(SET_KEY, k -> jedis.sismember(k,
"member"));
+ }
+
+ @Test
public void testSmembers() {
runCommandAndAssertHitsAndMisses(SET_KEY, k -> jedis.smembers(k));
}
@@ -524,11 +529,6 @@ public abstract class AbstractHitsMissesIntegrationTest
implements RedisIntegrat
}
@Test
- public void testSismember() {
- runCommandAndAssertHitsAndMisses(SET_KEY, k -> jedis.sismember(k,
"member"));
- }
-
- @Test
public void testSrandmember() {
runCommandAndAssertHitsAndMisses(SET_KEY, k -> jedis.srandmember(k));
}
diff --git
a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/set/AbstractSIsMemberIntegrationTest.java
b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/set/AbstractSIsMemberIntegrationTest.java
index 2b1b2b7..2a62305 100755
---
a/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/set/AbstractSIsMemberIntegrationTest.java
+++
b/geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/set/AbstractSIsMemberIntegrationTest.java
@@ -15,10 +15,11 @@
package org.apache.geode.redis.internal.commands.executor.set;
import static
org.apache.geode.redis.RedisCommandArgumentsTestHelper.assertExactNumberOfArgs;
+import static org.apache.geode.redis.internal.RedisConstants.ERROR_WRONG_TYPE;
+import static
org.apache.geode.test.dunit.rules.RedisClusterStartupRule.BIND_ADDRESS;
+import static
org.apache.geode.test.dunit.rules.RedisClusterStartupRule.REDIS_CLIENT_TIMEOUT;
import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.HashSet;
-import java.util.Set;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
import org.junit.After;
import org.junit.Before;
@@ -27,19 +28,16 @@ import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.Protocol;
-import org.apache.geode.management.internal.cli.util.ThreePhraseGenerator;
import org.apache.geode.redis.RedisIntegrationTest;
-import org.apache.geode.test.awaitility.GeodeAwaitility;
public abstract class AbstractSIsMemberIntegrationTest implements
RedisIntegrationTest {
private JedisCluster jedis;
- private static final ThreePhraseGenerator generator = new
ThreePhraseGenerator();
- private static final int REDIS_CLIENT_TIMEOUT =
- Math.toIntExact(GeodeAwaitility.getTimeout().toMillis());
+ private static final String setKey = "{user1}setkey";
+ private static final String[] setMembers = {"one", "two", "three", "four",
"five"};
@Before
public void setUp() {
- jedis = new JedisCluster(new HostAndPort("localhost", getPort()),
REDIS_CLIENT_TIMEOUT);
+ jedis = new JedisCluster(new HostAndPort(BIND_ADDRESS, getPort()),
REDIS_CLIENT_TIMEOUT);
}
@After
@@ -49,42 +47,64 @@ public abstract class AbstractSIsMemberIntegrationTest
implements RedisIntegrati
}
@Test
- public void errors_givenWrongNumberOfArguments() {
+ public void sismemberWrongNumberOfArguments_returnsError() {
assertExactNumberOfArgs(jedis, Protocol.Command.SISMEMBER, 2);
}
@Test
- public void testSMembersSIsMember() {
- int elements = 10;
- String key = generator.generate('x');
- String[] strings = generateStrings(elements, 'y');
- jedis.sadd(key, strings);
-
- for (String entry : strings) {
- assertThat(jedis.sismember(key, entry)).isTrue();
+ public void sismemberValidKeyValidMember_returnTrue() {
+ jedis.sadd(setKey, setMembers);
+
+ for (String member : setMembers) {
+ assertThat(jedis.sismember(setKey, member)).isTrue();
}
}
@Test
- public void testSIsMemberWithNonexistentKey_returnsFalse() {
+ public void sismemberValidKeyNonExistingMember_returnFalse() {
+ jedis.sadd(setKey, setMembers);
+ assertThat(jedis.sismember(setKey, "nonExistentMember")).isFalse();
+ }
+
+ @Test
+ public void sismemberNonExistingKeyNonExistingMember_returnFalse() {
assertThat(jedis.sismember("nonExistentKey",
"nonExistentMember")).isFalse();
}
@Test
- public void testSIsMemberWithNonexistentMember_returnsFalse() {
- String key = "key";
+ public void sismemberMemberInAnotherSet_returnFalse() {
+ String member = "elephant";
+ jedis.sadd("diffSet", member);
+ jedis.sadd(setKey, setMembers);
- jedis.sadd("key", "member1", "member2");
- assertThat(jedis.sismember(key, "nonExistentMember")).isFalse();
+ assertThat(jedis.sismember(setKey, member)).isFalse();
}
- private String[] generateStrings(int elements, char uniqueElement) {
- Set<String> strings = new HashSet<>();
- for (int i = 0; i < elements; i++) {
- String elem = generator.generate(uniqueElement);
- strings.add(elem);
+ @Test
+ public void sismemberNonExistingKeyAndMemberInAnotherSet_returnFalse() {
+ jedis.sadd(setKey, setMembers);
+
+ for (String member : setMembers) {
+ assertThat(jedis.sismember("nonExistentKey", member)).isFalse();
}
- return strings.toArray(new String[strings.size()]);
}
+
+ @Test
+ public void sismemberAfterSadd_returnsTrue() {
+ String newMember = "chicken";
+ jedis.sadd(setKey, setMembers);
+ assertThat(jedis.sismember(setKey, newMember)).isFalse();
+ jedis.sadd(setKey, newMember);
+ assertThat(jedis.sismember(setKey, newMember)).isTrue();
+ }
+
+ @Test
+ public void scardWithWrongKeyType_returnsWrongTypeError() {
+ String keyString = "keys";
+ String valueString = "alicia";
+ jedis.set(keyString, valueString);
+ assertThatThrownBy(() -> jedis.sismember(keyString, valueString))
+ .hasMessageContaining(ERROR_WRONG_TYPE);
+ }
}
diff --git
a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java
b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java
index 493d328..bcf2ae1 100755
---
a/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java
+++
b/geode-for-redis/src/main/java/org/apache/geode/redis/internal/commands/RedisCommandType.java
@@ -243,6 +243,7 @@ public enum RedisCommandType {
SCARD(new SCardExecutor(), SUPPORTED, new
Parameter().exact(2).flags(READONLY, FAST)),
SDIFF(new SDiffExecutor(), SUPPORTED,
new Parameter().min(2).lastKey(-1).flags(READONLY, SORT_FOR_SCRIPT)),
+ SISMEMBER(new SIsMemberExecutor(), SUPPORTED, new
Parameter().exact(3).flags(READONLY, FAST)),
SMEMBERS(new SMembersExecutor(), SUPPORTED,
new Parameter().exact(2).flags(READONLY, SORT_FOR_SCRIPT)),
SREM(new SRemExecutor(), SUPPORTED, new Parameter().min(3).flags(WRITE,
FAST)),
@@ -348,7 +349,6 @@ public enum RedisCommandType {
new Parameter().min(2).lastKey(-1).flags(READONLY, SORT_FOR_SCRIPT)),
SINTERSTORE(new SInterStoreExecutor(), UNSUPPORTED,
new Parameter().min(3).lastKey(-1).flags(WRITE, DENYOOM)),
- SISMEMBER(new SIsMemberExecutor(), UNSUPPORTED, new
Parameter().exact(3).flags(READONLY, FAST)),
SMOVE(new SMoveExecutor(), UNSUPPORTED, new
Parameter().exact(4).lastKey(2).flags(WRITE, FAST)),
SPOP(new SPopExecutor(), UNSUPPORTED,
new Parameter().min(2).max(3, ERROR_SYNTAX).flags(WRITE, RANDOM, FAST)),