You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2017/12/12 23:21:31 UTC
[geode] branch develop updated: GEODE-4081: update cluster config
after destroy gateway sender (#1140)
This is an automated email from the ASF dual-hosted git repository.
jinmeiliao 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 db30e3f GEODE-4081: update cluster config after destroy gateway sender (#1140)
db30e3f is described below
commit db30e3f4fa6721163720c25ce8e82c2162da7847
Author: jinmeiliao <ji...@pivotal.io>
AuthorDate: Tue Dec 12 15:21:29 2017 -0800
GEODE-4081: update cluster config after destroy gateway sender (#1140)
* make sure we don't update cc when gateway commands are executed on a particular member
---
.../cli/commands/CreateGatewayReceiverCommand.java | 16 ++++--
.../cli/commands/CreateGatewaySenderCommand.java | 22 +++++---
.../cli/commands/DestroyGatewaySenderCommand.java | 15 ++++++
.../functions/GatewaySenderDestroyFunction.java | 5 +-
.../management/internal/cli/i18n/CliStrings.java | 2 +-
.../CreateAsyncEventQueueCommandDUnitTest.java | 2 +-
.../commands/CreateAsyncEventQueueCommandTest.java | 9 ++--
.../commands/CreateGatewayReceiverCommandTest.java | 62 ++++++++++++++++++++++
.../commands/CreateGatewaySenderCommandTest.java | 61 +++++++++++++++++++++
.../commands/DestroyGatewaySenderCommandTest.java | 58 ++++++++++++++++----
.../test/junit/assertions/CommandResultAssert.java | 4 +-
...CreateDestroyGatewaySenderCommandDUnitTest.java | 7 +++
12 files changed, 232 insertions(+), 31 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommand.java
index f314b33..360858f 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommand.java
@@ -89,12 +89,20 @@ public class CreateGatewayReceiverCommand implements GfshCommand {
gatewayReceiverFunctionArgs, membersToCreateGatewayReceiverOn);
CommandResult result = ResultBuilder.buildResult(gatewayReceiverCreateResults);
-
XmlEntity xmlEntity = findXmlEntity(gatewayReceiverCreateResults);
- if (xmlEntity != null) {
- persistClusterConfiguration(result,
- () -> getSharedConfiguration().addXmlEntity(xmlEntity, onGroups));
+ // no xml needs to be updated, simply return
+ if (xmlEntity == null) {
+ return result;
+ }
+
+ // has xml but unable to persist to cluster config, need to print warning message and return
+ if (onMember != null || getSharedConfiguration() == null) {
+ result.setCommandPersisted(false);
+ return result;
}
+
+ // update cluster config
+ getSharedConfiguration().addXmlEntity(xmlEntity, onGroups);
return result;
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommand.java
index 3be626d..7ccc070 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommand.java
@@ -114,11 +114,7 @@ public class CreateGatewaySenderCommand implements GfshCommand {
alertThreshold, dispatcherThreads, orderPolicy == null ? null : orderPolicy.name(),
gatewayEventFilters, gatewayTransportFilter);
- Set<DistributedMember> membersToCreateGatewaySenderOn = findMembers(onGroups, onMember);
-
- if (membersToCreateGatewaySenderOn.isEmpty()) {
- return ResultBuilder.createUserErrorResult(CliStrings.NO_MEMBERS_FOUND_MESSAGE);
- }
+ Set<DistributedMember> membersToCreateGatewaySenderOn = getMembers(onGroups, onMember);
List<CliFunctionResult> gatewaySenderCreateResults =
executeAndGetFunctionResult(GatewaySenderCreateFunction.INSTANCE, gatewaySenderFunctionArgs,
@@ -126,10 +122,20 @@ public class CreateGatewaySenderCommand implements GfshCommand {
CommandResult result = ResultBuilder.buildResult(gatewaySenderCreateResults);
XmlEntity xmlEntity = findXmlEntity(gatewaySenderCreateResults);
- if (xmlEntity != null) {
- persistClusterConfiguration(result,
- () -> getSharedConfiguration().addXmlEntity(xmlEntity, onGroups));
+
+ // no xml needs to be updated, simply return
+ if (xmlEntity == null) {
+ return result;
}
+
+ // has xml but unable to persist to cluster config, need to print warning message and return
+ if (onMember != null || getSharedConfiguration() == null) {
+ result.setCommandPersisted(false);
+ return result;
+ }
+
+ // update cluster config
+ getSharedConfiguration().addXmlEntity(xmlEntity, onGroups);
return result;
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommand.java
index 33680e6..ad1fd3d 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommand.java
@@ -33,6 +33,7 @@ import org.apache.geode.management.internal.cli.functions.GatewaySenderDestroyFu
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.configuration.domain.XmlEntity;
import org.apache.geode.management.internal.security.ResourceOperation;
import org.apache.geode.security.ResourcePermission;
@@ -66,7 +67,21 @@ public class DestroyGatewaySenderCommand implements GfshCommand {
GatewaySenderDestroyFunction.INSTANCE, gatewaySenderDestroyFunctionArgs, members);
CommandResult result = ResultBuilder.buildResult(functionResults);
+ XmlEntity xmlEntity = findXmlEntity(functionResults);
+ // no xml needs to be updated, simply return
+ if (xmlEntity == null) {
+ return result;
+ }
+
+ // has xml but unable to persist to cluster config, need to print warning message and return
+ if (onMember != null || getSharedConfiguration() == null) {
+ result.setCommandPersisted(false);
+ return result;
+ }
+
+ // update cluster config
+ getSharedConfiguration().deleteXmlEntity(xmlEntity, onGroups);
return result;
}
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java
index f99592e..edba972 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java
@@ -20,7 +20,9 @@ import org.apache.geode.cache.execute.FunctionContext;
import org.apache.geode.cache.execute.ResultSender;
import org.apache.geode.cache.wan.GatewaySender;
import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.xmlcache.CacheXml;
import org.apache.geode.management.internal.cli.CliUtil;
+import org.apache.geode.management.internal.configuration.domain.XmlEntity;
public class GatewaySenderDestroyFunction implements Function, InternalEntity {
private static final long serialVersionUID = 1L;
@@ -55,7 +57,8 @@ public class GatewaySenderDestroyFunction implements Function, InternalEntity {
try {
gatewaySender.stop();
gatewaySender.destroy();
- resultSender.lastResult(new CliFunctionResult(memberNameOrId, true,
+ XmlEntity xmlEntity = new XmlEntity(CacheXml.GATEWAY_SENDER, "id", senderId);
+ resultSender.lastResult(new CliFunctionResult(memberNameOrId, xmlEntity,
String.format("GatewaySender \"%s\" destroyed on \"%s\"", senderId, memberNameOrId)));
} catch (Exception e) {
resultSender.lastResult(new CliFunctionResult(memberNameOrId, e, ""));
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
index cf99d0f..bbc823c 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
@@ -213,7 +213,7 @@ public class CliStrings {
public static final String SHARED_CONFIGURATION_NO_LOCATORS_WITH_SHARED_CONFIGURATION =
"No locators with cluster configuration enabled.";
public static final String SHARED_CONFIGURATION_FAILED_TO_PERSIST_COMMAND_CHANGES =
- "Failed to persist the configuration changes due to this command, Revert the command to maintain consistency.\nPlease use \"status cluster-config-service\" to determine whether Cluster configuration service is RUNNING.";
+ "This change is not persisted in the cluster configuration, either because the cluster configuration service is not running or the command is operating on targeted members.";
/* Other Constants */
public static final String GFSH__MSG__NO_LONGER_CONNECTED_TO_0 = "No longer connected to {0}.";
public static final String GFSHPARSER__MSG__REQUIRED_ARGUMENT_0 = "Required Argument: \"{0}\"";
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommandDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommandDUnitTest.java
index 652ce0b..6b9c34f 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommandDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommandDUnitTest.java
@@ -62,7 +62,7 @@ public class CreateAsyncEventQueueCommandDUnitTest {
server = lsRule.startServerAsJmxManager(0);
gfsh.connectAndVerify(server.getJmxPort(), GfshCommandRule.PortType.jmxManager);
gfsh.executeAndAssertThat(VALID_COMMAND + " --id=queue").statusIsSuccess()
- .containsOutput("Failed to persist the configuration")
+ .containsOutput("This change is not persisted in the cluster configuration")
.tableHasColumnWithExactValuesInAnyOrder("Status", "Success").tableHasRowCount("Member", 1);
}
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommandTest.java
index c001f16..2b585d4 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommandTest.java
@@ -131,7 +131,7 @@ public class CreateAsyncEventQueueCommandTest {
doReturn(functionResults).when(command).executeAndGetFunctionResult(isA(Function.class),
isA(Object.class), isA(Set.class));
- gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess().persisted()
+ gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess().hasNoFailToPersistError()
.tableHasRowCount("Member", 2)
.tableHasRowWithValues("Member", "Status", "member1", "SUCCESS")
.tableHasRowWithValues("Member", "Status", "member2", "SUCCESS");
@@ -154,8 +154,7 @@ public class CreateAsyncEventQueueCommandTest {
doReturn(functionResults).when(command).executeAndGetFunctionResult(isA(Function.class),
isA(Object.class), isA(Set.class));
- // need to make sure failToPersist flag is not set so that we won't print out the warning
- gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsError().persisted()
+ gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsError().hasNoFailToPersistError()
.tableHasRowCount("Member", 2)
.tableHasRowWithValues("Member", "Status", "member1", "ERROR: failed")
.tableHasRowWithValues("Member", "Status", "member2",
@@ -178,7 +177,7 @@ public class CreateAsyncEventQueueCommandTest {
doReturn(functionResults).when(command).executeAndGetFunctionResult(isA(Function.class),
isA(Object.class), isA(Set.class));
- gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess().persisted()
+ gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess().hasNoFailToPersistError()
.tableHasRowCount("Member", 2)
.tableHasRowWithValues("Member", "Status", "member1", "SUCCESS").tableHasRowWithValues(
"Member", "Status", "member2", "ERROR: java.lang.RuntimeException: exception happened");
@@ -198,7 +197,7 @@ public class CreateAsyncEventQueueCommandTest {
doReturn(functionResults).when(command).executeAndGetFunctionResult(isA(Function.class),
isA(Object.class), isA(Set.class));
- gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess().failToPersist();
+ gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess().hasFailToPersistError();
// addXmlEntity should not be called
verify(service, times(0)).addXmlEntity(xmlEntity, null);
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommandTest.java
index 6bc5c20..161c6ef 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommandTest.java
@@ -16,14 +16,27 @@
package org.apache.geode.management.internal.cli.commands;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+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 java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
+import org.apache.geode.distributed.internal.ClusterConfigurationService;
+import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.management.internal.cli.GfshParseResult;
+import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
+import org.apache.geode.management.internal.configuration.domain.XmlEntity;
import org.apache.geode.test.junit.categories.UnitTest;
import org.apache.geode.test.junit.rules.GfshParserRule;
@@ -35,10 +48,23 @@ public class CreateGatewayReceiverCommandTest {
public static GfshParserRule gfsh = new GfshParserRule();
private CreateGatewayReceiverCommand command;
+ private InternalCache cache;
+ private List<CliFunctionResult> functionResults;
+ private ClusterConfigurationService ccService;
+ private CliFunctionResult result1;
+ private XmlEntity xmlEntity;
@Before
public void before() {
command = spy(CreateGatewayReceiverCommand.class);
+ ccService = mock(ClusterConfigurationService.class);
+ xmlEntity = mock(XmlEntity.class);
+ cache = mock(InternalCache.class);
+ doReturn(cache).when(command).getCache();
+ doReturn(ccService).when(command).getSharedConfiguration();
+ functionResults = new ArrayList<>();
+ doReturn(functionResults).when(command).executeAndGetFunctionResult(any(), any(),
+ any(Set.class));
}
@Test
@@ -62,4 +88,40 @@ public class CreateGatewayReceiverCommandTest {
gfsh.executeAndAssertThat(command, "create gateway-receiver --end-port=1 --start-port=2")
.statusIsError().containsOutput("start-port must be smaller than end-port");
}
+
+ @Test
+ public void whenNoCCService() {
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ doReturn(null).when(command).getSharedConfiguration();
+ result1 = new CliFunctionResult("member", xmlEntity, "result1");
+ functionResults.add(result1);
+ gfsh.executeAndAssertThat(command, "create gateway-receiver").statusIsSuccess()
+ .hasFailToPersistError();
+ verify(ccService, never()).deleteXmlEntity(any(), any());
+ }
+
+ @Test
+ public void whenCommandOnMember() {
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ doReturn(ccService).when(command).getSharedConfiguration();
+ result1 = new CliFunctionResult("member", xmlEntity, "result1");
+ functionResults.add(result1);
+ gfsh.executeAndAssertThat(command, "create gateway-receiver --member=xyz").statusIsSuccess()
+ .hasFailToPersistError();
+ verify(ccService, never()).deleteXmlEntity(any(), any());
+ }
+
+ @Test
+ public void whenNoXml() {
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ doReturn(ccService).when(command).getSharedConfiguration();
+ result1 = new CliFunctionResult("member", false, "result1");
+ functionResults.add(result1);
+
+ // does not delete because command failed, so hasNoFailToPersistError should still be true
+ gfsh.executeAndAssertThat(command, "create gateway-receiver").statusIsError()
+ .hasNoFailToPersistError();
+ verify(ccService, never()).deleteXmlEntity(any(), any());
+ }
+
}
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommandTest.java
index 48ef8b2..f8a0ae3 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateGatewaySenderCommandTest.java
@@ -18,15 +18,25 @@ package org.apache.geode.management.internal.cli.commands;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
+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 java.util.ArrayList;
import java.util.Collections;
+import java.util.List;
+import java.util.Set;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
+import org.apache.geode.distributed.internal.ClusterConfigurationService;
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
+import org.apache.geode.management.internal.configuration.domain.XmlEntity;
import org.apache.geode.test.junit.categories.UnitTest;
import org.apache.geode.test.junit.rules.GfshParserRule;
@@ -37,10 +47,23 @@ public class CreateGatewaySenderCommandTest {
public static GfshParserRule gfsh = new GfshParserRule();
private CreateGatewaySenderCommand command;
+ private InternalCache cache;
+ private List<CliFunctionResult> functionResults;
+ private ClusterConfigurationService ccService;
+ private CliFunctionResult result1, result2;
+ private XmlEntity xmlEntity;
@Before
public void before() {
command = spy(CreateGatewaySenderCommand.class);
+ ccService = mock(ClusterConfigurationService.class);
+ xmlEntity = mock(XmlEntity.class);
+ cache = mock(InternalCache.class);
+ doReturn(cache).when(command).getCache();
+ doReturn(ccService).when(command).getSharedConfiguration();
+ functionResults = new ArrayList<>();
+ doReturn(functionResults).when(command).executeAndGetFunctionResult(any(), any(),
+ any(Set.class));
}
@Test
@@ -87,4 +110,42 @@ public class CreateGatewaySenderCommandTest {
assertThat(candidate.getCandidates()).hasSize(3);
assertThat(candidate.getFirstCandidate()).isEqualTo(command + "=KEY");
}
+
+ @Test
+ public void whenNoCCService() {
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ doReturn(null).when(command).getSharedConfiguration();
+ result1 = new CliFunctionResult("member", xmlEntity, "result1");
+ functionResults.add(result1);
+ gfsh.executeAndAssertThat(command,
+ "create gateway-sender --id=1 --remote-distributed-system-id=1").statusIsSuccess()
+ .hasFailToPersistError();
+ verify(ccService, never()).deleteXmlEntity(any(), any());
+ }
+
+ @Test
+ public void whenCommandOnMember() {
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ doReturn(ccService).when(command).getSharedConfiguration();
+ result1 = new CliFunctionResult("member", xmlEntity, "result1");
+ functionResults.add(result1);
+ gfsh.executeAndAssertThat(command,
+ "create gateway-sender --member=xyz --id=1 --remote-distributed-system-id=1")
+ .statusIsSuccess().hasFailToPersistError();
+ verify(ccService, never()).deleteXmlEntity(any(), any());
+ }
+
+ @Test
+ public void whenNoXml() {
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ doReturn(ccService).when(command).getSharedConfiguration();
+ result1 = new CliFunctionResult("member", false, "result1");
+ functionResults.add(result1);
+
+ // does not delete because command failed, so hasNoFailToPersistError should still be true
+ gfsh.executeAndAssertThat(command,
+ "create gateway-sender --id=1 --remote-distributed-system-id=1").statusIsError()
+ .hasNoFailToPersistError();
+ verify(ccService, never()).deleteXmlEntity(any(), any());
+ }
}
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommandTest.java
index 207c853..8aa971e 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommandTest.java
@@ -19,7 +19,9 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
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 java.util.ArrayList;
import java.util.List;
@@ -30,10 +32,10 @@ import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.apache.geode.cache.execute.ResultCollector;
+import org.apache.geode.distributed.internal.ClusterConfigurationService;
import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
-import org.apache.geode.management.internal.cli.result.CommandResult;
+import org.apache.geode.management.internal.configuration.domain.XmlEntity;
import org.apache.geode.test.junit.categories.UnitTest;
import org.apache.geode.test.junit.rules.GfshParserRule;
@@ -45,21 +47,23 @@ public class DestroyGatewaySenderCommandTest {
public static GfshParserRule parser = new GfshParserRule();
private DestroyGatewaySenderCommand command;
- private ResultCollector collector;
private InternalCache cache;
private List<CliFunctionResult> functionResults;
+ private ClusterConfigurationService ccService;
private CliFunctionResult result1, result2;
- private CommandResult result;
+ private XmlEntity xmlEntity;
@Before
public void before() throws Exception {
command = spy(DestroyGatewaySenderCommand.class);
+ ccService = mock(ClusterConfigurationService.class);
+ xmlEntity = mock(XmlEntity.class);
cache = mock(InternalCache.class);
doReturn(cache).when(command).getCache();
- collector = mock(ResultCollector.class);
- doReturn(collector).when(command).executeFunction(any(), any(), any(Set.class));
+ doReturn(ccService).when(command).getSharedConfiguration();
functionResults = new ArrayList<>();
- doReturn(functionResults).when(collector).getResult();
+ doReturn(functionResults).when(command).executeAndGetFunctionResult(any(), any(),
+ any(Set.class));
}
@Test
@@ -69,8 +73,8 @@ public class DestroyGatewaySenderCommandTest {
@Test
public void allFunctionReturnsOK() throws Exception {
- result1 = new CliFunctionResult("member", true, "result1");
- result2 = new CliFunctionResult("member", true, "result2");
+ result1 = new CliFunctionResult("member", xmlEntity, "result1");
+ result2 = new CliFunctionResult("member", xmlEntity, "result2");
functionResults.add(result1);
functionResults.add(result2);
@@ -78,6 +82,7 @@ public class DestroyGatewaySenderCommandTest {
parser.executeAndAssertThat(command, "destroy gateway-sender --id=1").statusIsSuccess()
.tableHasColumnWithValuesContaining("Status", "result1", "result2");
+ verify(ccService).deleteXmlEntity(any(), any());
}
@Test
@@ -106,4 +111,39 @@ public class DestroyGatewaySenderCommandTest {
"ERROR: java.lang.Exception: something happened");
}
+
+ @Test
+ public void whenNoCCService() {
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ doReturn(null).when(command).getSharedConfiguration();
+ result1 = new CliFunctionResult("member", xmlEntity, "result1");
+ functionResults.add(result1);
+ parser.executeAndAssertThat(command, "destroy gateway-sender --id=1").statusIsSuccess()
+ .hasFailToPersistError();
+ verify(ccService, never()).deleteXmlEntity(any(), any());
+ }
+
+ @Test
+ public void whenCommandOnMember() {
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ doReturn(ccService).when(command).getSharedConfiguration();
+ result1 = new CliFunctionResult("member", xmlEntity, "result1");
+ functionResults.add(result1);
+ parser.executeAndAssertThat(command, "destroy gateway-sender --member=xyz --id=1")
+ .statusIsSuccess().hasFailToPersistError();
+ verify(ccService, never()).deleteXmlEntity(any(), any());
+ }
+
+ @Test
+ public void whenNoXml() {
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ doReturn(ccService).when(command).getSharedConfiguration();
+ result1 = new CliFunctionResult("member", false, "result1");
+ functionResults.add(result1);
+
+ // does not delete because command failed, so hasNoFailToPersistError should still be true
+ parser.executeAndAssertThat(command, "destroy gateway-sender --id=1").statusIsError()
+ .hasNoFailToPersistError();
+ verify(ccService, never()).deleteXmlEntity(any(), any());
+ }
}
diff --git a/geode-core/src/test/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java b/geode-core/src/test/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java
index 40d1469..fc10639 100644
--- a/geode-core/src/test/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java
+++ b/geode-core/src/test/java/org/apache/geode/test/junit/assertions/CommandResultAssert.java
@@ -105,12 +105,12 @@ public class CommandResultAssert
return this;
}
- public CommandResultAssert failToPersist() {
+ public CommandResultAssert hasFailToPersistError() {
Assertions.assertThat(actual.getCommandResult().failedToPersist()).isTrue();
return this;
}
- public CommandResultAssert persisted() {
+ public CommandResultAssert hasNoFailToPersistError() {
Assertions.assertThat(actual.getCommandResult().failedToPersist()).isFalse();
return this;
}
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/CreateDestroyGatewaySenderCommandDUnitTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/CreateDestroyGatewaySenderCommandDUnitTest.java
index fd810bb..5fa4e23 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/CreateDestroyGatewaySenderCommandDUnitTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/CreateDestroyGatewaySenderCommandDUnitTest.java
@@ -110,6 +110,13 @@ public class CreateDestroyGatewaySenderCommandDUnitTest {
MemberVM.invokeInEveryMember(() -> verifySenderDoesNotExist("ln", false), server1, server2,
server3);
+
+ locatorSite1.invoke(() -> {
+ String xml = LocatorServerStartupRule.getLocator().getSharedConfiguration()
+ .getConfiguration("cluster").getCacheXmlContent();
+ assertThat(xml).doesNotContain("gateway-sender id=\"ln\"");
+ });
+
}
/**
--
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].