This is an automated email from the ASF dual-hosted git repository.

heybales pushed a commit to branch support/1.14
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/support/1.14 by this push:
     new d715114  GEODE-9022: Support Info Command (#6121) (#6148)
d715114 is described below

commit d715114f33fd46417f0140629110f30ea49ecb07
Author: Hale Bales <[email protected]>
AuthorDate: Wed Mar 17 09:23:45 2021 -0700

    GEODE-9022: Support Info Command (#6121) (#6148)
    
    - add info command to supported list
    - add unit/integration tests
    - add dunit concurrency test
    - remove redundant test
    - declare configureMaxMemory() and getExposedPort() abstract
    - remove unused boolean
    
    Co-authored-by: Ray Ingles <[email protected]>
    (cherry picked from commit 5fe934e464b3a41a3dd99b9d019cb4a0de61aae6)
---
 .../tools_modules/redis_api_for_geode.html.md.erb  |   3 +-
 geode-redis/README.md                              |  70 +++++------
 .../server/InfoNativeRedisAcceptanceTest.java      |   5 -
 .../server/InfoStatsNativeRedisAcceptanceTest.java |  11 ++
 .../redis/internal/executor/InfoDUnitTest.java     | 138 +++++++++++++++++++++
 .../server/AbstractInfoIntegrationTest.java        |  12 --
 .../AbstractRedisInfoStatsIntegrationTest.java     |  60 ++++++---
 .../executor/server/InfoIntegrationTest.java       |   5 -
 .../executor/server/InfoStatsIntegrationTest.java  |  11 ++
 .../geode/redis/internal/RedisCommandType.java     |   4 +-
 .../redis/internal/SupportedCommandsJUnitTest.java |   2 +-
 11 files changed, 244 insertions(+), 77 deletions(-)

diff --git a/geode-docs/tools_modules/redis_api_for_geode.html.md.erb 
b/geode-docs/tools_modules/redis_api_for_geode.html.md.erb
index c358c2f..7c7aa01 100644
--- a/geode-docs/tools_modules/redis_api_for_geode.html.md.erb
+++ b/geode-docs/tools_modules/redis_api_for_geode.html.md.erb
@@ -72,6 +72,7 @@ The Redis API for <%=vars.product_name%> currently supports 
the following comman
 -   **Keys**: DEL, EXISTS, EXPIRE, EXPIREAT, KEYS, PERSIST, PEXPIRE, 
PEXPIREAT, PTTL, RENAME, TTL,
   TYPE
 -   **Publish/Subscribe**: PUBLISH, PSUBSCRIBE, PUNSUBSCRIBE, SUBSCRIBE, 
UNSUBSCRIBE
+-   **Server**: INFO
 -   **Sets**: SADD, SMEMBERS, SREM
 -   **Strings**: APPEND, GET, SET
 
@@ -82,7 +83,7 @@ exactly as expected.
 -   **Connection**: ECHO, SELECT
 -   **Hashes**: HDEL, HEXISTS, HGET, HINCRBY, HINCRBYFLOAT, HKEYS, HSCAN
 -   **Keys**: SCAN, UNLINK
--   **Server**: DBSIZE, FLUSHALL (no async option), FLUSHDB (no async option), 
INFO, SHUTDOWN,
+-   **Server**: DBSIZE, FLUSHALL (no async option), FLUSHDB (no async option), 
SHUTDOWN,
   SLOWLOG, TIME
 -   **Sets**: SCARD, SDIFF, SDIFFSTORE, SINTER, SINTERSTORE, SISMEMBER, SMOVE, 
SPOP, SRANDMEMBER,
   SSCAN, SUNION, SUNIONSTORE
diff --git a/geode-redis/README.md b/geode-redis/README.md
index 69a7d9a..4e640c9 100644
--- a/geode-redis/README.md
+++ b/geode-redis/README.md
@@ -172,41 +172,41 @@ start server \
 | HSTRLEN              | HDEL                                                  
| BGREWRITEAOF                          |
 | HLEN                         | HEXISTS                                       
        | BGSAVE                                |
 | HVALS                | HGET                                                  
| BITFIELD                              |
-| KEYS                 | HINCRBY                                               
| BLPOP                                 |
-| PERSIST              | HINCRBYFLOAT                                          
| BRPOP                                 |
-| PEXPIRE              | HKEYS                                                 
| BRPOPLPUSH                            |
-| PEXPIREAT            | HSCAN                                                 
| BZPOPMAX                              |
-| PING                 | INCR                                                  
| BZPOPMIN                              |
-| PSUBSCRIBE           | INCRBY                                                
| CLIENT CACHING                        |
-| PTTL                 | INCRBYFLOAT                                           
| CLIENT GETNAME                        |
-| PUBLISH              | INFO                                                  
| CLIENT GETREDIR                       |
-| PUNSUBSCRIBE         | MGET                                                  
| CLIENT ID                             |
-| QUIT                 | MSET                                                  
| CLIENT KILL                           |
-| RENAME               | MSETNX                                                
| CLIENT LIST                           |
-| SADD                 | PSETEX                                                
| CLIENT PAUSE                          |
-| SET                  | SCAN                                                  
| CLIENT REPLY                          |
-| SMEMBERS             | SCARD                                                 
| CLIENT SETNAME                        |
-| SREM                  | SDIFF                                                
| CLIENT TRACKING                       |
-| SUBSCRIBE             | SDIFFSTORE                                           
| CLIENT UNBLOCK                        |
-| TTL                   | SELECT                                               
| CLUSTER ADDSLOTS                      |
-| TYPE                  | SETBIT                                               
| CLUSTER BUMPEPOCH                     |
-| UNSUBSCRIBE           | SETEX                                                
| CLUSTER COUNT-FAILURE-REPORTS         |
-|                      | SETNX                                                 
| CLUSTER COUNTKEYSINSLOT               |
-|                      | SETRANGE                                              
| CLUSTER DELSLOTS                  |
-|                      | SHUTDOWN                                              
| CLUSTER FAILOVER                      |
-|                      | SINTER                                                
| CLUSTER FLUSHSLOTS                |
-|                      | SINTERSTORE                                           
| CLUSTER FORGET                    |
-|                      | SISMEMBER                                             
| CLUSTER GETKEYSINSLOT             |
-|                      | SLOWLOG                                               
| CLUSTER INFO                          |
-|                      | SMOVE                                                 
| CLUSTER KEYSLOT                   |
-|                      | SPOP                                                  
| CLUSTER MEET                      |
-|                      | SRANDMEMBER                                           
| CLUSTER MYID                          |
-|                      | SSCAN                                                 
| CLUSTER NODES                         |
-|                      | STRLEN                                                
| CLUSTER REPLICAS                  |
-|                      | SUNION                                                
| CLUSTER REPLICATE                     |
-|                      | SUNIONSTORE                                           
| CLUSTER RESET                         |
-|                      | TIME                                                  
| CLUSTER SAVECONFIG                |
-|                      | UNLINK [1]                                            
| CLUSTER SET-CONFIG-EPOCH          |
+| INFO                         | HINCRBY                                       
        | BLPOP                                 |
+| KEYS                 | HINCRBYFLOAT                                          
| BRPOP                                 |
+| PERSIST              | HKEYS                                                 
| BRPOPLPUSH                            |
+| PEXPIRE              | HSCAN                                                 
| BZPOPMAX                              |
+| PEXPIREAT            | INCR                                                  
| BZPOPMIN                              |
+| PING                 | INCRBY                                                
| CLIENT CACHING                        |
+| PSUBSCRIBE           | INCRBYFLOAT                                           
| CLIENT GETNAME                        |
+| PTTL                 | MGET                                                  
| CLIENT GETREDIR                       |
+| PUBLISH              | MSET                                                  
| CLIENT ID                             |
+| PUNSUBSCRIBE         | MSETNX                                                
| CLIENT KILL                           |
+| QUIT                 | PSETEX                                                
| CLIENT LIST                           |
+| RENAME               | SCAN                                                  
| CLIENT PAUSE                          |
+| SADD                 | SCARD                                                 
| CLIENT REPLY                          |
+| SET                  | SDIFF                                                 
| CLIENT SETNAME                        |
+| SMEMBERS              | SDIFFSTORE                                           
| CLIENT TRACKING                       |
+| SREM                  | SELECT                                               
| CLIENT UNBLOCK                        |
+| SUBSCRIBE             | SETBIT                                               
| CLUSTER ADDSLOTS                      |
+| TTL                   | SETEX                                                
| CLUSTER BUMPEPOCH                     |
+| TYPE                  | SETNX                                                
| CLUSTER COUNT-FAILURE-REPORTS         |
+| UNSUBSCRIBE           | SETRANGE                                             
| CLUSTER COUNTKEYSINSLOT               |
+|                      | SHUTDOWN                                              
| CLUSTER DELSLOTS                  |
+|                      | SINTER                                                
| CLUSTER FAILOVER                      |
+|                      | SINTERSTORE                                           
| CLUSTER FLUSHSLOTS                |
+|                      | SISMEMBER                                             
| CLUSTER FORGET                    |
+|                      | SLOWLOG                                               
| CLUSTER GETKEYSINSLOT             |
+|                      | SMOVE                                                 
| CLUSTER INFO                          |
+|                      | SPOP                                                  
| CLUSTER KEYSLOT                   |
+|                      | SRANDMEMBER                                           
| CLUSTER MEET                      |
+|                      | SSCAN                                                 
| CLUSTER MYID                          |
+|                      | STRLEN                                                
| CLUSTER NODES                         |
+|                      | SUNION                                                
| CLUSTER REPLICAS                  |
+|                      | SUNIONSTORE                                           
| CLUSTER REPLICATE                     |
+|                      | TIME                                                  
| CLUSTER RESET                         |
+|                      | UNLINK [1]                                            
| CLUSTER SAVECONFIG                |
+|                      |                                                       
    | CLUSTER SET-CONFIG-EPOCH          |
 |                      |                                                       
    | CLUSTER SETSLOT                   |
 |                      |                                                       
| CLUSTER SLAVES                    |
 |                      |                                                       
| CLUSTER SLOTS                         |
diff --git 
a/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoNativeRedisAcceptanceTest.java
 
b/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoNativeRedisAcceptanceTest.java
index 3157e03..6e03f76 100644
--- 
a/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoNativeRedisAcceptanceTest.java
+++ 
b/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoNativeRedisAcceptanceTest.java
@@ -28,9 +28,4 @@ public class InfoNativeRedisAcceptanceTest extends 
AbstractInfoIntegrationTest {
   public int getPort() {
     return redis.getPort();
   }
-
-  @Override
-  public int getExposedPort() {
-    return redis.getExposedPort();
-  }
 }
diff --git 
a/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsNativeRedisAcceptanceTest.java
 
b/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsNativeRedisAcceptanceTest.java
index c4f56e0..3b62da6 100644
--- 
a/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsNativeRedisAcceptanceTest.java
+++ 
b/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsNativeRedisAcceptanceTest.java
@@ -16,6 +16,7 @@
 package org.apache.geode.redis.internal.executor.server;
 
 import org.junit.ClassRule;
+import redis.clients.jedis.Jedis;
 
 import org.apache.geode.NativeRedisTestRule;
 
@@ -27,4 +28,14 @@ public class InfoStatsNativeRedisAcceptanceTest extends 
AbstractRedisInfoStatsIn
   public int getPort() {
     return redis.getPort();
   }
+
+  @Override
+  public int getExposedPort() {
+    return redis.getExposedPort();
+  }
+
+  @Override
+  public void configureMaxMemory(Jedis jedis) {
+    jedis.configSet("maxmemory", "10mb");
+  }
 }
diff --git 
a/geode-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/InfoDUnitTest.java
 
b/geode-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/InfoDUnitTest.java
new file mode 100644
index 0000000..29d746b
--- /dev/null
+++ 
b/geode-redis/src/distributedTest/java/org/apache/geode/redis/internal/executor/InfoDUnitTest.java
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.redis.internal.executor;
+
+import static 
org.apache.geode.distributed.ConfigurationProperties.MAX_WAIT_TIME_RECONNECT;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Test;
+import redis.clients.jedis.Jedis;
+
+import org.apache.geode.redis.ConcurrentLoopingThreads;
+import org.apache.geode.test.awaitility.GeodeAwaitility;
+import org.apache.geode.test.dunit.rules.MemberVM;
+import org.apache.geode.test.dunit.rules.RedisClusterStartupRule;
+
+public class InfoDUnitTest {
+  @ClassRule
+  public static RedisClusterStartupRule clusterStartUp = new 
RedisClusterStartupRule(4);
+
+  private static final String LOCAL_HOST = "127.0.0.1";
+  private static final int NUM_ITERATIONS = 1000;
+  private static final int JEDIS_TIMEOUT = 
Math.toIntExact(GeodeAwaitility.getTimeout().toMillis());
+  private static final String COMMANDS_PROCESSED = "total_commands_processed";
+  private static final String REDIS_TCP_PORT = "tcp_port";
+
+  private static Jedis jedis1;
+  private static Jedis jedis2;
+
+  private static Properties locatorProperties;
+
+  private static MemberVM locator;
+  private static MemberVM server1;
+  private static MemberVM server2;
+
+  private static int redisServerPort1;
+  private static int redisServerPort2;
+
+  @BeforeClass
+  public static void classSetup() {
+    locatorProperties = new Properties();
+    locatorProperties.setProperty(MAX_WAIT_TIME_RECONNECT, "15000");
+
+    locator = clusterStartUp.startLocatorVM(0, locatorProperties);
+    server1 = clusterStartUp.startRedisVM(1, locator.getPort());
+    server2 = clusterStartUp.startRedisVM(2, locator.getPort());
+
+    redisServerPort1 = clusterStartUp.getRedisPort(1);
+    redisServerPort2 = clusterStartUp.getRedisPort(2);
+
+    jedis1 = new Jedis(LOCAL_HOST, redisServerPort1, JEDIS_TIMEOUT);
+    jedis2 = new Jedis(LOCAL_HOST, redisServerPort2, JEDIS_TIMEOUT);
+  }
+
+  @Before
+  public void testSetup() {
+    jedis1.flushAll();
+  }
+
+  @AfterClass
+  public static void tearDown() {
+    jedis1.disconnect();
+    jedis2.disconnect();
+
+    server1.stop();
+    server2.stop();
+  }
+
+  @Test
+  public void testConcurrentInfoFromDifferentServers_doNotStepOnEachOther() {
+    jedis1.set("key1", "value1");
+    jedis1.set("key2", "value2");
+    jedis1.set("key3", "value3");
+    jedis2.set("key3", "value3");
+
+    AtomicInteger previousCommandsProcessed1 = new AtomicInteger(4);
+    AtomicInteger previousCommandsProcessed2 = new AtomicInteger(1);
+    
assertThat(Integer.valueOf(getInfo(jedis1).get(COMMANDS_PROCESSED))).isEqualTo(4);
+
+    new ConcurrentLoopingThreads(NUM_ITERATIONS,
+        i -> {
+          Map<String, String> info1 = getInfo(jedis1);
+          
assertThat(Integer.valueOf(info1.get(REDIS_TCP_PORT))).isEqualTo(redisServerPort1);
+
+          int commandsProcessed1 = 
Integer.valueOf(info1.get(COMMANDS_PROCESSED));
+          
assertThat(commandsProcessed1).isGreaterThanOrEqualTo(previousCommandsProcessed1.get());
+          previousCommandsProcessed1.set(commandsProcessed1);
+        },
+        i -> {
+          Map<String, String> info2 = getInfo(jedis2);
+          
assertThat(Integer.valueOf(info2.get(REDIS_TCP_PORT))).isEqualTo(redisServerPort2);
+
+          int commandsProcessed2 = 
Integer.valueOf(info2.get(COMMANDS_PROCESSED));
+          
assertThat(commandsProcessed2).isGreaterThanOrEqualTo(previousCommandsProcessed2.get());
+          previousCommandsProcessed2.set(commandsProcessed2);
+        }).run();
+  }
+
+  /**
+   * Convert the values returned by the INFO command into a basic param:value 
map.
+   */
+  static synchronized Map<String, String> getInfo(Jedis jedis) {
+    Map<String, String> results = new HashMap<>();
+    String rawInfo = jedis.info();
+
+    for (String line : rawInfo.split("\r\n")) {
+      int colonIndex = line.indexOf(":");
+      if (colonIndex > 0) {
+        String key = line.substring(0, colonIndex);
+        String value = line.substring(colonIndex + 1);
+        results.put(key, value);
+      }
+    }
+
+    return results;
+  }
+}
diff --git 
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractInfoIntegrationTest.java
 
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractInfoIntegrationTest.java
index 84b3043..3db51da 100644
--- 
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractInfoIntegrationTest.java
+++ 
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractInfoIntegrationTest.java
@@ -121,8 +121,6 @@ public abstract class AbstractInfoIntegrationTest 
implements RedisPortSupplier {
     jedis.close();
   }
 
-  abstract int getExposedPort();
-
   @Test
   public void shouldReturnRedisVersion() {
     String expectedResult = "redis_version:5.0.6";
@@ -133,16 +131,6 @@ public abstract class AbstractInfoIntegrationTest 
implements RedisPortSupplier {
   }
 
   @Test
-  public void shouldReturnTCPPort() {
-    int expectedPort = getExposedPort();
-    String expectedResult = "tcp_port:" + expectedPort;
-
-    String actualResult = jedis.info();
-
-    assertThat(actualResult).contains(expectedResult);
-  }
-
-  @Test
   public void shouldReturnRedisMode() {
     String expectedResult = "redis_mode:standalone";
 
diff --git 
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractRedisInfoStatsIntegrationTest.java
 
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractRedisInfoStatsIntegrationTest.java
index 4e72595..23ae1da 100644
--- 
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractRedisInfoStatsIntegrationTest.java
+++ 
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/AbstractRedisInfoStatsIntegrationTest.java
@@ -29,6 +29,7 @@ import org.assertj.core.data.Offset;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 import redis.clients.jedis.Jedis;
 
@@ -60,9 +61,16 @@ public abstract class AbstractRedisInfoStatsIntegrationTest 
implements RedisPort
   private static final String NETWORK_KB_READ_OVER_LAST_SECOND = 
"instantaneous_input_kbps";
   private static final String UPTIME_IN_DAYS = "uptime_in_days";
   private static final String UPTIME_IN_SECONDS = "uptime_in_seconds";
+  private static final String USED_MEMORY = "used_memory";
+  private static final String MEMORY_FRAGMENTATION = "mem_fragmentation_ratio";
+  private static final String TCP_PORT = "tcp_port";
+  private static final String MAX_MEMORY = "maxmemory";
 
   private static final AtomicInteger numInfoCalled = new AtomicInteger(0);
 
+  abstract int getExposedPort();
+
+  abstract void configureMaxMemory(Jedis jedis);
 
   // ------------------- Setup -------------------------- //
   @BeforeClass
@@ -108,6 +116,41 @@ public abstract class 
AbstractRedisInfoStatsIntegrationTest implements RedisPort
   // ------------------- Stats Section -------------------------- //
 
   // note: see AbstractHitsMissesIntegrationTest for testing of hits/misses
+  // note: we are not testing hardcoded values at this time
+
+  @Test
+  public void keysSection_containsNumberOfSetKeys() {
+    assertThat(jedis.info("keyspace")).contains("keys=4");
+  }
+
+  @Test
+  public void maxMemoryIsNonZero_whenMaxMemoryIsSet() {
+    configureMaxMemory(jedis);
+
+    assertThat(Long.valueOf(getInfo(jedis).get(MAX_MEMORY))).isGreaterThan(0L);
+  }
+
+  @Test
+  public void tcpPort_returnsExposedTCPPort() {
+    
assertThat(Integer.valueOf(getInfo(jedis).get(TCP_PORT))).isEqualTo(this.getExposedPort());
+  }
+
+  @Test
+  public void usedMemory_shouldBeNonZeroWhenContainsData() {
+    jedis.set("key", "value");
+
+    assertThat(Long.valueOf(getInfo(jedis).get(USED_MEMORY))).isGreaterThan(0);
+  }
+
+  @Ignore // currently we return 1.0
+  @Test
+  public void memFragmentation_shouldBeGreaterThanOne() {
+    for (int i = 0; i < 10000; i++) {
+      jedis.set("key" + i, "value");
+    }
+
+    
assertThat(Double.valueOf(getInfo(jedis).get(MEMORY_FRAGMENTATION))).isGreaterThan(1.0);
+  }
 
   @Test
   public void commandsProcessed_shouldIncrement_givenSuccessfulCommand() {
@@ -188,23 +231,6 @@ public abstract class 
AbstractRedisInfoStatsIntegrationTest implements RedisPort
 
   }
 
-  // todo test rejected connections
-  @Test
-  public void should_UpdateRejectedConnections() {
-    Jedis jedis2 = new Jedis("localhost", getPort(), TIMEOUT);
-    Jedis jedis3 = new Jedis("localhost", getPort(), TIMEOUT);
-
-    jedis2.ping();
-    jedis3.ping();
-
-    validateConnectedClients(jedis, preTestConnectedClients, 2);
-
-    jedis2.close();
-    jedis3.close();
-
-    validateConnectedClients(jedis, preTestConnectedClients, 0);
-  }
-
   // ------------------- Clients Section -------------------------- //
 
   @Test
diff --git 
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoIntegrationTest.java
 
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoIntegrationTest.java
index 752ba58..cdcf76c 100644
--- 
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoIntegrationTest.java
+++ 
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoIntegrationTest.java
@@ -31,9 +31,4 @@ public class InfoIntegrationTest extends 
AbstractInfoIntegrationTest {
   public int getPort() {
     return server.getPort();
   }
-
-  @Override
-  public int getExposedPort() {
-    return getPort();
-  }
 }
diff --git 
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsIntegrationTest.java
 
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsIntegrationTest.java
index 979a129..7e50a7f 100644
--- 
a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsIntegrationTest.java
+++ 
b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/server/InfoStatsIntegrationTest.java
@@ -16,6 +16,7 @@
 package org.apache.geode.redis.internal.executor.server;
 
 import org.junit.ClassRule;
+import redis.clients.jedis.Jedis;
 
 import org.apache.geode.redis.GeodeRedisServerRule;
 
@@ -27,4 +28,14 @@ public class InfoStatsIntegrationTest extends 
AbstractRedisInfoStatsIntegrationT
   public int getPort() {
     return server.getPort();
   }
+
+  @Override
+  public int getExposedPort() {
+    return server.getPort();
+  }
+
+  @Override
+  public void configureMaxMemory(Jedis jedis) {
+    return;
+  }
 }
diff --git 
a/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisCommandType.java
 
b/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisCommandType.java
index 5d847bd..8a11e36 100755
--- 
a/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisCommandType.java
+++ 
b/geode-redis/src/main/java/org/apache/geode/redis/internal/RedisCommandType.java
@@ -192,6 +192,9 @@ public enum RedisCommandType {
   PUNSUBSCRIBE(new PunsubscribeExecutor(), SUPPORTED, new 
MinimumParameterRequirements(1)),
   UNSUBSCRIBE(new UnsubscribeExecutor(), SUPPORTED, new 
MinimumParameterRequirements(1)),
 
+  /********** Server **********/
+  INFO(new InfoExecutor(), SUPPORTED, new MaximumParameterRequirements(2, 
ERROR_SYNTAX)),
+
   /***************************************
    ********* Internal Commands ***********
    ***************************************/
@@ -266,7 +269,6 @@ public enum RedisCommandType {
   DBSIZE(new DBSizeExecutor(), UNSUPPORTED, new ExactParameterRequirements(1)),
   FLUSHALL(new FlushAllExecutor(), UNSUPPORTED, new 
MaximumParameterRequirements(2, ERROR_SYNTAX)),
   FLUSHDB(new FlushAllExecutor(), UNSUPPORTED, new 
MaximumParameterRequirements(2, ERROR_SYNTAX)),
-  INFO(new InfoExecutor(), UNSUPPORTED, new MaximumParameterRequirements(2, 
ERROR_SYNTAX)),
   SHUTDOWN(new ShutDownExecutor(), UNSUPPORTED, new 
MaximumParameterRequirements(2, ERROR_SYNTAX)),
   SLOWLOG(new SlowlogExecutor(), UNSUPPORTED, new 
SlowlogParameterRequirements()),
   TIME(new TimeExecutor(), UNSUPPORTED, new ExactParameterRequirements(1)),
diff --git 
a/geode-redis/src/test/java/org/apache/geode/redis/internal/SupportedCommandsJUnitTest.java
 
b/geode-redis/src/test/java/org/apache/geode/redis/internal/SupportedCommandsJUnitTest.java
index f8bb15c..6fe8cc7 100644
--- 
a/geode-redis/src/test/java/org/apache/geode/redis/internal/SupportedCommandsJUnitTest.java
+++ 
b/geode-redis/src/test/java/org/apache/geode/redis/internal/SupportedCommandsJUnitTest.java
@@ -55,6 +55,7 @@ public class SupportedCommandsJUnitTest {
       "HVALS",
       "HKEYS",
       "INCRBYFLOAT",
+      "INFO",
       "KEYS",
       "MGET",
       "PERSIST",
@@ -91,7 +92,6 @@ public class SupportedCommandsJUnitTest {
       "GETSET",
       "INCR",
       "INCRBY",
-      "INFO",
       "MSET",
       "MSETNX",
       "PSETEX",

Reply via email to