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 141c793 GEODE-2565: add if-exists option to
DestoryGatewaySenderCommand (#1048)
141c793 is described below
commit 141c793f95ac799c64148c1ba98b00e6bd14e611
Author: jinmeiliao <[email protected]>
AuthorDate: Tue Nov 14 08:17:11 2017 -0800
GEODE-2565: add if-exists option to DestoryGatewaySenderCommand (#1048)
* GEODE-2565: add if-exists option to DestoryGatewaySenderCommand
---
.../cli/commands/DestroyGatewaySenderCommand.java | 57 ++++++-----
.../internal/cli/commands/GfshCommand.java | 5 +
.../internal/cli/functions/CliFunctionResult.java | 14 +++
.../functions/GatewaySenderDestroyFunction.java | 58 ++++-------
.../GatewaySenderDestroyFunctionArgs.java | 8 +-
.../commands/DestroyGatewaySenderCommandTest.java | 108 +++++++++++++++++++++
.../cli/functions/CliFunctionResultTest.java} | 28 ++++--
.../GatewaySenderDestroyFunctionTest.java | 87 +++++++++++++++++
.../geode/codeAnalysis/sanctionedSerializables.txt | 2 +-
.../DestroyGatewaySenderCommandDUnitTest.java | 65 ++-----------
10 files changed, 295 insertions(+), 137 deletions(-)
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 97b4a95..83dc1a9 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
@@ -18,16 +18,16 @@ package org.apache.geode.management.internal.cli.commands;
import java.util.List;
import java.util.Set;
+import org.apache.logging.log4j.Logger;
import org.springframework.shell.core.annotation.CliCommand;
import org.springframework.shell.core.annotation.CliOption;
import org.apache.geode.cache.execute.ResultCollector;
import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.internal.logging.LogService;
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.internal.cli.CliUtil;
-import org.apache.geode.management.internal.cli.LogWrapper;
import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
import
org.apache.geode.management.internal.cli.functions.GatewaySenderDestroyFunction;
import
org.apache.geode.management.internal.cli.functions.GatewaySenderDestroyFunctionArgs;
@@ -38,6 +38,8 @@ import
org.apache.geode.management.internal.security.ResourceOperation;
import org.apache.geode.security.ResourcePermission;
public class DestroyGatewaySenderCommand implements GfshCommand {
+ private static final Logger logger = LogService.getLogger();
+
@CliCommand(value = CliStrings.DESTROY_GATEWAYSENDER,
help = CliStrings.DESTROY_GATEWAYSENDER__HELP)
@CliMetaData(relatedTopic = CliStrings.TOPIC_GEODE_WAN)
@@ -52,39 +54,34 @@ public class DestroyGatewaySenderCommand implements
GfshCommand {
help = CliStrings.DESTROY_GATEWAYSENDER__MEMBER__HELP) String[]
onMember,
@CliOption(key = CliStrings.DESTROY_GATEWAYSENDER__ID, mandatory = true,
optionContext = ConverterHint.GATEWAY_SENDER_ID,
- help = CliStrings.DESTROY_GATEWAYSENDER__ID__HELP) String id) {
- Result result;
- try {
- GatewaySenderDestroyFunctionArgs gatewaySenderDestroyFunctionArgs =
- new GatewaySenderDestroyFunctionArgs(id);
+ help = CliStrings.DESTROY_GATEWAYSENDER__ID__HELP) String id,
+ @CliOption(key = CliStrings.IFEXISTS, help = CliStrings.IFEXISTS_HELP,
+ specifiedDefaultValue = "true", unspecifiedDefaultValue = "false")
boolean ifExist) {
- Set<DistributedMember> membersToDestroyGatewaySenderOn =
- CliUtil.findMembers(onGroups, onMember);
+ GatewaySenderDestroyFunctionArgs gatewaySenderDestroyFunctionArgs =
+ new GatewaySenderDestroyFunctionArgs(id, ifExist);
- if (membersToDestroyGatewaySenderOn.isEmpty()) {
- return
ResultBuilder.createUserErrorResult(CliStrings.NO_MEMBERS_FOUND_MESSAGE);
- }
+ Set<DistributedMember> members = getMembers(onGroups, onMember);
+
+ ResultCollector<?, ?> resultCollector =
executeFunction(GatewaySenderDestroyFunction.INSTANCE,
+ gatewaySenderDestroyFunctionArgs, members);
- ResultCollector<?, ?> resultCollector =
- CliUtil.executeFunction(GatewaySenderDestroyFunction.INSTANCE,
- gatewaySenderDestroyFunctionArgs,
membersToDestroyGatewaySenderOn);
- @SuppressWarnings("unchecked")
- List<CliFunctionResult> gatewaySenderDestroyResults =
- (List<CliFunctionResult>) resultCollector.getResult();
+ List<CliFunctionResult> functionResults = (List<CliFunctionResult>)
resultCollector.getResult();
- TabularResultData tabularResultData =
ResultBuilder.createTabularResultData();
- final String errorPrefix = "ERROR: ";
- for (CliFunctionResult gatewaySenderDestroyResult :
gatewaySenderDestroyResults) {
- boolean success = gatewaySenderDestroyResult.isSuccessful();
- tabularResultData.accumulate("Member",
gatewaySenderDestroyResult.getMemberIdOrName());
- tabularResultData.accumulate("Status",
- (success ? "" : errorPrefix) +
gatewaySenderDestroyResult.getMessage());
+ TabularResultData tabularResultData =
ResultBuilder.createTabularResultData();
+ boolean errorOccurred = false;
+ for (CliFunctionResult functionResult : functionResults) {
+ tabularResultData.accumulate("Member",
functionResult.getMemberIdOrName());
+ if (functionResult.isSuccessful()) {
+ tabularResultData.accumulate("Status", functionResult.getMessage());
+ } else {
+ // if result has exception, it will be logged by the server before
throwing it.
+ // so we don't need to log it here anymore.
+ tabularResultData.accumulate("Status", "ERROR: " +
functionResult.getErrorMessage());
+ errorOccurred = true;
}
- result = ResultBuilder.buildResult(tabularResultData);
- } catch (IllegalArgumentException e) {
- LogWrapper.getInstance().info(e.getMessage());
- result = ResultBuilder.createUserErrorResult(e.getMessage());
}
- return result;
+ tabularResultData.setStatus(errorOccurred ? Result.Status.ERROR :
Result.Status.OK);
+ return ResultBuilder.buildResult(tabularResultData);
}
}
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshCommand.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshCommand.java
index 904001f..134a153 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshCommand.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshCommand.java
@@ -29,6 +29,7 @@ import
org.apache.geode.distributed.internal.ClusterConfigurationService;
import org.apache.geode.distributed.internal.InternalLocator;
import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.internal.security.SecurityService;
+import org.apache.geode.management.ManagementService;
import org.apache.geode.management.cli.Result;
import org.apache.geode.management.internal.cli.CliUtil;
import
org.apache.geode.management.internal.cli.exceptions.EntityNotFoundException;
@@ -161,6 +162,10 @@ public interface GfshCommand extends CommandMarker {
return matchingMembers;
}
+ default ManagementService getManagementService() {
+ return ManagementService.getExistingManagementService(getCache());
+ }
+
default Set<DistributedMember> findMembersForRegion(InternalCache cache,
String regionPath) {
return CliUtil.getRegionAssociatedMembers(regionPath, cache, true);
}
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java
index 57589ef..4bbf389 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java
@@ -117,6 +117,20 @@ public class CliFunctionResult implements
Comparable<CliFunctionResult>, DataSer
return (String) this.serializables[0];
}
+ public String getErrorMessage() {
+ // if message is not null, use that
+ if (getMessage() != null) {
+ return getMessage();
+ }
+
+ // otherwise use exception's message
+ if (throwable != null) {
+ return throwable.getMessage();
+ }
+
+ return null;
+ }
+
public Serializable[] getSerializables() {
return this.serializables;
}
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 fc3ec6b..f99592e 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
@@ -14,23 +14,16 @@
*/
package org.apache.geode.management.internal.cli.functions;
-import org.apache.logging.log4j.Logger;
-
import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.FunctionAdapter;
+import org.apache.geode.cache.execute.Function;
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.wan.GatewaySenderException;
-import org.apache.geode.internal.logging.LogService;
import org.apache.geode.management.internal.cli.CliUtil;
-import org.apache.geode.management.internal.cli.i18n.CliStrings;
-public class GatewaySenderDestroyFunction extends FunctionAdapter implements
InternalEntity {
+public class GatewaySenderDestroyFunction implements Function, InternalEntity {
private static final long serialVersionUID = 1L;
-
- private static final Logger logger = LogService.getLogger();
private static final String ID =
GatewaySenderDestroyFunction.class.getName();
public static GatewaySenderDestroyFunction INSTANCE = new
GatewaySenderDestroyFunction();
@@ -45,41 +38,28 @@ public class GatewaySenderDestroyFunction extends
FunctionAdapter implements Int
GatewaySenderDestroyFunctionArgs gatewaySenderDestroyFunctionArgs =
(GatewaySenderDestroyFunctionArgs) context.getArguments();
- try {
- GatewaySender gatewaySender =
- cache.getGatewaySender(gatewaySenderDestroyFunctionArgs.getId());
- if (gatewaySender != null) {
- gatewaySender.stop();
- gatewaySender.destroy();
+ String senderId = gatewaySenderDestroyFunctionArgs.getId();
+ boolean ifExists = gatewaySenderDestroyFunctionArgs.isIfExists();
+ GatewaySender gatewaySender = cache.getGatewaySender(senderId);
+ if (gatewaySender == null) {
+ String message = "Gateway sender " + senderId + " not found.";
+ if (ifExists) {
+ resultSender
+ .lastResult(new CliFunctionResult(memberNameOrId, true, "Skipping:
" + message));
} else {
- throw new GatewaySenderException(
- "GateWaySender with Id " +
gatewaySenderDestroyFunctionArgs.getId() + " not found");
- }
- resultSender.lastResult(new CliFunctionResult(memberNameOrId, true,
-
CliStrings.format(CliStrings.DESTROY_GATEWAYSENDER__MSG__GATEWAYSENDER_0_DESTROYED_ON_1,
- new Object[] {gatewaySenderDestroyFunctionArgs.getId(),
memberNameOrId})));
-
- } catch (GatewaySenderException gse) {
- resultSender.lastResult(handleException(memberNameOrId,
gse.getMessage(), gse));
- } catch (Exception e) {
- String exceptionMsg = e.getMessage();
- if (exceptionMsg == null) {
- exceptionMsg = CliUtil.stackTraceAsString(e);
+ resultSender.lastResult(new CliFunctionResult(memberNameOrId, false,
message));
}
- resultSender.lastResult(handleException(memberNameOrId, exceptionMsg,
e));
+ return;
}
- }
- private CliFunctionResult handleException(final String memberNameOrId, final
String exceptionMsg,
- final Exception e) {
- if (e != null && logger.isDebugEnabled()) {
- logger.debug(e.getMessage(), e);
- }
- if (exceptionMsg != null) {
- return new CliFunctionResult(memberNameOrId, false, exceptionMsg);
+ try {
+ gatewaySender.stop();
+ gatewaySender.destroy();
+ resultSender.lastResult(new CliFunctionResult(memberNameOrId, true,
+ String.format("GatewaySender \"%s\" destroyed on \"%s\"", senderId,
memberNameOrId)));
+ } catch (Exception e) {
+ resultSender.lastResult(new CliFunctionResult(memberNameOrId, e, ""));
}
-
- return new CliFunctionResult(memberNameOrId);
}
@Override
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs.java
index 361cf63..648e8bf 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs.java
@@ -20,13 +20,19 @@ public class GatewaySenderDestroyFunctionArgs implements
Serializable {
private static final long serialVersionUID = 3848480256348119530L;
private String id;
+ private boolean ifExists;
- public GatewaySenderDestroyFunctionArgs(String id) {
+ public GatewaySenderDestroyFunctionArgs(String id, boolean ifExists) {
this.id = id;
+ this.ifExists = ifExists;
}
public String getId() {
return id;
}
+
+ public boolean isIfExists() {
+ return ifExists;
+ }
}
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
new file mode 100644
index 0000000..78726ee
--- /dev/null
+++
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyGatewaySenderCommandTest.java
@@ -0,0 +1,108 @@
+/*
+ * 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.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.spy;
+
+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.cache.execute.ResultCollector;
+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.test.junit.categories.UnitTest;
+import org.apache.geode.test.junit.rules.GfshParserRule;
+
+
+@Category(UnitTest.class)
+public class DestroyGatewaySenderCommandTest {
+
+ @ClassRule
+ public static GfshParserRule parser = new GfshParserRule();
+
+ private DestroyGatewaySenderCommand command;
+ private ResultCollector collector;
+ private InternalCache cache;
+ private List<CliFunctionResult> functionResults;
+ private CliFunctionResult result1, result2;
+ private CommandResult result;
+
+ @Before
+ public void before() throws Exception {
+ command = spy(DestroyGatewaySenderCommand.class);
+ cache = mock(InternalCache.class);
+ doReturn(cache).when(command).getCache();
+ collector = mock(ResultCollector.class);
+ doReturn(collector).when(command).executeFunction(any(), any(),
any(Set.class));
+ functionResults = new ArrayList<>();
+ doReturn(functionResults).when(collector).getResult();
+ }
+
+ @Test
+ public void mandatoryOptions() throws Exception {
+ assertThat(parser.parse("destroy gateway-sender --member=A")).isNull();
+ }
+
+ @Test
+ public void allFunctionReturnsOK() throws Exception {
+ result1 = new CliFunctionResult("member", true, "result1");
+ result2 = new CliFunctionResult("member", true, "result2");
+ functionResults.add(result1);
+ functionResults.add(result2);
+
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ parser.executeAndAssertThat(command, "destroy gateway-sender
--id=1").statusIsSuccess()
+ .tableHasColumnWithValuesContaining("Status", "result1", "result2");
+
+ }
+
+ @Test
+ public void oneFunctionReturnsError() throws Exception {
+ result1 = new CliFunctionResult("member", true, "result1");
+ result2 = new CliFunctionResult("member", false, "result2");
+ functionResults.add(result1);
+ functionResults.add(result2);
+
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ parser.executeAndAssertThat(command, "destroy gateway-sender
--id=1").statusIsError()
+ .tableHasColumnWithValuesContaining("Status", "result1", "ERROR:
result2");
+
+ }
+
+ @Test
+ public void oneFunctionThrowsGeneralException() throws Exception {
+ result1 = new CliFunctionResult("member", true, "result1");
+ result2 = new CliFunctionResult("member", new Exception("something
happened"), null);
+ functionResults.add(result1);
+ functionResults.add(result2);
+
+ doReturn(mock(Set.class)).when(command).getMembers(any(), any());
+ parser.executeAndAssertThat(command, "destroy gateway-sender
--id=1").statusIsError()
+ .tableHasColumnWithValuesContaining("Status", "result1", "ERROR:
something happened");
+
+ }
+}
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs.java
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/CliFunctionResultTest.java
similarity index 51%
copy from
geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs.java
copy to
geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/CliFunctionResultTest.java
index 361cf63..2f0946b 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs.java
+++
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/CliFunctionResultTest.java
@@ -12,21 +12,31 @@
* or implied. See the License for the specific language governing permissions
and limitations under
* the License.
*/
+
package org.apache.geode.management.internal.cli.functions;
-import java.io.Serializable;
+import static org.assertj.core.api.Assertions.assertThat;
-public class GatewaySenderDestroyFunctionArgs implements Serializable {
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
- private static final long serialVersionUID = 3848480256348119530L;
- private String id;
+import org.apache.geode.test.junit.categories.UnitTest;
- public GatewaySenderDestroyFunctionArgs(String id) {
- this.id = id;
- }
+@Category(UnitTest.class)
+public class CliFunctionResultTest {
+
+ private CliFunctionResult result;
+
+ @Test
+ public void getErrorMessage() throws Exception {
+ result = new CliFunctionResult("memberName", false, "message");
+ assertThat(result.getErrorMessage()).isEqualTo("message");
+
+ result = new CliFunctionResult("memberName", new Exception("exception
message"), "message");
+ assertThat(result.getErrorMessage()).isEqualTo("message");
- public String getId() {
- return id;
+ result = new CliFunctionResult("memberName", new Exception("exception
message"), null);
+ assertThat(result.getErrorMessage()).isEqualTo("exception message");
}
}
diff --git
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionTest.java
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionTest.java
new file mode 100644
index 0000000..28f3311
--- /dev/null
+++
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionTest.java
@@ -0,0 +1,87 @@
+/*
+ * 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.management.internal.cli.functions;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.mockito.ArgumentCaptor;
+
+import org.apache.geode.cache.execute.FunctionContext;
+import org.apache.geode.cache.execute.ResultSender;
+import org.apache.geode.distributed.DistributedSystem;
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.test.junit.categories.UnitTest;
+
+
+@Category(UnitTest.class)
+public class GatewaySenderDestroyFunctionTest {
+
+ private GatewaySenderDestroyFunction function;
+ private FunctionContext context;
+ private InternalCache cache;
+ private ResultSender resultSender;
+ private ArgumentCaptor<CliFunctionResult> resultCaptor;
+ private GatewaySenderDestroyFunctionArgs args;
+
+ @Before
+ public void before() {
+ function = spy(GatewaySenderDestroyFunction.class);
+ context = mock(FunctionContext.class);
+ cache = mock(InternalCache.class);
+ args = mock(GatewaySenderDestroyFunctionArgs.class);
+ resultSender = mock(ResultSender.class);
+ when(context.getCache()).thenReturn(cache);
+ when(context.getResultSender()).thenReturn(resultSender);
+ when(context.getArguments()).thenReturn(args);
+ when(args.getId()).thenReturn("id");
+ resultCaptor = ArgumentCaptor.forClass(CliFunctionResult.class);
+
when(cache.getDistributedSystem()).thenReturn(mock(DistributedSystem.class));
+ }
+
+ @Test
+ public void gateWaySenderNotFound_ifExists_false() throws Exception {
+ when(cache.getGatewaySender(any())).thenReturn(null);
+ when(args.isIfExists()).thenReturn(false);
+ function.execute(context);
+
+ verify(resultSender).lastResult(resultCaptor.capture());
+ CliFunctionResult result = resultCaptor.getValue();
+ assertThat(result.isSuccessful()).isFalse();
+ assertThat(result.getThrowable()).isNull();
+ assertThat(result.getMessage()).isEqualTo("Gateway sender id not found.");
+ }
+
+ @Test
+ public void gateWaySenderNotFound_ifExists_true() throws Exception {
+ when(cache.getGatewaySender(any())).thenReturn(null);
+ when(args.isIfExists()).thenReturn(true);
+ function.execute(context);
+
+ verify(resultSender).lastResult(resultCaptor.capture());
+ CliFunctionResult result = resultCaptor.getValue();
+ assertThat(result.isSuccessful()).isTrue();
+ assertThat(result.getThrowable()).isNull();
+ assertThat(result.getMessage()).isEqualTo("Skipping: Gateway sender id not
found.");
+ }
+}
diff --git
a/geode-core/src/test/resources/org/apache/geode/codeAnalysis/sanctionedSerializables.txt
b/geode-core/src/test/resources/org/apache/geode/codeAnalysis/sanctionedSerializables.txt
index f6b4302..aa4669e 100755
---
a/geode-core/src/test/resources/org/apache/geode/codeAnalysis/sanctionedSerializables.txt
+++
b/geode-core/src/test/resources/org/apache/geode/codeAnalysis/sanctionedSerializables.txt
@@ -519,7 +519,7 @@
org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction
org/apache/geode/management/internal/cli/functions/GatewayReceiverFunctionArgs,true,-5158224572470173267,bindAddress:java/lang/String,endPort:java/lang/Integer,gatewayTransportFilters:java/lang/String[],hostnameForSenders:java/lang/String,manualStart:java/lang/Boolean,maximumTimeBetweenPings:java/lang/Integer,socketBufferSize:java/lang/Integer,startPort:java/lang/Integer
org/apache/geode/management/internal/cli/functions/GatewaySenderCreateFunction,true,8746830191680509335
org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction,true,1
-org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs,true,3848480256348119530,id:java/lang/String
+org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs,true,3848480256348119530,id:java/lang/String,ifExists:boolean
org/apache/geode/management/internal/cli/functions/GatewaySenderFunctionArgs,true,-5158224572470173267,alertThreshold:java/lang/Integer,batchSize:java/lang/Integer,batchTimeInterval:java/lang/Integer,diskStoreName:java/lang/String,diskSynchronous:java/lang/Boolean,dispatcherThreads:java/lang/Integer,enableBatchConflation:java/lang/Boolean,enablePersistence:java/lang/Boolean,gatewayEventFilters:java/lang/String[],gatewayTransportFilters:java/lang/String[],id:java/lang/String,manualStart:j
[...]
org/apache/geode/management/internal/cli/functions/GetMemberConfigInformationFunction,true,1
org/apache/geode/management/internal/cli/functions/GetMemberInformationFunction,true,1
diff --git
a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewaySenderCommandDUnitTest.java
b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewaySenderCommandDUnitTest.java
index 61f9163..3980d92 100644
---
a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewaySenderCommandDUnitTest.java
+++
b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewaySenderCommandDUnitTest.java
@@ -16,13 +16,7 @@
package org.apache.geode.internal.cache.wan.wancommand;
import static
org.apache.geode.distributed.ConfigurationProperties.DISTRIBUTED_SYSTEM_ID;
-import static
org.apache.geode.distributed.ConfigurationProperties.REMOTE_LOCATORS;
-import static org.apache.geode.test.dunit.LogWriterUtils.getLogWriter;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import java.util.List;
import java.util.Properties;
import org.junit.Before;
@@ -30,11 +24,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.apache.geode.management.cli.Result;
-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.TabularResultData;
-import org.apache.geode.test.dunit.IgnoredException;
import org.apache.geode.test.dunit.rules.LocatorServerStartupRule;
import org.apache.geode.test.dunit.rules.MemberVM;
import org.apache.geode.test.junit.categories.DistributedTest;
@@ -49,61 +38,23 @@ public class DestroyGatewaySenderCommandDUnitTest {
@Rule
public GfshCommandRule gfsh = new GfshCommandRule();
- private MemberVM locatorSite1;
- private MemberVM locatorSite2;
- private MemberVM server1;
- private MemberVM server2;
- private MemberVM server3;
+ private MemberVM locator;
@Before
public void before() throws Exception {
Properties props = new Properties();
props.setProperty(DISTRIBUTED_SYSTEM_ID, "" + 1);
- locatorSite1 = locatorServerStartupRule.startLocatorVM(1, props);
-
- props.setProperty(DISTRIBUTED_SYSTEM_ID, "" + 2);
- props.setProperty(REMOTE_LOCATORS, "localhost[" + locatorSite1.getPort() +
"]");
- locatorSite2 = locatorServerStartupRule.startLocatorVM(2, props);
-
- // Connect Gfsh to locator.
- gfsh.connectAndVerify(locatorSite1);
+ locator = locatorServerStartupRule.startLocatorVM(0, props);
+ gfsh.connectAndVerify(locator);
}
@Test
public void testDestroyGatewaySender_NotCreatedSender() throws Exception {
- Integer locator1Port = locatorSite1.getPort();
-
- // setup servers in Site #1
- server1 = locatorServerStartupRule.startServerVM(3, locator1Port);
- server2 = locatorServerStartupRule.startServerVM(4, locator1Port);
- server3 = locatorServerStartupRule.startServerVM(5, locator1Port);
-
- // Test Destroy Command
- String command =
- CliStrings.DESTROY_GATEWAYSENDER + " --" +
CliStrings.DESTROY_GATEWAYSENDER__ID + "=ln";
- CommandResult cmdResult = executeCommandWithIgnoredExceptions(command);
- if (cmdResult != null) {
- String strCmdResult = cmdResult.toString();
- getLogWriter().info(
- "testDestroyGatewaySender_NotCreatedSender stringResult : " +
strCmdResult + ">>>>");
- assertEquals(Result.Status.OK, cmdResult.getStatus());
- TabularResultData resultData = (TabularResultData)
cmdResult.getResultData();
- List<String> status = resultData.retrieveAllValues("Status");
- assertEquals(3, status.size());
- for (String stat : status) {
- assertTrue("GatewaySender destroy should fail",
stat.contains("ERROR:"));
- }
- } else {
- fail("testCreateDestroyParallelGatewaySender failed as did not get
CommandResult");
- }
- }
+ locatorServerStartupRule.startServerVM(1, locator.getPort());
+ locatorServerStartupRule.startServerVM(2, locator.getPort());
- private CommandResult executeCommandWithIgnoredExceptions(String command) {
- final IgnoredException ignored =
IgnoredException.addIgnoredException("Could not connect");
- try {
- return gfsh.executeCommand(command);
- } finally {
- ignored.remove();
- }
+ // destroy a sender that does not exist
+ gfsh.executeAndAssertThat("destroy gateway-sender --id=ln").statusIsError()
+ .tableHasColumnWithValuesContaining("Status", "ERROR", "ERROR");
}
}
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].