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)),

Reply via email to