You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by pr...@apache.org on 2018/05/21 18:59:33 UTC
[geode] branch develop updated: GEODE-4858: CreateAsyncEventQueue
and tests refactor. (#1969)
This is an automated email from the ASF dual-hosted git repository.
prhomberg 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 ec7a162 GEODE-4858: CreateAsyncEventQueue and tests refactor. (#1969)
ec7a162 is described below
commit ec7a162b09faa87ac7d7f119fbf46827602e166c
Author: Patrick Rhomberg <pr...@pivotal.io>
AuthorDate: Mon May 21 11:59:27 2018 -0700
GEODE-4858: CreateAsyncEventQueue and tests refactor. (#1969)
* Unsupported ModelCommandResult methods failedToPersist, setCommandPersisted, and setFileToDownload now throw exceptions to avoid accidental use in testing.
* Extracted cluster configuration messages in CommandExecutor to public class fields, for test consumption.
* Extracted several message strings in ModelCommandResult to public class fields, for test consumption
* Serialized necessary AsyncEventQueue configuration classes and updated sanctioned-geode-core-serializables
---
.../geode/cache/configuration/CacheConfig.java | 3 +-
.../geode/cache/configuration/ClassNameType.java | 3 +-
.../geode/cache/configuration/ObjectType.java | 3 +-
.../cli/commands/CreateAsyncEventQueueCommand.java | 61 ++++++++++--------
.../functions/CreateAsyncEventQueueFunction.java | 75 ++++++++++++----------
.../internal/cli/remote/CommandExecutor.java | 11 ++--
.../internal/cli/result/ModelCommandResult.java | 20 ++++--
.../sanctioned-geode-core-serializables.txt | 7 ++
.../ConfigurePDXCommandIntegrationTest.java | 10 +--
.../cli/commands/ConfigurePDXCommandTest.java | 29 +++++----
.../CreateAsyncEventQueueCommandDUnitTest.java | 33 ++++++----
.../commands/CreateAsyncEventQueueCommandTest.java | 74 ++++++++++-----------
12 files changed, 191 insertions(+), 138 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/cache/configuration/CacheConfig.java b/geode-core/src/main/java/org/apache/geode/cache/configuration/CacheConfig.java
index eccc894..a96904b 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/configuration/CacheConfig.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/configuration/CacheConfig.java
@@ -20,6 +20,7 @@ package org.apache.geode.cache.configuration;
import static org.apache.geode.cache.configuration.CacheElement.findElement;
+import java.io.Serializable;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
@@ -1107,7 +1108,7 @@ public class CacheConfig {
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "",
propOrder = {"gatewayEventFilter", "gatewayEventSubstitutionFilter", "asyncEventListener"})
- public static class AsyncEventQueue {
+ public static class AsyncEventQueue implements Serializable {
@XmlElement(name = "gateway-event-filter", namespace = "http://geode.apache.org/schema/cache")
protected List<DeclarableType> gatewayEventFilter;
diff --git a/geode-core/src/main/java/org/apache/geode/cache/configuration/ClassNameType.java b/geode-core/src/main/java/org/apache/geode/cache/configuration/ClassNameType.java
index 77a8ff6..9cb3ea3 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/configuration/ClassNameType.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/configuration/ClassNameType.java
@@ -17,6 +17,7 @@
package org.apache.geode.cache.configuration;
+import java.io.Serializable;
import java.util.Objects;
import javax.xml.bind.annotation.XmlAccessType;
@@ -47,7 +48,7 @@ import javax.xml.bind.annotation.XmlType;
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"className"})
-public class ClassNameType {
+public class ClassNameType implements Serializable {
@XmlElement(name = "class-name", namespace = "http://geode.apache.org/schema/cache",
required = true)
diff --git a/geode-core/src/main/java/org/apache/geode/cache/configuration/ObjectType.java b/geode-core/src/main/java/org/apache/geode/cache/configuration/ObjectType.java
index 0a78f0d..2767815 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/configuration/ObjectType.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/configuration/ObjectType.java
@@ -17,6 +17,7 @@
package org.apache.geode.cache.configuration;
+import java.io.Serializable;
import java.util.Objects;
import javax.xml.bind.annotation.XmlAccessType;
@@ -48,7 +49,7 @@ import javax.xml.bind.annotation.XmlType;
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"string", "declarable"})
-public class ObjectType {
+public class ObjectType implements Serializable {
@XmlElement(name = "string", namespace = "http://geode.apache.org/schema/cache")
protected String string;
@XmlElement(name = "declarable", namespace = "http://geode.apache.org/schema/cache")
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommand.java
index 0f9b70d..7673b33 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAsyncEventQueueCommand.java
@@ -15,34 +15,34 @@
package org.apache.geode.management.internal.cli.commands;
+import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import java.util.Set;
+import java.util.stream.Collectors;
import org.springframework.shell.core.annotation.CliCommand;
import org.springframework.shell.core.annotation.CliOption;
import org.apache.geode.cache.asyncqueue.internal.AsyncEventQueueFactoryImpl;
+import org.apache.geode.cache.configuration.CacheConfig;
+import org.apache.geode.cache.configuration.DeclarableType;
import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
import org.apache.geode.management.cli.ConverterHint;
-import org.apache.geode.management.cli.Result;
-import org.apache.geode.management.internal.cli.functions.AsyncEventQueueFunctionArgs;
+import org.apache.geode.management.cli.SingleGfshCommand;
import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
import org.apache.geode.management.internal.cli.functions.CreateAsyncEventQueueFunction;
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.cli.result.model.ResultModel;
import org.apache.geode.management.internal.security.ResourceOperation;
import org.apache.geode.security.ResourcePermission;
-public class CreateAsyncEventQueueCommand extends InternalGfshCommand {
+public class CreateAsyncEventQueueCommand extends SingleGfshCommand {
@CliCommand(value = CliStrings.CREATE_ASYNC_EVENT_QUEUE,
help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__HELP)
@ResourceOperation(resource = ResourcePermission.Resource.CLUSTER,
operation = ResourcePermission.Operation.MANAGE, target = ResourcePermission.Target.DEPLOY)
- public Result createAsyncEventQueue(
+ public ResultModel createAsyncEventQueue(
@CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__ID, mandatory = true,
help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__ID__HELP) String id,
@CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS},
@@ -108,27 +108,38 @@ public class CreateAsyncEventQueueCommand extends InternalGfshCommand {
}
Set<DistributedMember> targetMembers = getMembers(groups, null);
-
- AsyncEventQueueFunctionArgs aeqArgs = new AsyncEventQueueFunctionArgs(id, parallel,
- enableBatchConflation, batchSize, batchTimeInterval, persistent, diskStore, diskSynchronous,
- maxQueueMemory, dispatcherThreads, orderPolicy, gatewayEventFilters,
- gatewaySubstitutionListener, listener, listenerProperties, forwardExpirationDestroy);
+ CacheConfig.AsyncEventQueue config = new CacheConfig.AsyncEventQueue();
+ config.setAsyncEventListener(new DeclarableType(listener, listenerProperties));
+ config.setBatchSize(String.valueOf(batchSize));
+ config.setBatchTimeInterval(String.valueOf(batchTimeInterval));
+ config.setDiskStoreName(diskStore);
+ config.setDiskSynchronous(diskSynchronous);
+ config.setDispatcherThreads(String.valueOf(dispatcherThreads));
+ config.setEnableBatchConflation(enableBatchConflation);
+ config.setForwardExpirationDestroy(forwardExpirationDestroy);
+ if (gatewayEventFilters != null) {
+ config.getGatewayEventFilter().addAll(Arrays.stream(gatewayEventFilters)
+ .map(classname -> new DeclarableType((classname))).collect(Collectors.toList()));
+ }
+ if (gatewaySubstitutionListener != null) {
+ config.setGatewayEventSubstitutionFilter(new DeclarableType(gatewaySubstitutionListener));
+ }
+ config.setId(id);
+ config.setMaximumQueueMemory(String.valueOf(maxQueueMemory));
+ config.setOrderPolicy(orderPolicy);
+ config.setParallel(parallel);
+ config.setPersistent(persistent);
CreateAsyncEventQueueFunction function = new CreateAsyncEventQueueFunction();
- List<CliFunctionResult> results = executeAndGetFunctionResult(function, aeqArgs, targetMembers);
+ List<CliFunctionResult> results = executeAndGetFunctionResult(function, config, targetMembers);
- if (results.size() == 0) {
- throw new RuntimeException("No results received.");
- }
-
- CommandResult commandResult = ResultBuilder.buildResult(results);
- XmlEntity xmlEntity = findXmlEntity(results);
- if (xmlEntity != null) {
- persistClusterConfiguration(commandResult,
- () -> ((InternalConfigurationPersistenceService) getConfigurationPersistenceService())
- .addXmlEntity(xmlEntity, groups));
- }
+ ResultModel commandResult = ResultModel.createMemberStatusResult(results);
+ commandResult.setConfigObject(config);
return commandResult;
}
+ @Override
+ public void updateClusterConfig(String group, CacheConfig config, Object configObject) {
+ config.getAsyncEventQueue().add((CacheConfig.AsyncEventQueue) configObject);
+ }
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateAsyncEventQueueFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateAsyncEventQueueFunction.java
index dac4564..4fc0f9b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateAsyncEventQueueFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateAsyncEventQueueFunction.java
@@ -15,6 +15,7 @@
package org.apache.geode.management.internal.cli.functions;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -25,6 +26,10 @@ import org.apache.geode.cache.CacheClosedException;
import org.apache.geode.cache.Declarable;
import org.apache.geode.cache.asyncqueue.AsyncEventListener;
import org.apache.geode.cache.asyncqueue.AsyncEventQueueFactory;
+import org.apache.geode.cache.configuration.CacheConfig;
+import org.apache.geode.cache.configuration.ClassNameType;
+import org.apache.geode.cache.configuration.DeclarableType;
+import org.apache.geode.cache.configuration.ParameterType;
import org.apache.geode.cache.execute.FunctionContext;
import org.apache.geode.cache.wan.GatewayEventFilter;
import org.apache.geode.cache.wan.GatewayEventSubstitutionFilter;
@@ -33,10 +38,9 @@ import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.internal.ClassPathLoader;
import org.apache.geode.internal.InternalDataSerializer;
import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.cache.execute.InternalFunction;
-import org.apache.geode.internal.cache.xmlcache.CacheXml;
import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.management.internal.configuration.domain.XmlEntity;
+import org.apache.geode.management.cli.CliFunction;
+import org.apache.geode.management.internal.cli.functions.CliFunctionResult.StatusState;
/**
* Function used by the 'create async-event-queue' gfsh command to create an asynchronous event
@@ -44,19 +48,18 @@ import org.apache.geode.management.internal.configuration.domain.XmlEntity;
*
* @since GemFire 8.0
*/
-public class CreateAsyncEventQueueFunction implements InternalFunction {
+public class CreateAsyncEventQueueFunction extends CliFunction {
private static final Logger logger = LogService.getLogger();
private static final long serialVersionUID = 1L;
- @SuppressWarnings("deprecation")
@Override
- public void execute(FunctionContext context) {
+ public CliFunctionResult executeFunction(FunctionContext context) {
// Declared here so that it's available when returning a Throwable
String memberId = "";
try {
- AsyncEventQueueFunctionArgs aeqArgs = (AsyncEventQueueFunctionArgs) context.getArguments();
+ CacheConfig.AsyncEventQueue config = (CacheConfig.AsyncEventQueue) context.getArguments();
InternalCache cache = (InternalCache) context.getCache();
@@ -68,18 +71,21 @@ public class CreateAsyncEventQueueFunction implements InternalFunction {
memberId = member.getName();
}
- AsyncEventQueueFactory asyncEventQueueFactory = cache.createAsyncEventQueueFactory()
- .setParallel(aeqArgs.isParallel())
- .setBatchConflationEnabled(aeqArgs.isEnableBatchConflation())
- .setBatchSize(aeqArgs.getBatchSize()).setBatchTimeInterval(aeqArgs.getBatchTimeInterval())
- .setPersistent(aeqArgs.isPersistent()).setDiskStoreName(aeqArgs.getDiskStoreName())
- .setDiskSynchronous(aeqArgs.isDiskSynchronous())
- .setForwardExpirationDestroy(aeqArgs.isForwardExpirationDestroy())
- .setMaximumQueueMemory(aeqArgs.getMaxQueueMemory())
- .setDispatcherThreads(aeqArgs.getDispatcherThreads())
- .setOrderPolicy(OrderPolicy.valueOf(aeqArgs.getOrderPolicy()));
-
- String[] gatewayEventFilters = aeqArgs.getGatewayEventFilters();
+ AsyncEventQueueFactory asyncEventQueueFactory =
+ cache.createAsyncEventQueueFactory().setParallel(config.isParallel())
+ .setBatchConflationEnabled(config.isEnableBatchConflation())
+ .setBatchSize(Integer.parseInt(config.getBatchSize()))
+ .setBatchTimeInterval(Integer.parseInt(config.getBatchTimeInterval()))
+ .setPersistent(config.isPersistent()).setDiskStoreName(config.getDiskStoreName())
+ .setDiskSynchronous(config.isDiskSynchronous())
+ .setForwardExpirationDestroy(config.isForwardExpirationDestroy())
+ .setMaximumQueueMemory(Integer.parseInt(config.getMaximumQueueMemory()))
+ .setDispatcherThreads(Integer.parseInt(config.getDispatcherThreads()))
+ .setOrderPolicy(OrderPolicy.valueOf(config.getOrderPolicy()));
+
+ String[] gatewayEventFilters = config.getGatewayEventFilter().stream()
+ .map(ClassNameType::getClassName).toArray(String[]::new);
+
if (gatewayEventFilters != null) {
for (String gatewayEventFilter : gatewayEventFilters) {
asyncEventQueueFactory
@@ -87,19 +93,26 @@ public class CreateAsyncEventQueueFunction implements InternalFunction {
}
}
- String gatewaySubstitutionFilter = aeqArgs.getGatewaySubstitutionFilter();
- if (gatewaySubstitutionFilter != null) {
+ DeclarableType gatewayEventSubstitutionFilter = config.getGatewayEventSubstitutionFilter();
+
+ if (gatewayEventSubstitutionFilter != null) {
+ String gatewaySubstitutionFilter = gatewayEventSubstitutionFilter.getClassName();
asyncEventQueueFactory.setGatewayEventSubstitutionListener(
(GatewayEventSubstitutionFilter<?, ?>) newInstance(gatewaySubstitutionFilter));
}
- String listenerClassName = aeqArgs.getListenerClassName();
+ String listenerClassName = config.getAsyncEventListener().getClassName();
Object listenerInstance;
Class<?> listenerClass = InternalDataSerializer.getCachedClass(listenerClassName);
listenerInstance = listenerClass.newInstance();
- Properties listenerProperties = aeqArgs.getListenerProperties();
- if (listenerProperties != null && !listenerProperties.isEmpty()) {
+ List<ParameterType> parameters = config.getAsyncEventListener().getParameter();
+ Properties listenerProperties = new Properties();
+ for (ParameterType p : parameters) {
+ listenerProperties.put(p.getName(), p.getString());
+ }
+
+ if (!listenerProperties.isEmpty()) {
if (!(listenerInstance instanceof Declarable)) {
throw new IllegalArgumentException(
"Listener properties were provided, but the listener specified does not implement Declarable.");
@@ -108,23 +121,19 @@ public class CreateAsyncEventQueueFunction implements InternalFunction {
((Declarable) listenerInstance).initialize(cache, listenerProperties);
((Declarable) listenerInstance).init(listenerProperties); // for backwards compatibility
- Map<Declarable, Properties> declarablesMap = new HashMap<Declarable, Properties>();
+ Map<Declarable, Properties> declarablesMap = new HashMap<>();
declarablesMap.put((Declarable) listenerInstance, listenerProperties);
cache.addDeclarableProperties(declarablesMap);
}
- asyncEventQueueFactory.create(aeqArgs.getAsyncEventQueueId(),
- (AsyncEventListener) listenerInstance);
-
- XmlEntity xmlEntity =
- new XmlEntity(CacheXml.ASYNC_EVENT_QUEUE, "id", aeqArgs.getAsyncEventQueueId());
- context.getResultSender().lastResult(new CliFunctionResult(memberId, xmlEntity, "Success"));
+ asyncEventQueueFactory.create(config.getId(), (AsyncEventListener) listenerInstance);
+ return new CliFunctionResult(memberId, StatusState.OK, "Success");
} catch (CacheClosedException cce) {
- context.getResultSender().lastResult(new CliFunctionResult(memberId, false, null));
+ return new CliFunctionResult(memberId, StatusState.ERROR, null);
} catch (Exception e) {
logger.error("Could not create async event queue: {}", e.getMessage(), e);
- context.getResultSender().lastResult(new CliFunctionResult(memberId, e, null));
+ return new CliFunctionResult(memberId, e, null);
}
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java
index e4e2f5e..9b3208b 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java
@@ -36,6 +36,11 @@ import org.apache.geode.security.NotAuthorizedException;
* For AuthorizationExceptions, it logs it and then rethrow it.
*/
public class CommandExecutor {
+ public static final String RUN_ON_MEMBER_CHANGE_NOT_PERSISTED =
+ "Configuration change is not persisted because the command is executed on specific member.";
+ public static final String SERVICE_NOT_RUNNING_CHANGE_NOT_PERSISTED =
+ "Cluster configuration service is not running. Configuration change is not persisted.";
+
private Logger logger = LogService.getLogger();
// used by the product
@@ -116,14 +121,12 @@ public class CommandExecutor {
InfoResultModel infoResultModel = resultModel.addInfo(ResultModel.INFO_SECTION);
ConfigurationPersistenceService ccService = gfshCommand.getConfigurationPersistenceService();
if (ccService == null) {
- infoResultModel.addLine(
- "Cluster configuration service is not running. Configuration change is not persisted.");
+ infoResultModel.addLine(SERVICE_NOT_RUNNING_CHANGE_NOT_PERSISTED);
return resultModel;
}
if (parseResult.getParamValue("member") != null) {
- infoResultModel.addLine(
- "Configuration change is not persisted because the command is executed on specific member.");
+ infoResultModel.addLine(RUN_ON_MEMBER_CHANGE_NOT_PERSISTED);
return resultModel;
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/ModelCommandResult.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/ModelCommandResult.java
index 0824910..36387ac 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/ModelCommandResult.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/ModelCommandResult.java
@@ -23,6 +23,8 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import org.apache.commons.lang.NotImplementedException;
+
import org.apache.geode.management.internal.cli.GfshParser;
import org.apache.geode.management.internal.cli.json.GfJsonObject;
import org.apache.geode.management.internal.cli.result.model.AbstractResultModel;
@@ -33,6 +35,14 @@ import org.apache.geode.management.internal.cli.result.model.ResultModel;
import org.apache.geode.management.internal.cli.result.model.TabularResultModel;
public class ModelCommandResult implements CommandResult {
+ private static final String DO_NOT_USE_PERSISTED_FLAG =
+ "The persisted flag is an artifact of the legacy model and should not be used ModelCommandResult.";
+ private static final String FILE_LOGIC_NOT_YET_IMPLEMENTED =
+ "File transfer logic has not yet been implemented in ModelCommandResult";
+ private static final String CANNOT_PASS_GF_JSON_OBJECT_TO_MODEL_COMMAND_RESULT =
+ "Cannot pass GfJsonObject to ModelCommandResult";
+ private static final String CANNOT_USE_GF_JSON_OBJECT_FROM_MODEL_COMMAND_RESULT =
+ "Cannot use GfJsonObject from ModelCommandResult";
private ResultModel result;
private List<String> commandOutput;
@@ -121,12 +131,12 @@ public class ModelCommandResult implements CommandResult {
@Override
public String getHeader(GfJsonObject gfJsonObject) {
- throw new IllegalArgumentException("Cannot pass GfJsonObject to ModelCommandResult");
+ throw new IllegalArgumentException(CANNOT_PASS_GF_JSON_OBJECT_TO_MODEL_COMMAND_RESULT);
}
@Override
public GfJsonObject getContent() {
- throw new IllegalArgumentException("Cannot use GfJsonObject from ModelCommandResult");
+ throw new IllegalArgumentException(CANNOT_USE_GF_JSON_OBJECT_FROM_MODEL_COMMAND_RESULT);
}
@Override
@@ -187,17 +197,17 @@ public class ModelCommandResult implements CommandResult {
@Override
public boolean failedToPersist() {
- return false;
+ throw new IllegalArgumentException(DO_NOT_USE_PERSISTED_FLAG);
}
@Override
public void setCommandPersisted(boolean commandPersisted) {
-
+ throw new IllegalArgumentException(DO_NOT_USE_PERSISTED_FLAG);
}
@Override
public void setFileToDownload(Path fileToDownload) {
-
+ throw new NotImplementedException(FILE_LOGIC_NOT_YET_IMPLEMENTED);
}
// Convenience implementation using the first table found
diff --git a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
index 1f09c4c..afd758e 100644
--- a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
+++ b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
@@ -120,14 +120,21 @@ org/apache/geode/cache/client/SubscriptionNotEnabledException,true,-821244673777
org/apache/geode/cache/client/internal/ContainsKeyOp$MODE,false
org/apache/geode/cache/client/internal/TXSynchronizationOp$CompletionType,false
org/apache/geode/cache/client/internal/pooling/ConnectionDestroyedException,true,-6918516787578041316
+org/apache/geode/cache/configuration/CacheConfig$AsyncEventQueue,false,asyncEventListener:org/apache/geode/cache/configuration/DeclarableType,batchSize:java/lang/String,batchTimeInterval:java/lang/String,diskStoreName:java/lang/String,diskSynchronous:java/lang/Boolean,dispatcherThreads:java/lang/String,enableBatchConflation:java/lang/Boolean,forwardExpirationDestroy:java/lang/Boolean,gatewayEventFilter:java/util/List,gatewayEventSubstitutionFilter:org/apache/geode/cache/configuration/Dec [...]
+org/apache/geode/cache/configuration/ClassNameType,false,className:java/lang/String
+org/apache/geode/cache/configuration/DeclarableType,false,parameter:java/util/List
org/apache/geode/cache/configuration/EnumActionDestroyOverflow,false,value:java/lang/String
org/apache/geode/cache/configuration/EnumReadableWritable,false,value:java/lang/String
org/apache/geode/cache/configuration/JndiBindingsType$JndiBinding,false,blockingTimeoutSeconds:java/lang/String,configProperty:java/util/List,connPooledDatasourceClass:java/lang/String,connectionUrl:java/lang/String,idleTimeoutSeconds:java/lang/String,initPoolSize:java/lang/String,jdbcDriverClass:java/lang/String,jndiName:java/lang/String,loginTimeoutSeconds:java/lang/String,managedConnFactoryClass:java/lang/String,maxPoolSize:java/lang/String,password:java/lang/String,transactionType:ja [...]
org/apache/geode/cache/configuration/JndiBindingsType$JndiBinding$ConfigProperty,false,configPropertyName:java/lang/String,configPropertyType:java/lang/String,configPropertyValue:java/lang/String
+org/apache/geode/cache/configuration/ObjectType,false,declarable:org/apache/geode/cache/configuration/DeclarableType,string:java/lang/String
+org/apache/geode/cache/configuration/ParameterType,false,name:java/lang/String
org/apache/geode/cache/configuration/RegionAttributesDataPolicy,false,value:java/lang/String
org/apache/geode/cache/configuration/RegionAttributesIndexUpdateType,false,value:java/lang/String
org/apache/geode/cache/configuration/RegionAttributesMirrorType,false,value:java/lang/String
org/apache/geode/cache/configuration/RegionAttributesScope,false,value:java/lang/String
+org/apache/geode/cache/configuration/RegionAttributesType$EvictionAttributes$LruHeapPercentage,false,action:org/apache/geode/cache/configuration/EnumActionDestroyOverflow
+org/apache/geode/cache/configuration/RegionAttributesType$EvictionAttributes$LruMemorySize,false,maximum:java/lang/String
org/apache/geode/cache/configuration/RegionConfig,false,entry:java/util/List,index:java/util/List,name:java/lang/String,refid:java/lang/String,region:java/util/List,regionAttributes:java/util/List,regionElements:java/util/List
org/apache/geode/cache/configuration/RegionConfig$Index,false,expression:java/lang/String,fromClause:java/lang/String,imports:java/lang/String,keyIndex:java/lang/Boolean,name:java/lang/String,type:java/lang/String
org/apache/geode/cache/execute/EmptyRegionFunctionException,true,1
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ConfigurePDXCommandIntegrationTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ConfigurePDXCommandIntegrationTest.java
index cc8ca74..bd4226d 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ConfigurePDXCommandIntegrationTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ConfigurePDXCommandIntegrationTest.java
@@ -51,7 +51,7 @@ public class ConfigurePDXCommandIntegrationTest {
@Test
public void commandShouldSucceedWhenUsingDefaults() {
- gfsh.executeAndAssertThat(BASE_COMMAND_STRING).statusIsSuccess().hasNoFailToPersistError();
+ gfsh.executeAndAssertThat(BASE_COMMAND_STRING).statusIsSuccess();
String sharedConfigXml = locator.getLocator().getConfigurationPersistenceService()
.getConfiguration("cluster").getCacheXmlContent();
@@ -63,7 +63,7 @@ public class ConfigurePDXCommandIntegrationTest {
public void commandShouldSucceedWhenConfiguringAutoSerializableClassesWithPersistence() {
gfsh.executeAndAssertThat(BASE_COMMAND_STRING
+ "--read-serialized=true --disk-store=myDiskStore --ignore-unread-fields=true --auto-serializable-classes=com.company.DomainObject.*#identity=id")
- .statusIsSuccess().hasNoFailToPersistError();
+ .statusIsSuccess();
String sharedConfigXml = locator.getLocator().getConfigurationPersistenceService()
.getConfiguration("cluster").getCacheXmlContent();
@@ -81,7 +81,7 @@ public class ConfigurePDXCommandIntegrationTest {
public void commandShouldSucceedWhenConfiguringAutoSerializableClassesWithoutPersistence() {
gfsh.executeAndAssertThat(BASE_COMMAND_STRING
+ "--read-serialized=false --ignore-unread-fields=false --auto-serializable-classes=com.company.DomainObject.*#identity=id")
- .statusIsSuccess().hasNoFailToPersistError();
+ .statusIsSuccess();
String sharedConfigXml = locator.getLocator().getConfigurationPersistenceService()
.getConfiguration("cluster").getCacheXmlContent();
@@ -99,7 +99,7 @@ public class ConfigurePDXCommandIntegrationTest {
public void commandShouldSucceedWhenConfiguringPortableAutoSerializableClassesWithPersistence() {
gfsh.executeAndAssertThat(BASE_COMMAND_STRING
+ "--read-serialized=true --disk-store=myDiskStore --ignore-unread-fields=true --portable-auto-serializable-classes=com.company.DomainObject.*#identity=id")
- .statusIsSuccess().hasNoFailToPersistError();
+ .statusIsSuccess();
String sharedConfigXml = locator.getLocator().getConfigurationPersistenceService()
.getConfiguration("cluster").getCacheXmlContent();
@@ -119,7 +119,7 @@ public class ConfigurePDXCommandIntegrationTest {
public void commandShouldSucceedWhenConfiguringPortableAutoSerializableClassesWithoutPersistence() {
gfsh.executeAndAssertThat(BASE_COMMAND_STRING
+ "--read-serialized=false --ignore-unread-fields=false --portable-auto-serializable-classes=com.company.DomainObject.*#identity=id")
- .statusIsSuccess().hasNoFailToPersistError();
+ .statusIsSuccess();
String sharedConfigXml = locator.getLocator().getConfigurationPersistenceService()
.getConfiguration("cluster").getCacheXmlContent();
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ConfigurePDXCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ConfigurePDXCommandTest.java
index ace35f7..ce9e83d 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ConfigurePDXCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ConfigurePDXCommandTest.java
@@ -131,18 +131,19 @@ public class ConfigurePDXCommandTest {
@Test
public void executionShouldWorkCorrectlyWhenDefaultsAreUsed() {
gfshParserRule.executeAndAssertThat(command, BASE_COMMAND_STRING).statusIsSuccess()
- .hasNoFailToPersistError().containsOutput("persistent = false")
- .containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = false");
+ .containsOutput("persistent = false").containsOutput("read-serialized = false")
+ .containsOutput("ignore-unread-fields = false");
}
@Test
public void executionShouldCorrectlyConfigurePersistenceWhenDefaultDiskStoreIsUsed() {
// Default Disk Store
gfshParserRule.executeAndAssertThat(command, BASE_COMMAND_STRING + "--disk-store")
- .statusIsSuccess().hasNoFailToPersistError().containsOutput("persistent = true")
+ .statusIsSuccess().containsOutput("persistent = true")
.containsOutput("disk-store = DEFAULT").containsOutput("read-serialized = false")
.containsOutput("ignore-unread-fields = false");
+ verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any());
verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any());
}
@@ -150,10 +151,11 @@ public class ConfigurePDXCommandTest {
public void executionShouldCorrectlyConfigurePersistenceWhenCustomDiskStoreIsUsed() {
// Custom Disk Store
gfshParserRule.executeAndAssertThat(command, BASE_COMMAND_STRING + "--disk-store=myDiskStore")
- .statusIsSuccess().hasNoFailToPersistError().containsOutput("persistent = true")
+ .statusIsSuccess().containsOutput("persistent = true")
.containsOutput("disk-store = myDiskStore").containsOutput("read-serialized = false")
.containsOutput("ignore-unread-fields = false");
+ verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any());
verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any());
}
@@ -161,9 +163,10 @@ public class ConfigurePDXCommandTest {
public void executionShouldCorrectlyConfigureReadSerializedWhenFlagIsSetAsTrue() {
// Custom Configuration as True
gfshParserRule.executeAndAssertThat(command, BASE_COMMAND_STRING + "--read-serialized=true")
- .statusIsSuccess().hasNoFailToPersistError().containsOutput("persistent = false")
+ .statusIsSuccess().containsOutput("persistent = false")
.containsOutput("read-serialized = true").containsOutput("ignore-unread-fields = false");
+ verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any());
verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any());
}
@@ -171,9 +174,10 @@ public class ConfigurePDXCommandTest {
public void executionShouldCorrectlyConfigureReadSerializedWhenFlagIsSetAsFalse() {
// Custom Configuration as False
gfshParserRule.executeAndAssertThat(command, BASE_COMMAND_STRING + "--read-serialized=false")
- .statusIsSuccess().hasNoFailToPersistError().containsOutput("persistent = false")
+ .statusIsSuccess().containsOutput("persistent = false")
.containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = false");
+ verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any());
verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any());
}
@@ -182,9 +186,10 @@ public class ConfigurePDXCommandTest {
// Custom Configuration as True
gfshParserRule
.executeAndAssertThat(command, BASE_COMMAND_STRING + "--ignore-unread-fields=true")
- .statusIsSuccess().hasNoFailToPersistError().containsOutput("persistent = false")
+ .statusIsSuccess().containsOutput("persistent = false")
.containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = true");
+ verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any());
verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any());
}
@@ -193,9 +198,9 @@ public class ConfigurePDXCommandTest {
// Custom Configuration as False
gfshParserRule
.executeAndAssertThat(command, BASE_COMMAND_STRING + "--ignore-unread-fields=false")
- .statusIsSuccess().hasNoFailToPersistError().containsOutput("persistent = false")
+ .statusIsSuccess().containsOutput("persistent = false")
.containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = false");
-
+ verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any());
verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any());
}
@@ -207,11 +212,12 @@ public class ConfigurePDXCommandTest {
gfshParserRule
.executeAndAssertThat(command,
BASE_COMMAND_STRING + "--portable-auto-serializable-classes=" + patterns[0])
- .statusIsSuccess().hasNoFailToPersistError().containsOutput("persistent = false")
+ .statusIsSuccess().containsOutput("persistent = false")
.containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = false")
.containsOutput("Portable Classes = [com.company.DomainObject.*#identity=id]")
.containsOutput("PDX Serializer = org.apache.geode.pdx.ReflectionBasedAutoSerializer");
+ verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any());
verify(command, times(1)).createReflectionBasedAutoSerializer(true, patterns);
}
@@ -223,11 +229,12 @@ public class ConfigurePDXCommandTest {
gfshParserRule
.executeAndAssertThat(command,
BASE_COMMAND_STRING + "--auto-serializable-classes=" + patterns[0])
- .statusIsSuccess().hasNoFailToPersistError().containsOutput("persistent = false")
+ .statusIsSuccess().containsOutput("persistent = false")
.containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = false")
.containsOutput("Non Portable Classes = [com.company.DomainObject.*#identity=id]")
.containsOutput("PDX Serializer = org.apache.geode.pdx.ReflectionBasedAutoSerializer");
+ verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any());
verify(command, times(1)).createReflectionBasedAutoSerializer(false, patterns);
}
}
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 683012c..dd642df 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
@@ -23,6 +23,7 @@ import org.junit.experimental.categories.Category;
import org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
import org.apache.geode.internal.cache.wan.MyAsyncEventListener;
+import org.apache.geode.management.internal.cli.remote.CommandExecutor;
import org.apache.geode.management.internal.configuration.domain.Configuration;
import org.apache.geode.test.dunit.IgnoredException;
import org.apache.geode.test.dunit.rules.ClusterStartupRule;
@@ -30,6 +31,7 @@ import org.apache.geode.test.dunit.rules.MemberVM;
import org.apache.geode.test.junit.categories.AEQTest;
import org.apache.geode.test.junit.categories.DistributedTest;
import org.apache.geode.test.junit.rules.GfshCommandRule;
+import org.apache.geode.test.junit.rules.MemberStarterRule;
@Category({DistributedTest.class, AEQTest.class})
@@ -50,21 +52,22 @@ public class CreateAsyncEventQueueCommandDUnitTest {
@Test
public void createQueueWithInvalidClass() throws Exception {
- server = lsRule.startServerVM(0, x -> x.withJMXManager());
+ server = lsRule.startServerVM(0, MemberStarterRule::withJMXManager);
gfsh.connectAndVerify(server.getJmxPort(), GfshCommandRule.PortType.jmxManager);
- IgnoredException.addIgnoredException("java.lang.ClassNotFoundException: xyz");
- gfsh.executeAndAssertThat(COMMAND + " --id=queue --listener=xyz").statusIsError()
- .tableHasRowCount("Member", 1).tableHasRowWithValues("Member", "Status", "server-0",
- "ERROR: java.lang.ClassNotFoundException: xyz");
+ IgnoredException
+ .addIgnoredException("java.lang.ClassNotFoundException: class.that.does.not.Exist");
+ gfsh.executeAndAssertThat(COMMAND + " --id=queue --listener=class.that.does.not.Exist")
+ .statusIsError().tableHasRowWithValues("Member", "Status", "Message", "server-0", "ERROR",
+ " java.lang.ClassNotFoundException: class.that.does.not.Exist");
}
@Test
public void createQueueWithoutCC() throws Exception {
- server = lsRule.startServerVM(0, x -> x.withJMXManager());
+ server = lsRule.startServerVM(0, MemberStarterRule::withJMXManager);
gfsh.connectAndVerify(server.getJmxPort(), GfshCommandRule.PortType.jmxManager);
gfsh.executeAndAssertThat(VALID_COMMAND + " --id=queue").statusIsSuccess()
- .containsOutput("This change is not persisted in the cluster configuration")
- .tableHasColumnWithExactValuesInAnyOrder("Status", "Success").tableHasRowCount("Member", 1);
+ .containsOutput(CommandExecutor.SERVICE_NOT_RUNNING_CHANGE_NOT_PERSISTED)
+ .tableHasColumnWithExactValuesInAnyOrder("Status", "OK").tableHasRowCount("Member", 1);
}
@Test
@@ -76,16 +79,19 @@ public class CreateAsyncEventQueueCommandDUnitTest {
// verify a simple create aeq command
gfsh.executeAndAssertThat(VALID_COMMAND + " --id=queue").statusIsSuccess()
.tableHasRowCount("Member", 2)
- .tableHasColumnWithExactValuesInAnyOrder("Status", "Success", "Success");
+ .tableHasRowWithValues("Member", "Status", "Message", "server-1", "OK", "Success")
+ .tableHasRowWithValues("Member", "Status", "Message", "server-2", "OK", "Success");
IgnoredException
.addIgnoredException("java.lang.IllegalStateException: A GatewaySender with id "
+ "AsyncEventQueue_queue is already defined in this cache.");
// create a queue with the same id would result in failure
gfsh.executeAndAssertThat(VALID_COMMAND + " --id=queue").statusIsError()
- .tableHasRowCount("Member", 2).tableHasColumnWithExactValuesInAnyOrder("Status",
- "ERROR: java.lang.IllegalStateException: A GatewaySender with id AsyncEventQueue_queue is already defined in this cache.",
- "ERROR: java.lang.IllegalStateException: A GatewaySender with id AsyncEventQueue_queue is already defined in this cache.");
+ .tableHasRowCount("Member", 2)
+ .tableHasColumnWithExactValuesInAnyOrder("Status", "ERROR", "ERROR")
+ .tableHasColumnWithExactValuesInAnyOrder("Message",
+ " java.lang.IllegalStateException: A GatewaySender with id AsyncEventQueue_queue is already defined in this cache.",
+ " java.lang.IllegalStateException: A GatewaySender with id AsyncEventQueue_queue is already defined in this cache.");
gfsh.executeAndAssertThat("create disk-store --name=diskStore2 --dir=diskstore");
locator.waitTillDiskstoreIsReady("diskStore2", 2);
@@ -117,7 +123,8 @@ public class CreateAsyncEventQueueCommandDUnitTest {
});
gfsh.executeAndAssertThat(VALID_COMMAND + " --id=queue").statusIsSuccess()
- .tableHasRowCount("Member", 1).tableHasColumnWithExactValuesInAnyOrder("Status", "Success");
+ .tableHasRowCount("Member", 1)
+ .tableHasRowWithValues("Member", "Status", "Message", "server-1", "OK", "Success");
locator.invoke(() -> {
InternalConfigurationPersistenceService service =
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 40c5e76..07d08ff 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
@@ -30,6 +30,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.isA;
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.times;
import static org.mockito.Mockito.verify;
@@ -48,7 +49,8 @@ import org.apache.geode.cache.execute.Function;
import org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
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.management.internal.cli.functions.CliFunctionResult.StatusState;
+import org.apache.geode.management.internal.cli.remote.CommandExecutor;
import org.apache.geode.test.junit.categories.UnitTest;
import org.apache.geode.test.junit.rules.GfshParserRule;
@@ -58,6 +60,7 @@ public class CreateAsyncEventQueueCommandTest {
public static final String COMMAND = "create async-event-queue ";
public static final String MINIUM_COMMAND = COMMAND + "--id=id --listener=xyz";
+
@ClassRule
public static GfshParserRule gfsh = new GfshParserRule();
@@ -72,19 +75,19 @@ public class CreateAsyncEventQueueCommandTest {
}
@Test
- public void mandatoryId() throws Exception {
+ public void mandatoryId() {
gfsh.executeAndAssertThat(command, COMMAND + "--listener=xyz").statusIsError()
.containsOutput("Invalid command");
}
@Test
- public void mandatoryListener() throws Exception {
+ public void mandatoryListener() {
gfsh.executeAndAssertThat(command, COMMAND + "--id=id").statusIsError()
.containsOutput("Invalid command");
}
@Test
- public void cannotCreateAEQOnOneMember() throws Exception {
+ public void cannotCreateAEQOnOneMember() {
// AEQ can not be created on one member since it needs to update CC.
// This test is to make sure we don't add this option
gfsh.executeAndAssertThat(command, COMMAND + "--id=id --listener=xyz --member=xyz")
@@ -92,7 +95,7 @@ public class CreateAsyncEventQueueCommandTest {
}
@Test
- public void defaultValues() throws Exception {
+ public void defaultValues() {
GfshParseResult result = gfsh.parse(MINIUM_COMMAND);
assertThat(result.getParamValue(CREATE_ASYNC_EVENT_QUEUE__BATCHTIMEINTERVAL)).isEqualTo(5);
assertThat(result.getParamValue(CREATE_ASYNC_EVENT_QUEUE__BATCH_SIZE)).isEqualTo(100);
@@ -113,39 +116,36 @@ public class CreateAsyncEventQueueCommandTest {
}
@Test
- public void noMemberFound() throws Exception {
+ public void noMemberFound() {
doReturn(Collections.emptySet()).when(command).findMembers(any(), any());
gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsError()
.containsOutput("No Members Found");
}
@Test
- public void buildResult_all_success() throws Exception {
+ public void buildResult_all_success() {
List<CliFunctionResult> functionResults = new ArrayList<>();
- XmlEntity xmlEntity = mock(XmlEntity.class);
- functionResults.add(new CliFunctionResult("member1", xmlEntity, "SUCCESS"));
- functionResults.add(new CliFunctionResult("member2", xmlEntity, "SUCCESS"));
+ functionResults.add(new CliFunctionResult("member1", StatusState.OK, "SUCCESS"));
+ functionResults.add(new CliFunctionResult("member2", StatusState.OK, "SUCCESS"));
// this is only to make the code pass that member check
doReturn(Collections.emptySet()).when(command).getMembers(any(), any());
doReturn(functionResults).when(command).executeAndGetFunctionResult(isA(Function.class),
isA(Object.class), isA(Set.class));
- gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess().hasNoFailToPersistError()
- .tableHasRowCount("Member", 2)
- .tableHasRowWithValues("Member", "Status", "member1", "SUCCESS")
- .tableHasRowWithValues("Member", "Status", "member2", "SUCCESS");
+ gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess()
+ .tableHasRowWithValues("Member", "Status", "Message", "member1", "OK", "SUCCESS")
+ .tableHasRowWithValues("Member", "Status", "Message", "member1", "OK", "SUCCESS");
// addXmlEntity should only be called once
- verify(service).addXmlEntity(xmlEntity, null);
+ verify(service, times(1)).updateCacheConfig(any(), any());
}
@Test
- public void buildResult_all_failure() throws Exception {
+ public void buildResult_all_failure() {
List<CliFunctionResult> functionResults = new ArrayList<>();
- XmlEntity xmlEntity = mock(XmlEntity.class);
- functionResults.add(new CliFunctionResult("member1", false, "failed"));
+ functionResults.add(new CliFunctionResult("member1", StatusState.ERROR, "failed"));
functionResults
.add(new CliFunctionResult("member2", new RuntimeException("exception happened"), null));
@@ -154,21 +154,18 @@ public class CreateAsyncEventQueueCommandTest {
doReturn(functionResults).when(command).executeAndGetFunctionResult(isA(Function.class),
isA(Object.class), isA(Set.class));
- gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsError().hasNoFailToPersistError()
- .tableHasRowCount("Member", 2)
- .tableHasRowWithValues("Member", "Status", "member1", "ERROR: failed")
- .tableHasRowWithValues("Member", "Status", "member2",
- "ERROR: java.lang.RuntimeException: exception happened");
+ gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsError().tableHasRowCount("Member", 2)
+ .tableHasRowWithValues("Member", "Status", "Message", "member1", "ERROR", "failed")
+ .tableHasRowWithValues("Member", "Status", "Message", "member2", "ERROR",
+ " java.lang.RuntimeException: exception happened");
- // addXmlEntity should not be called
- verify(service, times(0)).addXmlEntity(xmlEntity, null);
+ verify(service, never()).updateCacheConfig(any(), any());
}
@Test
- public void buildResult_one_failure_one_success() throws Exception {
+ public void buildResult_one_failure_one_success() {
List<CliFunctionResult> functionResults = new ArrayList<>();
- XmlEntity xmlEntity = mock(XmlEntity.class);
- functionResults.add(new CliFunctionResult("member1", xmlEntity, "SUCCESS"));
+ functionResults.add(new CliFunctionResult("member1", StatusState.OK, "SUCCESS"));
functionResults
.add(new CliFunctionResult("member2", new RuntimeException("exception happened"), null));
@@ -177,29 +174,28 @@ public class CreateAsyncEventQueueCommandTest {
doReturn(functionResults).when(command).executeAndGetFunctionResult(isA(Function.class),
isA(Object.class), isA(Set.class));
- gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess().hasNoFailToPersistError()
+ gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess()
.tableHasRowCount("Member", 2)
- .tableHasRowWithValues("Member", "Status", "member1", "SUCCESS").tableHasRowWithValues(
- "Member", "Status", "member2", "ERROR: java.lang.RuntimeException: exception happened");
+ .tableHasRowWithValues("Member", "Status", "Message", "member1", "OK", "SUCCESS")
+ .tableHasRowWithValues("Member", "Status", "Message", "member2", "ERROR",
+ " java.lang.RuntimeException: exception happened");
- // addXmlEntity should be called once
- verify(service).addXmlEntity(xmlEntity, null);
+ verify(service, times(1)).updateCacheConfig(any(), any());
}
@Test
- public void command_succeeded_but_no_cluster_config_service() throws Exception {
+ public void command_succeeded_but_no_cluster_config_service() {
doReturn(null).when(command).getConfigurationPersistenceService();
doReturn(Collections.emptySet()).when(command).getMembers(any(), any());
List<CliFunctionResult> functionResults = new ArrayList<>();
- XmlEntity xmlEntity = mock(XmlEntity.class);
- functionResults.add(new CliFunctionResult("member1", xmlEntity, "SUCCESS"));
+ functionResults.add(new CliFunctionResult("member1", StatusState.OK, "SUCCESS"));
doReturn(functionResults).when(command).executeAndGetFunctionResult(isA(Function.class),
isA(Object.class), isA(Set.class));
- gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess().hasFailToPersistError();
+ gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess()
+ .containsOutput(CommandExecutor.SERVICE_NOT_RUNNING_CHANGE_NOT_PERSISTED);
- // addXmlEntity should not be called
- verify(service, times(0)).addXmlEntity(xmlEntity, null);
+ verify(service, never()).updateCacheConfig(any(), any());
}
}
--
To stop receiving notification emails like this one, please contact
prhomberg@apache.org.