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

khowe 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 9203ccd  GEODE-4858: Refactor destroy gateway-receiver command (#1968)
9203ccd is described below

commit 9203ccd1a8fe6006b7a6e9e0f8ebcd8145a2ca99
Author: Kenneth Howe <kh...@pivotal.io>
AuthorDate: Thu May 17 13:06:11 2018 -0700

    GEODE-4858: Refactor destroy gateway-receiver command (#1968)
    
    * GEODE-4858: Refactor destroy gateway-receiver command
    
    Refactored to use SingleGfshCommand and ResultModel
    
    Added tests for more complete unit test coverage of
    DestroyGatewayReceiverFuntion
---
 .../commands/DestroyGatewayReceiverCommand.java    | 45 ++++++++--------------
 .../functions/DestroyGatewayReceiverFunction.java  | 44 +++++++++------------
 .../DestroyGatewayReceiverCommandTest.java         | 11 ++----
 .../DestroyGatewayReceiverFunctionTest.java        | 41 +++++++++++++++-----
 .../DestroyGatewayReceiverCommandDUnitTest.java    | 12 +++---
 5 files changed, 76 insertions(+), 77 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommand.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommand.java
index e5e0de8..60ef451 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommand.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommand.java
@@ -14,27 +14,25 @@
  */
 package org.apache.geode.management.internal.cli.commands;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
+import org.apache.geode.cache.configuration.CacheConfig;
 import org.apache.geode.distributed.DistributedMember;
-import 
org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.ConverterHint;
-import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.cli.SingleGfshCommand;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import 
org.apache.geode.management.internal.cli.functions.DestroyGatewayReceiverFunction;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.cli.result.CommandResult;
-import org.apache.geode.management.internal.cli.result.ResultBuilder;
+import org.apache.geode.management.internal.cli.result.model.ResultModel;
 import org.apache.geode.management.internal.security.ResourceOperation;
 import org.apache.geode.security.ResourcePermission;
 
-public class DestroyGatewayReceiverCommand extends InternalGfshCommand {
+public class DestroyGatewayReceiverCommand extends SingleGfshCommand {
   public static final String DESTROY_GATEWAYRECEIVER = "destroy 
gateway-receiver";
   public static final String DESTROY_GATEWAYRECEIVER__HELP =
       "Destroy the Gateway Receiver on a member or members.";
@@ -47,7 +45,7 @@ public class DestroyGatewayReceiverCommand extends 
InternalGfshCommand {
   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEODE_WAN)
   @ResourceOperation(resource = ResourcePermission.Resource.CLUSTER,
       operation = ResourcePermission.Operation.MANAGE, target = 
ResourcePermission.Target.GATEWAY)
-  public Result destroyGatewayReceiver(
+  public ResultModel destroyGatewayReceiver(
       @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS},
           optionContext = ConverterHint.MEMBERGROUP,
           help = DESTROY_GATEWAYRECEIVER__GROUP__HELP) String[] onGroups,
@@ -61,32 +59,19 @@ public class DestroyGatewayReceiverCommand extends 
InternalGfshCommand {
     Set<DistributedMember> members = getMembers(onGroups, onMember);
 
     List<CliFunctionResult> functionResults =
-        executeAndGetFunctionResult(DestroyGatewayReceiverFunction.INSTANCE, 
ifExists, members);
+        executeAndGetFunctionResult(DestroyGatewayReceiverFunction.INSTANCE, 
null, members);
 
-    CommandResult result = ResultBuilder.buildResult(functionResults);
+    ResultModel result = ResultModel.createMemberStatusResult(functionResults, 
ifExists);
+    result.setConfigObject(new CacheConfig.GatewayReceiver());
 
-    // Only update the cluster config if the command is not executed on 
specific members.
-    InternalConfigurationPersistenceService service =
-        (InternalConfigurationPersistenceService) 
getConfigurationPersistenceService();
-    if (onMember != null || service == null) {
-      persisted = false;
-    } else if (result.getStatus().equals(Result.Status.OK) && service != null) 
{
-      if (onGroups == null) {
-        onGroups = new String[] {"cluster"};
-      }
-      Arrays.stream(onGroups).forEach(group -> 
service.updateCacheConfig(group, cc -> {
-        if (cc == null || cc.getGatewayReceiver() == null) {
-          if (!ifExists) {
-            result.setStatus(Result.Status.ERROR);
-          }
-        } else {
-          cc.setGatewayReceiver(null);
-        }
-        return cc;
-      }));
-    }
 
-    result.setCommandPersisted(persisted);
     return result;
   }
+
+  @Override
+  public void updateClusterConfig(String group, CacheConfig config, Object 
element) {
+    if (config.getGatewayReceiver() != null) {
+      config.setGatewayReceiver(null);
+    }
+  }
 }
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunction.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunction.java
index 1e0793f..46cff54 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunction.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunction.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
+
 import java.util.Set;
 
 import org.apache.logging.log4j.Logger;
@@ -22,50 +23,43 @@ import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.cache.wan.GatewayReceiver;
-import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.management.cli.CliFunction;
 import org.apache.geode.management.internal.cli.CliUtil;
+import 
org.apache.geode.management.internal.cli.functions.CliFunctionResult.StatusState;
 
-public class DestroyGatewayReceiverFunction implements InternalFunction {
+public class DestroyGatewayReceiverFunction extends CliFunction {
   private static final Logger logger = LogService.getLogger();
   private static final long serialVersionUID = 1490927519860899562L;
   private static final String ID = 
DestroyGatewayReceiverFunction.class.getName();
   public static DestroyGatewayReceiverFunction INSTANCE = new 
DestroyGatewayReceiverFunction();
 
   @Override
-  public void execute(FunctionContext context) {
+  public CliFunctionResult executeFunction(FunctionContext context) {
     ResultSender<Object> resultSender = context.getResultSender();
 
     Cache cache = context.getCache();
     String memberNameOrId =
         
CliUtil.getMemberNameOrId(cache.getDistributedSystem().getDistributedMember());
 
-    boolean ifExists = (boolean) context.getArguments();
     Set<GatewayReceiver> gatewayReceivers = cache.getGatewayReceivers();
-    if (gatewayReceivers == null || gatewayReceivers.isEmpty()) {
-      String message = "Gateway receiver not found.";
-      if (ifExists) {
-        resultSender
-            .lastResult(new CliFunctionResult(memberNameOrId, true, "Skipping: 
" + message));
-      } else {
-        resultSender.lastResult(new CliFunctionResult(memberNameOrId, false, 
message));
-      }
-      return;
-    }
-    for (GatewayReceiver receiver : cache.getGatewayReceivers()) {
-      try {
-        if (receiver.isRunning()) {
-          receiver.stop();
+    if (gatewayReceivers != null && !gatewayReceivers.isEmpty()) {
+      for (GatewayReceiver receiver : gatewayReceivers) {
+        try {
+          if (receiver.isRunning()) {
+            receiver.stop();
+          }
+          receiver.destroy();
+          return new CliFunctionResult(memberNameOrId, StatusState.OK,
+              String.format("GatewayReceiver destroyed on \"%s\"", 
memberNameOrId));
+        } catch (Exception e) {
+          logger.error(e.getMessage(), e);
+          return new CliFunctionResult(memberNameOrId, e, "");
         }
-        receiver.destroy();
-        resultSender.sendResult(new CliFunctionResult(memberNameOrId, true,
-            String.format("GatewayReceiver destroyed on \"%s\"", 
memberNameOrId)));
-      } catch (Exception e) {
-        logger.error(e.getMessage(), e);
-        resultSender.sendResult(new CliFunctionResult(memberNameOrId, e, ""));
       }
-      resultSender.lastResult(-1);
     }
+    return new CliFunctionResult(memberNameOrId, StatusState.IGNORED,
+        "Gateway receiver not found.");
   }
 
   @Override
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommandTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommandTest.java
index 0ae21c6..9c72f22 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommandTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommandTest.java
@@ -37,7 +37,6 @@ import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.management.internal.cli.exceptions.UserErrorException;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 import org.apache.geode.test.junit.assertions.CommandResultAssert;
 import org.apache.geode.test.junit.categories.UnitTest;
 import org.apache.geode.test.junit.rules.GfshParserRule;
@@ -52,13 +51,11 @@ public class DestroyGatewayReceiverCommandTest {
   private List<CliFunctionResult> functionResults;
   private InternalConfigurationPersistenceService ccService;
   private CliFunctionResult result1;
-  private XmlEntity xmlEntity;
 
   @Before
   public void setUp() throws Exception {
     command = spy(DestroyGatewayReceiverCommand.class);
     ccService = mock(InternalConfigurationPersistenceService.class);
-    xmlEntity = mock(XmlEntity.class);
     cache = mock(InternalCache.class);
     doReturn(cache).when(command).getCache();
     doReturn(ccService).when(command).getConfigurationPersistenceService();
@@ -77,7 +74,7 @@ public class DestroyGatewayReceiverCommandTest {
 
   @Test
   public void memberNoGroup_isOK() {
-    result1 = new CliFunctionResult("member1", xmlEntity, "result1");
+    result1 = new CliFunctionResult("member1", 
CliFunctionResult.StatusState.OK, "result1");
     functionResults.add(result1);
     Set<DistributedMember> membersSet = new HashSet<>();
     membersSet.add(new InternalDistributedMember("member1", 0));
@@ -85,12 +82,12 @@ public class DestroyGatewayReceiverCommandTest {
 
     CommandResultAssert resultAssert =
         gfsh.executeAndAssertThat(command, "destroy gateway-receiver 
--member=\"member1\"");
-    
resultAssert.statusIsSuccess().tableHasColumnWithValuesContaining("Status", 
"result1");
+    
resultAssert.statusIsSuccess().tableHasColumnWithValuesContaining("Message", 
"result1");
   }
 
   @Test
   public void groupNoMember_isOK() {
-    result1 = new CliFunctionResult("member1", xmlEntity, "result1");
+    result1 = new CliFunctionResult("member1", 
CliFunctionResult.StatusState.OK, "result1");
     functionResults.add(result1);
     Set<DistributedMember> membersSet = new HashSet<>();
     membersSet.add(new InternalDistributedMember("member1", 0));
@@ -98,6 +95,6 @@ public class DestroyGatewayReceiverCommandTest {
 
     CommandResultAssert resultAssert =
         gfsh.executeAndAssertThat(command, "destroy gateway-receiver 
--group=\"group1\"");
-    
resultAssert.statusIsSuccess().tableHasColumnWithValuesContaining("Status", 
"result1");
+    
resultAssert.statusIsSuccess().tableHasColumnWithValuesContaining("Message", 
"result1");
   }
 }
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunctionTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunctionTest.java
index b4b32fb..fb1ef51 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunctionTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunctionTest.java
@@ -16,11 +16,14 @@ package org.apache.geode.management.internal.cli.functions;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -29,6 +32,7 @@ import org.mockito.ArgumentCaptor;
 
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
+import org.apache.geode.cache.wan.GatewayReceiver;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.test.junit.categories.UnitTest;
@@ -57,7 +61,6 @@ public class DestroyGatewayReceiverFunctionTest {
   @Test
   public void getGatewayReceiversNull_doesNotThrowException() {
     when(cache.getGatewayReceivers()).thenReturn(null);
-    when(context.getArguments()).thenReturn(false);
     function.execute(context);
 
     verify(resultSender).lastResult(resultCaptor.capture());
@@ -68,28 +71,46 @@ public class DestroyGatewayReceiverFunctionTest {
   }
 
   @Test
-  public void getGatewayReceiversNotFound_ifExists_false() {
+  public void getGatewayReceiversNotFound_returnsStatusIgnored() {
     when(cache.getGatewayReceivers()).thenReturn(Collections.emptySet());
-    when(context.getArguments()).thenReturn(false);
     function.execute(context);
 
     verify(resultSender).lastResult(resultCaptor.capture());
     CliFunctionResult result = resultCaptor.getValue();
-    assertThat(result.isSuccessful()).isFalse();
+    assertThat(result.getStatus(true)).contains("IGNORED");
     assertThat(result.getThrowable()).isNull();
     assertThat(result.getMessage()).isEqualTo("Gateway receiver not found.");
   }
 
   @Test
-  public void getGatewayReceiversNotFound_ifExists_true() {
-    when(cache.getGatewayReceivers()).thenReturn(Collections.emptySet());
-    when(context.getArguments()).thenReturn(true);
+  public void runningReceivers_stopCalledBeforeDestroying() {
+    GatewayReceiver receiver = mock(GatewayReceiver.class);
+    Set<GatewayReceiver> receivers = new HashSet<>();
+    receivers.add(receiver);
+
+    when(cache.getGatewayReceivers()).thenReturn(receivers);
+    when(receiver.isRunning()).thenReturn(true);
     function.execute(context);
 
     verify(resultSender).lastResult(resultCaptor.capture());
+    verify(receiver).stop();
     CliFunctionResult result = resultCaptor.getValue();
-    assertThat(result.isSuccessful()).isTrue();
-    assertThat(result.getThrowable()).isNull();
-    assertThat(result.getMessage()).isEqualTo("Skipping: Gateway receiver not 
found.");
+    assertThat(result.getStatus(true)).isEqualTo("OK");
+  }
+
+  @Test
+  public void stoppedReceivers_stopNotCalledBeforeDestroying() {
+    GatewayReceiver receiver = mock(GatewayReceiver.class);
+    Set<GatewayReceiver> receivers = new HashSet<>();
+    receivers.add(receiver);
+
+    when(cache.getGatewayReceivers()).thenReturn(receivers);
+    when(receiver.isRunning()).thenReturn(false);
+    function.execute(context);
+
+    verify(resultSender).lastResult(resultCaptor.capture());
+    verify(receiver, never()).stop();
+    CliFunctionResult result = resultCaptor.getValue();
+    assertThat(result.getStatus(true)).isEqualTo("OK");
   }
 }
diff --git 
a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewayReceiverCommandDUnitTest.java
 
b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewayReceiverCommandDUnitTest.java
index f824060..2cf7857 100644
--- 
a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewayReceiverCommandDUnitTest.java
+++ 
b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewayReceiverCommandDUnitTest.java
@@ -354,7 +354,7 @@ public class DestroyGatewayReceiverCommandDUnitTest {
   }
 
   @Test
-  public void destroyIfExistsWithoutGatewayReceivers_isSkipping() {
+  public void destroyIfExistsWithoutGatewayReceivers_isIgnored() {
     Integer locator1Port = locatorSite1.getPort();
     server3 = clusterStartupRule.startServerVM(3, locator1Port);
     server4 = clusterStartupRule.startServerVM(4, locator1Port);
@@ -368,7 +368,7 @@ public class DestroyGatewayReceiverCommandDUnitTest {
             .addOption(CliStrings.IFEXISTS, 
"true").addOption(CliStrings.MEMBER, server3.getName());
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess()
         .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3")
-        .tableHasColumnWithValuesContaining("Status", "Skipping:");
+        .tableHasColumnWithValuesContaining("Status", "IGNORED");
   }
 
   @Test
@@ -503,7 +503,7 @@ public class DestroyGatewayReceiverCommandDUnitTest {
     CommandStringBuilder csb =
         new 
CommandStringBuilder(DestroyGatewayReceiverCommand.DESTROY_GATEWAYRECEIVER)
             .addOption(CliStrings.GROUP, "Grp1,Grp2,Grp3");
-    gfsh.executeAndAssertThat(csb.toString()).statusIsError()
+    gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess()
         .doesNotContainOutput("change is not persisted")
         .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3", 
"server-4", "server-5");
     verifyConfigDoesNotHaveGatewayReceiver("Grp1");
@@ -513,7 +513,7 @@ public class DestroyGatewayReceiverCommandDUnitTest {
   }
 
   @Test
-  public void 
destroyGatewayReceiverDoesNotExistInMultipleGroups_ifExistsSkipsGroupsWithoutReceviers()
 {
+  public void 
destroyGatewayReceiverDoesNotExistInMultipleGroups_ifExistsIgnoresGroupsWithoutReceviers()
 {
     Integer locator1Port = locatorSite1.getPort();
     server3 = startServerWithGroups(3, "Grp1", locator1Port);
     server4 = startServerWithGroups(4, "Grp2", locator1Port);
@@ -538,7 +538,9 @@ public class DestroyGatewayReceiverCommandDUnitTest {
             .addOption(CliStrings.IFEXISTS, 
"true").addOption(CliStrings.GROUP, "Grp1,Grp2,Grp3");
     gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess()
         .doesNotContainOutput("change is not persisted")
-        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3", 
"server-4", "server-5");
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3", 
"server-4", "server-5")
+        .tableHasRowWithValues("Member", "Status", "server-3", "IGNORED")
+        .tableHasRowWithValues("Member", "Status", "server-5", "IGNORED");
     verifyConfigDoesNotHaveGatewayReceiver("Grp1");
     verifyConfigDoesNotHaveGatewayReceiver("cluster");
 

-- 
To stop receiving notification emails like this one, please contact
kh...@apache.org.

Reply via email to