diff options
44 files changed, 2561 insertions, 126 deletions
diff --git a/common-parameters/pom.xml b/common-parameters/pom.xml index 828a0845..87b2d3a5 100644 --- a/common-parameters/pom.xml +++ b/common-parameters/pom.xml @@ -36,5 +36,16 @@ <artifactId>junit</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.yaml</groupId> + <artifactId>snakeyaml</artifactId> + <version>1.21</version> + <scope>test</scope> + </dependency> </dependencies> </project> diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupMapValidationResult.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupMapValidationResult.java new file mode 100644 index 00000000..09cdc1de --- /dev/null +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupMapValidationResult.java @@ -0,0 +1,163 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import java.lang.reflect.Field; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + +/** + * This class holds the result of the validation of a map of parameter groups. + */ +public class GroupMapValidationResult implements ValidationResult { + // The name of the parameter group map + final String mapParameterName; + + // Validation status for the entire parameter class + private ValidationStatus status = ValidationStatus.CLEAN; + private String message = ParameterConstants.PARAMETER_GROUP_MAP_HAS_STATUS_MESSAGE + status.toString(); + + // Validation results for each parameter in the group + private final Map<String, ValidationResult> validationResultMap = new LinkedHashMap<>(); + + /** + * Constructor, create the group map validation result. + * + * @param field the map parameter field + * @param mapObject the value of the map parameter field + */ + protected GroupMapValidationResult(final Field field, final Object mapObject) { + this.mapParameterName = field.getName(); + + // Cast the map object to a map of parameter groups keyed by string, we can't type check maps + // due to restrictions on generics so we have to check each entry key is a string and each entry + // value is a parameter group + @SuppressWarnings("unchecked") + Map<String, ParameterGroup> parameterGroupMap = (Map<String, ParameterGroup>) mapObject; + + // Add a validation result per map entry + for (Entry<String, ParameterGroup> parameterGroupMapEntry : parameterGroupMap.entrySet()) { + // Create a validation status entry for the map + validationResultMap.put(parameterGroupMapEntry.getKey(), + new GroupValidationResult(parameterGroupMapEntry.getValue())); + } + } + + /** + * Gets the name of the parameter being validated. + * + * @return the name + */ + @Override + public String getName() { + return mapParameterName; + } + + /** + * Gets the status of validation. + * + * @return the status + */ + @Override + public ValidationStatus getStatus() { + return status; + } + + /** + * Set the validation result on on a parameter group. + * + * @param status The validation status the field is receiving + * @param message The validation message explaining the validation status + */ + @Override + public void setResult(ValidationStatus status, String message) { + setResult(status); + this.message = message; + } + + /** + * Set the validation result on on a parameter group. + * + * @param status The validation status the field is receiving + */ + public void setResult(final ValidationStatus status) { + // We record the most serious validation status, assuming the status enum ordinals + // increase in order of severity + if (this.status.ordinal() < status.ordinal()) { + this.status = status; + this.message = ParameterConstants.PARAMETER_GROUP_HAS_STATUS_MESSAGE + status.toString(); + } + } + + /** + * Set the validation result on a parameter map entry. + * + * @param entryName The name of the parameter map entry + * @param mapEntryValidationResult The validation result for the entry + */ + public void setResult(String entryName, ValidationResult mapEntryValidationResult) { + ValidationResult validationResult = validationResultMap.get(entryName); + if (validationResult == null) { + throw new ParameterRuntimeException("no entry with name \"" + entryName + "\" exists"); + } + + // Set the status of the parameter group and replace the field result + validationResultMap.put(entryName, mapEntryValidationResult); + this.setResult(status); + } + + /** + * Gets the validation result. + * + * @param initialIndentation the indentation to use on the main result output + * @param subIndentation the indentation to use on sub parts of the result output + * @param showClean output information on clean fields + * @return the result + */ + @Override + public String getResult(final String initialIndentation, final String subIndentation, final boolean showClean) { + if (status == ValidationStatus.CLEAN && !showClean) { + return null; + } + + StringBuilder validationResultBuilder = new StringBuilder(); + + validationResultBuilder.append(initialIndentation); + validationResultBuilder.append("parameter group map \""); + validationResultBuilder.append(mapParameterName); + validationResultBuilder.append("\" "); + validationResultBuilder.append(status); + validationResultBuilder.append(", "); + validationResultBuilder.append(message); + validationResultBuilder.append('\n'); + + for (ValidationResult fieldResult : validationResultMap.values()) { + String fieldResultMessage = fieldResult.getResult(initialIndentation + subIndentation, subIndentation, + showClean); + if (fieldResultMessage != null) { + validationResultBuilder.append(fieldResultMessage); + } + } + + return validationResultBuilder.toString(); + } +}
\ No newline at end of file diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupValidationResult.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupValidationResult.java new file mode 100644 index 00000000..91c3d145 --- /dev/null +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupValidationResult.java @@ -0,0 +1,324 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import java.lang.reflect.Field; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + +/** + * This class holds the result of the validation of a parameter group. + */ +public class GroupValidationResult implements ValidationResult { + // The parameter group which the validation result applies + private final ParameterGroup parameterGroup; + + // Validation status for the entire parameter class + private ValidationStatus status = ValidationStatus.CLEAN; + private String message = ParameterConstants.PARAMETER_GROUP_HAS_STATUS_MESSAGE + status.toString(); + + // Validation results for each parameter in the group + private final Map<String, ValidationResult> validationResultMap = new LinkedHashMap<>(); + + /** + * Constructor, create the field validation result with default arguments. + * + * @param parameterGroup the parameter group being validated + */ + public GroupValidationResult(final ParameterGroup parameterGroup) { + this.parameterGroup = parameterGroup; + + // Add a validation result per field + for (Field field : parameterGroup.getClass().getDeclaredFields()) { + // Exclude system fields + if (field.getName().startsWith("$") || field.getName().startsWith("_")) { + continue; + } + + // Make the field accessible + boolean savedAccessibilityValue = field.isAccessible(); + field.setAccessible(true); + + try { + // Set the validation result + validationResultMap.put(field.getName(), getValidationResult(field, parameterGroup)); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new ParameterRuntimeException("could not get value of parameter \"" + field.getName() + "\"", e); + } finally { + field.setAccessible(savedAccessibilityValue); + } + } + } + + /** + * Construct a validation result for a field + * + * @param field The parameter field + * @param ParameterGroup The parameter group containing the field + * @return the validation result + * @throws IllegalAccessException on accessing private fields + */ + private ValidationResult getValidationResult(final Field field, final ParameterGroup parameterGroup) + throws IllegalAccessException { + final String fieldName = field.getName(); + final Class<?> fieldType = field.getType(); + final Object fieldObject = field.get(parameterGroup); + + // Nested parameter groups are allowed + if (ParameterGroup.class.isAssignableFrom(fieldType)) { + return new GroupValidationResult((ParameterGroup) field.get(parameterGroup)); + } + + // Nested maps of parameter groups are allowed + if (Map.class.isAssignableFrom(field.getType())) { + checkMapIsParameterGroupMap(fieldName, fieldObject); + return new GroupMapValidationResult(field, fieldObject); + } + + // Collections of parameter groups are not allowed + if (Collection.class.isAssignableFrom(field.getType())) { + checkCollection4ParameterGroups(fieldName, fieldObject); + return new ParameterValidationResult(field, fieldObject); + } + + // It's a regular parameter + return new ParameterValidationResult(field, fieldObject); + } + + /** + * Check if this field is a map of parameter groups indexed by string keys. + * + * @param fieldName the name of the collection field. + * @param mapObject the map object to check + */ + private void checkMapIsParameterGroupMap(String fieldName, Object mapObject) { + if (mapObject == null) { + throw new ParameterRuntimeException("map parameter \"" + fieldName + "\" is null"); + } + + Map<?, ?> incomingMap = (Map<?, ?>) mapObject; + + for (Entry<?, ?> mapEntry : incomingMap.entrySet()) { + // Check the key is a string + if (!String.class.isAssignableFrom(mapEntry.getKey().getClass())) { + throw new ParameterRuntimeException("map entry is not a parameter group keyed by a string, key \"" + + mapEntry.getKey() + "\" in map \"" + fieldName + "\" is not a string"); + } + + // Check the value is a parameter group + if (!ParameterGroup.class.isAssignableFrom(mapEntry.getValue().getClass())) { + throw new ParameterRuntimeException("map entry is not a parameter group keyed by a string, value \"" + + mapEntry.getValue() + "\" in map \"" + fieldName + "\" is not a parameter group"); + } + } + } + + /** + * Check if this field contains parameter groups. + * + * @param fieldName the name of the collection field. + * @param collectionObject the collection object to check + */ + private void checkCollection4ParameterGroups(final String fieldName, final Object collectionObject) { + if (collectionObject == null) { + throw new ParameterRuntimeException("collection parameter \"" + fieldName + "\" is null"); + } + + Collection<?> collection2Check = (Collection<?>) collectionObject; + + for (Object collectionMember : collection2Check) { + if (ParameterGroup.class.isAssignableFrom(collectionMember.getClass())) { + throw new ParameterRuntimeException("collection parameter \"" + fieldName + "\" is illegal," + + " parameter groups are not allowed as collection members"); + } + } + } + + /** + * Gets the parameter group for this validation result. + * + * @return the parameter class + */ + public ParameterGroup getParameterGroup() { + return parameterGroup; + } + + /** + * Gets the name of the parameter group being validated. + * + * @return the name + */ + @Override + public String getName() { + return parameterGroup.getName(); + } + + /** + * Gets the status of validation. + * + * @return the status + */ + @Override + public ValidationStatus getStatus() { + return status; + } + + /** + * Set the validation result on on a parameter group. + * + * @param status The validation status the parameter group is receiving + * @param message The validation message explaining the validation status + */ + @Override + public void setResult(ValidationStatus status, String message) { + setResult(status); + this.message = message; + } + + /** + * Set the validation result on on a parameter group. + * + * On a sequence of calls, the most serious validation status is recorded, assuming the status enum ordinal increase + * in order of severity + * + * @param status The validation status the parameter group is receiving + */ + public void setResult(final ValidationStatus status) { + // + if (this.status.ordinal() < status.ordinal()) { + this.status = status; + this.message = ParameterConstants.PARAMETER_GROUP_HAS_STATUS_MESSAGE + status.toString(); + } + } + + /** + * Set the validation result on a parameter group. + * + * @param parameterGroupName The name of the parameter group + * @param status The validation status the field is receiving + * @param message The validation message explaining the validation status + */ + public void setResult(final String parameterGroupName, final ValidationStatus status, final String message) { + ParameterValidationResult parameterValidationResult; + try { + parameterValidationResult = (ParameterValidationResult) validationResultMap.get(parameterGroupName); + } catch (ClassCastException e) { + throw new ParameterRuntimeException("parameter not a regular parameter: " + parameterGroupName, e); + } + + if (parameterValidationResult == null) { + throw new ParameterRuntimeException( + "no regular parameter field exists for parameter: " + parameterGroupName); + } + + // Set the status of the parameter group and the field + parameterValidationResult.setResult(status, message); + this.setResult(status); + } + + /** + * Set the validation result on a nested parameter group. + * + * @param parameterName The name of the parameter field + * @param nestedValidationResult The validation result from a nested field + */ + public void setResult(String parameterName, ValidationResult nestedValidationResult) { + GroupValidationResult groupValidationResult; + try { + groupValidationResult = (GroupValidationResult) validationResultMap.get(parameterName); + } catch (ClassCastException e) { + throw new ParameterRuntimeException("parameter is not a nested group parameter: " + parameterName, e); + } + + if (groupValidationResult == null) { + throw new ParameterRuntimeException("no nested parameter field exists for parameter: " + parameterName); + } + + // Set the status of the parameter group and replace the field result + validationResultMap.put(parameterName, nestedValidationResult); + this.setResult(status); + } + + /** + * Set the validation result on a nested parameter group map entry. + * + * @param parameterName The name of the parameter field + * @param key The key of the map entry + * @param nestedMapValidationResult The validation result from a nested map entry + */ + public void setResult(final String parameterName, final String key, + final ValidationResult nestedMapValidationResult) { + GroupMapValidationResult groupMapValidationResult; + try { + groupMapValidationResult = (GroupMapValidationResult) validationResultMap.get(parameterName); + } catch (ClassCastException e) { + throw new ParameterRuntimeException("parameter is not a nested group map parameter: " + parameterName, e); + } + + if (groupMapValidationResult == null) { + throw new ParameterRuntimeException("no group map parameter field exists for parameter: " + parameterName); + } + + // Set the status of the parameter group and the field + groupMapValidationResult.setResult(key, nestedMapValidationResult); + this.setResult(status); + } + + /** + * Gets the validation result. + * + * @param initialIndentation the indentation to use on the main result output + * @param subIndentation the indentation to use on sub parts of the result output + * @param showClean output information on clean fields + * @return the result + */ + @Override + public String getResult(final String initialIndentation, final String subIndentation, final boolean showClean) { + if (status == ValidationStatus.CLEAN && !showClean) { + return null; + } + + StringBuilder validationResultBuilder = new StringBuilder(); + + validationResultBuilder.append(initialIndentation); + validationResultBuilder.append("parameter group \""); + validationResultBuilder.append(parameterGroup.getName()); + validationResultBuilder.append("\" type \""); + validationResultBuilder.append(parameterGroup.getClass().getCanonicalName()); + validationResultBuilder.append("\" "); + validationResultBuilder.append(status); + validationResultBuilder.append(", "); + validationResultBuilder.append(message); + validationResultBuilder.append('\n'); + + for (ValidationResult fieldResult : validationResultMap.values()) { + String fieldResultMessage = fieldResult.getResult(initialIndentation + subIndentation, subIndentation, + showClean); + if (fieldResultMessage != null) { + validationResultBuilder.append(fieldResultMessage); + } + } + + return validationResultBuilder.toString(); + } +}
\ No newline at end of file diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterConstants.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterConstants.java new file mode 100644 index 00000000..240b1f40 --- /dev/null +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterConstants.java @@ -0,0 +1,45 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +/** + * This static class holds the values of constants for parameter handling. + */ +public final class ParameterConstants { + // Indentation is 0 on the left and 2 for each level of hierarchy + public static final String DEFAULT_INITIAL_RESULT_INDENTATION = ""; + public static final String DEFAULT_RESULT_INDENTATION = " "; + + // By default we do not show validation results for parameters that are validated as clean + public static final boolean DO_NOT_SHOW_CLEAN_RESULTS = false; + + // Messages for clean validations + public static final String PARAMETER_GROUP_HAS_STATUS_MESSAGE = "parameter group has status "; + public static final String PARAMETER_GROUP_MAP_HAS_STATUS_MESSAGE = "parameter group map has status "; + public static final String PARAMETER_HAS_STATUS_MESSAGE = "parameter has status "; + + /** + * Private constructor to prevent subclassing. + */ + private ParameterConstants() { + // Private constructor to prevent subclassing + } +}
\ No newline at end of file diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java index 129d5390..3a6e17e8 100644 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java @@ -55,21 +55,21 @@ public class ParameterException extends Exception { * Instantiates a new parameter exception. * * @param message the message on the exception - * @param e the exception that caused this parameter exception + * @param exception the exception that caused this parameter exception */ - public ParameterException(final String message, final Exception e) { - this(message, e, null); + public ParameterException(final String message, final Exception exception) { + this(message, exception, null); } /** * Instantiates a new parameter exception. * * @param message the message on the exception - * @param e the exception that caused this parameter exception + * @param exception the exception that caused this parameter exception * @param object the object that the exception was thrown on */ - public ParameterException(final String message, final Exception e, final Object object) { - super(message, e); + public ParameterException(final String message, final Exception exception, final Object object) { + super(message, exception); this.object = object; } @@ -83,7 +83,7 @@ public class ParameterException extends Exception { } /** - * Build a cascaded message from an exception and all its nested exceptions + * Build a cascaded message from an exception and all its nested exceptions. * * @param throwable the top level exception * @return cascaded message string @@ -101,7 +101,6 @@ public class ParameterException extends Exception { } /** - * * Get the object on which the exception was thrown. * * @return The object on which the exception was thrown diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/AbstractParameters.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterGroup.java index 5430dfeb..48e8379f 100644 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/AbstractParameters.java +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterGroup.java @@ -1,5 +1,4 @@ -package org.onap.policy.common.parameters; -/* +/*- * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. * ================================================================================ @@ -19,29 +18,35 @@ package org.onap.policy.common.parameters; * ============LICENSE_END========================================================= */ +package org.onap.policy.common.parameters; + /** - * This class defines an abstract parameter interface that acts as a base interface for all parameters in the ONAP - * Policy Framework. All parameter POJOs are subclass of the abstract parameter class and can be used with the - * {@link ParameterService}. + * This interface acts as a base interface for all parameter groups in the ONAP Policy Framework. All parameter group + * POJOs are implementations of the parameter group interface and can be used with the {@link ParameterService}. * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public interface AbstractParameters { +public interface ParameterGroup { /** - * Gets the parameter class. - * - * @return the parameter class + * Get the group name. + * + * @return the group name */ - default Class<? extends AbstractParameters> getParameterClass() { - return this.getClass(); - } + public String getName(); + + /** + * Validate parameters. + * + * @return the result of the parameter validation + */ + GroupValidationResult validate(); /** - * Gets the parameter class name. - * - * @return the parameter class name + * Check if the parameters are valid. + * + * @return true if the parameters are valid */ - default String getParameterClassName() { - return this.getClass().getCanonicalName(); + default boolean isValid() { + return validate().getStatus().isValid(); } } diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java index 4b7d5874..071593a9 100644 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java @@ -55,21 +55,21 @@ public class ParameterRuntimeException extends RuntimeException { * Instantiates a new parameter runtime exception. * * @param message the message on the exception - * @param e the exception that caused this parameter exception + * @param exception the exception that caused this parameter exception */ - public ParameterRuntimeException(final String message, final Exception e) { - this(message, e, null); + public ParameterRuntimeException(final String message, final Exception exception) { + this(message, exception, null); } /** * Instantiates a new parameter runtime exception. * * @param message the message on the exception - * @param e the exception that caused this parameter exception + * @param exception the exception that caused this parameter exception * @param object the object that the exception was thrown on */ - public ParameterRuntimeException(final String message, final Exception e, final Object object) { - super(message, e); + public ParameterRuntimeException(final String message, final Exception exception, final Object object) { + super(message, exception); this.object = object; } diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java index f411937d..db6995c5 100644 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java @@ -1,5 +1,4 @@ -package org.onap.policy.common.parameters; -/* +/*- * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. * ================================================================================ @@ -19,25 +18,27 @@ package org.onap.policy.common.parameters; * ============LICENSE_END========================================================= */ +package org.onap.policy.common.parameters; + import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** - * The parameter service makes ONAP PF parameters available to all classes in a JVM. - * - * The reason for having a parameter service is to avoid having to pass parameters down long call chains in modules such - * as PDPs and editors. The parameter service makes correct and verified parameters available statically. - * - * The parameter service must be used with care because changing a parameter set anywhere in a JVM will affect all users - * of those parameters anywhere in the JVM. + * The parameter service makes ONAP PF parameter groups available to all classes in a JVM. + * + * <p>The reason for having a parameter service is to avoid having to pass parameters down long call chains in modules + * such as PDPs and editors. The parameter service makes correct and verified parameters available statically. + * + * <p>The parameter service must be used with care because changing a parameter set anywhere in a JVM will affect all + * users of those parameters anywhere in the JVM. * * @author Liam Fallon (liam.fallon@ericsson.com) */ public abstract class ParameterService { // The map holding the parameters - private static Map<Class<? extends AbstractParameters>, AbstractParameters> parameterMap = new ConcurrentHashMap<>(); + private static Map<String, ParameterGroup> parameterGroupMap = new ConcurrentHashMap<>(); /** * This class is an abstract static class that cannot be extended. @@ -46,69 +47,71 @@ public abstract class ParameterService { } /** - * Register parameters with the parameter service. + * Register a parameter group with the parameter service. * - * @param <P> the generic type - * @param parametersClass the class of the parameter, used to index the parameter - * @param parameters the parameters + * @param parameterGroup the parameter group */ - public static <P extends AbstractParameters> void registerParameters(final P parameters) { - parameterMap.put(parameters.getClass(), parameters); + public static void register(final ParameterGroup parameterGroup) { + if (!parameterGroupMap.containsKey(parameterGroup.getName())) { + parameterGroupMap.put(parameterGroup.getName(), parameterGroup); + } else { + throw new ParameterRuntimeException( + "\"" + parameterGroup.getName() + "\" already registered in parameter service"); + } } /** - * Remove parameters from the parameter service. + * Remove a parameter group from the parameter service. * - * @param <P> the generic type - * @param parametersClass the class of the parameter, used to index the parameter + * @param parameterGroupName the name of the parameter group */ - public static <P extends AbstractParameters> void deregisterParameters(final Class<P> parametersClass) { - parameterMap.remove(parametersClass); + public static void deregister(final String parameterGroupName) { + if (parameterGroupMap.containsKey(parameterGroupName)) { + parameterGroupMap.remove(parameterGroupName); + } else { + throw new ParameterRuntimeException("\"" + parameterGroupName + "\" not registered in parameter service"); + } } /** - * Get parameters from the parameter service. + * Get a parameter group from the parameter service. * - * @param <P> the generic type - * @param parametersClass the class of the parameter, used to index the parameter - * @return The parameter + * @param parameterGroupName the name of the parameter group + * @return The parameter group */ - @SuppressWarnings("unchecked") - public static <P extends AbstractParameters> P getParameters(final Class<P> parametersClass) { - final P parameter = (P) parameterMap.get(parametersClass); + public static ParameterGroup get(final String parameterGroupName) { + final ParameterGroup parameterGroup = parameterGroupMap.get(parameterGroupName); - if (parameter == null) { - throw new ParameterRuntimeException( - "Parameters for " + parametersClass.getCanonicalName() + " not found in parameter service"); + if (parameterGroup == null) { + throw new ParameterRuntimeException("\"" + parameterGroupName + "\" not found in parameter service"); } - return parameter; + return parameterGroup; } /** - * Check if parameters is defined on the parameter service. + * Check if a parameter group is defined on the parameter service. * - * @param <P> the generic type - * @param parametersClass the class of the parameter, used to index the parameter + * @param parameterGroupName the name of the parameter group * @return true if the parameter is defined */ - public static <P extends AbstractParameters> boolean existsParameters(final Class<P> parametersClass) { - return parameterMap.get(parametersClass) != null; + public static boolean contains(final String parameterGroupName) { + return parameterGroupMap.containsKey(parameterGroupName) && parameterGroupMap.get(parameterGroupName) != null; } /** - * Get all the entries in the parameters map. + * Get all parameter groups. * * @return The entries */ - public static Set<Entry<Class<? extends AbstractParameters>, AbstractParameters>> getAll() { - return parameterMap.entrySet(); + public static Set<Entry<String, ParameterGroup>> getAll() { + return parameterGroupMap.entrySet(); } /** - * Clear all parameters in the parameter service. + * Clear all parameter groups in the parameter service. */ public static void clear() { - parameterMap.clear(); + parameterGroupMap.clear(); } } diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidationResult.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidationResult.java new file mode 100644 index 00000000..9c829f4b --- /dev/null +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidationResult.java @@ -0,0 +1,110 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import java.lang.reflect.Field; + +/** + * This class holds the result of the validation of a parameter. + */ +public class ParameterValidationResult implements ValidationResult { + // The field and value of the parameter to which the validation result applies + private final Field field; + private final Object parameterValue; + + // Validation status and message + private ValidationStatus status = ValidationStatus.CLEAN; + private String message = ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + status.toString(); + + /** + * Constructor, create validation result for a parameter with default arguments. + * + * @param field the parameter field + * @param parameterValue the value of the parameter field + */ + protected ParameterValidationResult(final Field field, final Object parameterValue) { + this.field = field; + this.parameterValue = parameterValue; + } + + /** + * Gets the name of the parameter being validated. + * + * @return the name + */ + @Override + public String getName() { + return field.getName(); + } + + /** + * Gets the validation status. + * + * @return the validation status + */ + @Override + public ValidationStatus getStatus() { + return status; + } + + /** + * Set the validation result on on a parameter field. + * @param status The validation status the field is receiving + * @param message The validation message explaining the validation status + */ + @Override + public void setResult(final ValidationStatus status, final String message) { + this.status = status; + this.message = message; + } + + /** + * Gets the validation result. + * + * @param initialIndentation the result indentation + * @param subIndentation the indentation to use on sub parts of the result output + * @param showClean output information on clean fields + * @return the result + */ + @Override + public String getResult(final String initialIndentation, final String subIndentation, final boolean showClean) { + if (status == ValidationStatus.CLEAN && !showClean) { + return null; + } + + StringBuilder validationResultBuilder = new StringBuilder(); + + validationResultBuilder.append(initialIndentation); + validationResultBuilder.append("field \""); + validationResultBuilder.append(getName()); + validationResultBuilder.append("\" type \""); + validationResultBuilder.append(field.getType().getCanonicalName()); + validationResultBuilder.append("\" value \""); + validationResultBuilder.append(parameterValue); + validationResultBuilder.append("\" "); + validationResultBuilder.append(getStatus()); + validationResultBuilder.append(", "); + validationResultBuilder.append(message); + validationResultBuilder.append('\n'); + + return validationResultBuilder.toString(); + } +} diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationResult.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationResult.java new file mode 100644 index 00000000..b97ccda0 --- /dev/null +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationResult.java @@ -0,0 +1,78 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +/** + * This interface defines the result of a parameter validation. + */ +public interface ValidationResult { + /** + * Gets the name of the entity being validated. + * + * @return the name + */ + public String getName(); + + /** + * Gets the status of validation. + * + * @return the status + */ + public ValidationStatus getStatus(); + + /** + * Checks if the result is valid. + * + * @return true, if is valid + */ + default boolean isValid() { + return getStatus().isValid(); + } + + /** + * Gets the validation result. + * + * @return the full validation result + */ + default String getResult() { + return getResult( + ParameterConstants.DEFAULT_INITIAL_RESULT_INDENTATION, + ParameterConstants.DEFAULT_RESULT_INDENTATION, + ParameterConstants.DO_NOT_SHOW_CLEAN_RESULTS); + } + + /** + * Gets the validation result. + * + * @param initialIndentation the indentation to use on the main result output + * @param subIndentation the indentation to use on sub parts of the result output + * @param showClean output information on clean fields + * @return the result + */ + public String getResult(final String initialIndentation, final String subIndentation, final boolean showClean); + + /** + * Set a validation result. + * @param status The validation status the field is receiving + * @param message The validation message explaining the validation status + */ + public void setResult(final ValidationStatus status, final String message); +}
\ No newline at end of file diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationStatus.java index fb1bd478..ff453a1b 100644 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationStatus.java @@ -1,4 +1,4 @@ -/* +/*- * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. * ================================================================================ @@ -20,12 +20,17 @@ package org.onap.policy.common.parameters; -import org.onap.policy.common.parameters.AbstractParameters; - -/** - * @author Liam Fallon (liam.fallon@ericsson.com) - */ -public class LegalParameters implements AbstractParameters { - public LegalParameters() { +public enum ValidationStatus { + CLEAN, + OBSERVATION, + WARNING, + INVALID; + + /** + * The result of a validation is valid unless the status is INVALID. + * @return true if the validation has passed + */ + public boolean isValid() { + return !this.equals(INVALID); } } diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java index 510b6e36..b65db953 100644 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java @@ -1,4 +1,4 @@ -/* +/*- * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. * ================================================================================ @@ -17,6 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ + package org.onap.policy.common.parameters; import static org.junit.Assert.assertEquals; diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java index f8003cfe..b568d7fb 100644 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java @@ -20,16 +20,16 @@ package org.onap.policy.common.parameters; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.EmptyParameterGroup; public class TestAbstractParameters { @Test public void testAbstractParameters() { - final LegalParameters parameters = new LegalParameters(); - assertEquals(LegalParameters.class, parameters.getParameterClass()); - assertEquals("org.onap.policy.common.parameters.LegalParameters", parameters.getParameterClassName()); + final EmptyParameterGroup parameters = new EmptyParameterGroup("Empty Group"); + assertTrue(parameters.isValid()); } } diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java new file mode 100644 index 00000000..6d0aae5e --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java @@ -0,0 +1,62 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.TestParametersL00; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +public class TestJsonInput { + + @Test + public void testJsonInput() throws IOException { + TestParametersL00 testParameterGroup = null; + + // Read the parameters + try { + // Read the parameters from JSON using Gson + final Gson gson = new GsonBuilder().create(); + testParameterGroup = gson.fromJson(new FileReader("src/test/resources/parameters/TestParameters.json"), TestParametersL00.class); + } catch (final Exception e) { + fail("test should not throw an exception here: " + e.getMessage()); + } + + GroupValidationResult validationResult = testParameterGroup.validate(); + assertTrue(validationResult.isValid()); + assertEquals("l00NameFromFile", testParameterGroup.getName()); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt"))) + .replaceAll("\\s+", ""); + assertEquals(expectedResult, validationResult.getResult("", " ", true).replaceAll("\\s+", "")); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java index efd3e304..0b7e46ca 100644 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java @@ -27,6 +27,9 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.junit.Test; +import org.onap.policy.common.parameters.ParameterRuntimeException; +import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.common.parameters.testclasses.EmptyParameterGroup; public class TestParameterService { @@ -34,47 +37,57 @@ public class TestParameterService { public void testParameterService() { ParameterService.clear(); - assertFalse(ParameterService.existsParameters(LegalParameters.class)); + assertFalse(ParameterService.contains("EmptyGroup")); try { - ParameterService.getParameters(LegalParameters.class); + ParameterService.get("EmptyGroup"); fail("Test should throw an exception here"); } catch (final Exception e) { - assertEquals( - "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service", - e.getMessage()); + assertEquals("\"EmptyGroup\" not found in parameter service", e.getMessage()); } - ParameterService.registerParameters(new LegalParameters()); - assertTrue(ParameterService.existsParameters(LegalParameters.class)); - assertNotNull(ParameterService.getParameters(LegalParameters.class)); + ParameterService.register(new EmptyParameterGroup("Empty Group")); + assertTrue(ParameterService.contains("Empty Group")); + assertNotNull(ParameterService.get("Empty Group")); + + try { + ParameterService.register(new EmptyParameterGroup("Empty Group")); + fail("this test should throw an exception"); + } + catch (ParameterRuntimeException e) { + assertEquals("\"Empty Group\" already registered in parameter service", e.getMessage()); + } + + ParameterService.deregister("Empty Group"); + assertFalse(ParameterService.contains("Empty Group")); - ParameterService.deregisterParameters(LegalParameters.class); + try { + ParameterService.deregister("Empty Group"); + fail("this test should throw an exception"); + } + catch (ParameterRuntimeException e) { + assertEquals("\"Empty Group\" not registered in parameter service", e.getMessage()); + } - assertFalse(ParameterService.existsParameters(LegalParameters.class)); try { - ParameterService.getParameters(LegalParameters.class); + ParameterService.get("Empty Group"); fail("Test should throw an exception here"); } catch (final Exception e) { - assertEquals( - "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service", - e.getMessage()); + assertEquals("\"Empty Group\" not found in parameter service", e.getMessage()); } - ParameterService.registerParameters(new LegalParameters()); - assertTrue(ParameterService.existsParameters(LegalParameters.class)); - assertNotNull(ParameterService.getParameters(LegalParameters.class)); + ParameterService.register(new EmptyParameterGroup("Empty Group")); + assertTrue(ParameterService.contains("Empty Group")); + assertNotNull(ParameterService.get("Empty Group")); assertEquals(1, ParameterService.getAll().size()); ParameterService.clear(); assertEquals(0, ParameterService.getAll().size()); - assertFalse(ParameterService.existsParameters(LegalParameters.class)); + assertFalse(ParameterService.contains("Empty Group")); try { - ParameterService.getParameters(LegalParameters.class); + ParameterService.get("Empty Group"); fail("Test should throw an exception here"); } catch (final Exception e) { - assertEquals( - "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service", - e.getMessage()); + assertEquals("\"Empty Group\" not found in parameter service", e.getMessage()); } } } diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java new file mode 100644 index 00000000..2ca24a05 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java @@ -0,0 +1,183 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.TestParametersL00; + +public class TestValidation { + @Test + public void testValidationOk() throws IOException { + TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters"); + + GroupValidationResult validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertNull(validationResult.getResult()); + assertEquals(l0Parameters, validationResult.getParameterGroup()); + assertEquals(l0Parameters.getName(), validationResult.getName()); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_0_OK.txt"))) + .replaceAll("\\s+", ""); + assertEquals(expectedResult, validationResult.getResult("", " ", true).replaceAll("\\s+", "")); + } + + @Test + public void testValidationObservation() throws IOException { + TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters"); + + l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 3); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_3_Observation.txt"))) + .replaceAll("\\s+", ""); + + GroupValidationResult validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 2); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_2_Observation.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 1); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_1_Observation.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 0); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(null, validationResult.getResult()); + } + + @Test + public void testValidationWarning() throws IOException { + TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters"); + + l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 3); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_3_Warning.txt"))) + .replaceAll("\\s+", ""); + + GroupValidationResult validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 2); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_2_Warning.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 1); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_1_Warning.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 0); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(null, validationResult.getResult()); + } + + @Test + public void testValidationInvalid() throws IOException { + TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters"); + + l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 3); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_3_Invalid.txt"))) + .replaceAll("\\s+", ""); + + GroupValidationResult validationResult = l0Parameters.validate(); + assertFalse(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 2); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_2_Invalid.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertFalse(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 1); + + expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_1_Invalid.txt"))) + .replaceAll("\\s+", ""); + + validationResult = l0Parameters.validate(); + assertFalse(validationResult.isValid()); + assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", "")); + + l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3); + l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 0); + + validationResult = l0Parameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(null, validationResult.getResult()); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java new file mode 100644 index 00000000..6b781472 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java @@ -0,0 +1,105 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithArray; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithCollection; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithIllegalMapKey; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithIllegalMapValue; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithNullCollection; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithNullMapValue; +import org.onap.policy.common.parameters.testclasses.ParameterGroupWithParameterGroupCollection; + +public class TestValidationErrors { + @Test + public void testBadArrayValidation() { + ParameterGroupWithArray groupWithArray = new ParameterGroupWithArray("Illegal Array Group"); + assertTrue(groupWithArray.isValid()); + } + + @Test + public void testCollectionValidation() { + ParameterGroupWithCollection legalCollection = new ParameterGroupWithCollection("Legal Collection"); + assertTrue(legalCollection.isValid()); + + ParameterGroupWithParameterGroupCollection illegalCollection = new ParameterGroupWithParameterGroupCollection( + "Illegal Collection"); + try { + illegalCollection.isValid(); + fail("test should throw an exception"); + } catch (ParameterRuntimeException e) { + assertEquals("collection parameter \"parameterGroupArrayList\" is illegal," + + " parameter groups are not allowed as collection members", e.getMessage()); + } + } + + @Test + public void testNullCollection() { + ParameterGroupWithNullCollection nullCollection = new ParameterGroupWithNullCollection("Null Collection"); + + try { + nullCollection.isValid(); + fail("test should throw an exception"); + } catch (ParameterRuntimeException e) { + assertEquals("collection parameter \"nullList\" is null", e.getMessage()); + } + } + + @Test + public void testMapNullValueValidation() { + ParameterGroupWithNullMapValue nullMap = new ParameterGroupWithNullMapValue("Null Map value"); + try { + nullMap.isValid(); + fail("test should throw an exception"); + } catch (ParameterRuntimeException e) { + assertEquals("map parameter \"nullMap\" is null", e.getMessage()); + } + } + + @Test + public void testBadMapKeyValidation() { + ParameterGroupWithIllegalMapKey illegalMap = new ParameterGroupWithIllegalMapKey("Illegal Map"); + try { + illegalMap.isValid(); + fail("test should throw an exception"); + } catch (ParameterRuntimeException e) { + assertEquals("map entry is not a parameter group keyed by a string, key \"1\" " + + "in map \"badMap\" is not a string", e.getMessage()); + } + } + + @Test + public void testBadMapValueValidation() { + ParameterGroupWithIllegalMapValue illegalMap = new ParameterGroupWithIllegalMapValue("Illegal Map"); + try { + illegalMap.isValid(); + fail("test should throw an exception"); + } catch (ParameterRuntimeException e) { + assertEquals("map entry is not a parameter group keyed by a string, value \"1\" in " + + "map \"intMap\" is not a parameter group", e.getMessage()); + } + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java new file mode 100644 index 00000000..8f22765b --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java @@ -0,0 +1,147 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.TestParametersL10; +import org.onap.policy.common.parameters.testclasses.TestParametersLGeneric; + +public class TestValidationResults { + private Map<String, ParameterGroup> pgMap = new LinkedHashMap<>(); + private ParameterGroup pg = new TestParametersL10("pg"); + + @Before + public void initMap() { + pgMap.put("entry0", new TestParametersLGeneric("entry0")); + } + + @Test + public void testGroupMapValidationResult() throws NoSuchFieldException, SecurityException { + GroupMapValidationResult result = new GroupMapValidationResult(this.getClass().getDeclaredField("pgMap"), + pgMap); + + assertTrue(result.isValid()); + assertEquals("pgMap", result.getName()); + + result.setResult(ValidationStatus.OBSERVATION); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + + // Once the status is stepped, it can't be reset back because it is the status of map members + result.setResult(ValidationStatus.CLEAN); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + + result.setResult(ValidationStatus.OBSERVATION, "Something was observed"); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + assertEquals("parameter group map \"pgMap\" OBSERVATION, Something was observed", result.getResult().trim()); + + result.setResult("entry0", new GroupValidationResult(pgMap.get("entry0"))); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + assertEquals("parameter group map \"pgMap\" OBSERVATION, Something was observed", result.getResult().trim()); + + try { + result.setResult("nonExistantEntry", new GroupValidationResult(pgMap.get("entry0"))); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("no entry with name \"nonExistantEntry\" exists", e.getMessage()); + } + } + + @Test + public void testGroupValidationResult() throws NoSuchFieldException, SecurityException { + GroupValidationResult result = new GroupValidationResult(pg); + + assertTrue(result.isValid()); + assertEquals(pg, result.getParameterGroup()); + assertEquals("pg", result.getName()); + + result.setResult(ValidationStatus.OBSERVATION); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + + // Once the status is stepped, it can't be reset back because it is the status of map members + result.setResult(ValidationStatus.CLEAN); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + + result.setResult(ValidationStatus.OBSERVATION, "Something was observed"); + assertTrue(result.isValid()); + assertEquals(ValidationStatus.OBSERVATION, result.getStatus()); + assertEquals("parameter group \"pg\" type \"org.onap.policy.common.parameters.testclasses.TestParametersL10\"" + + " OBSERVATION, Something was observed", result.getResult().trim()); + + try { + result.setResult("nonExistantParameter", ValidationStatus.OBSERVATION, "Something was observed"); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("no regular parameter field exists for parameter: nonExistantParameter", e.getMessage()); + } + + try { + result.setResult("l10LGenericNestedMap", ValidationStatus.OBSERVATION, "Something was observed"); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("parameter not a regular parameter: l10LGenericNestedMap", e.getMessage()); + } + + try { + result.setResult("nonExistantParameter", new GroupValidationResult(pg)); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("no nested parameter field exists for parameter: nonExistantParameter", e.getMessage()); + } + + try { + result.setResult("l10IntField", new GroupValidationResult(pg)); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("parameter is not a nested group parameter: l10IntField", e.getMessage()); + } + + GroupMapValidationResult groupMapResult = new GroupMapValidationResult( + this.getClass().getDeclaredField("pgMap"), pgMap); + + try { + result.setResult("nonExistantParameter", "entry0", groupMapResult); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("no group map parameter field exists for parameter: nonExistantParameter", e.getMessage()); + } + + try { + result.setResult("l10IntField", "entry0", groupMapResult); + fail("test shold throw an exception here"); + } catch (Exception e) { + assertEquals("parameter is not a nested group map parameter: l10IntField", e.getMessage()); + } + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java new file mode 100644 index 00000000..7d803525 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.junit.Test; +import org.onap.policy.common.parameters.testclasses.TestParametersL00; +import org.yaml.snakeyaml.Yaml; + +public class TestYamlInput { + @Test + public void testYamlInput() throws IOException { + TestParametersL00 testParameterGroup = null; + + // Read the parameters + try { + // Read the parameters from JSON using Gson + final Yaml yaml = new Yaml(); + testParameterGroup = yaml.loadAs(new FileReader("src/test/resources/parameters/TestParameters.yaml"), TestParametersL00.class); + } catch (final Exception e) { + fail("test should not throw an exception here: " + e.getMessage()); + } + + GroupValidationResult validationResult = testParameterGroup.validate(); + assertTrue(validationResult.isValid()); + assertEquals("l00NameFromFile", testParameterGroup.getName()); + + String expectedResult = new String(Files.readAllBytes( + Paths.get("src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt"))) + .replaceAll("\\s+", ""); + assertEquals(expectedResult, validationResult.getResult("", " ", true).replaceAll("\\s+", "")); + } +} diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidator.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/EmptyParameterGroup.java index 0d718267..f545ce65 100644 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidator.java +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/EmptyParameterGroup.java @@ -18,19 +18,25 @@ * ============LICENSE_END========================================================= */ -package org.onap.policy.common.parameters; +package org.onap.policy.common.parameters.testclasses; -/** - * This interface is implemented by ONAP PF parameter classes so that they can be validated. - * - * @author Liam Fallon (liam.fallon@ericsson.com) - */ -public interface ParameterValidator { - /** - * Validate a parameter java bean, if the parameter bean is valid, an empty string is returned, - * otherwise the string gives details of the invalid parameters. - * - * @return the string with validation errors - */ - String validate(); +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class EmptyParameterGroup implements ParameterGroup { + private String name; + + public EmptyParameterGroup(final String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } } diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java new file mode 100644 index 00000000..cdab1272 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java @@ -0,0 +1,47 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithArray implements ParameterGroup { + private String name; + private int[] intArray = {1, 2, 3}; + + public ParameterGroupWithArray(final String name) { + this.name = name; + } + + public int[] getIntArray() { + return intArray; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java new file mode 100644 index 00000000..0f993099 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.ArrayList; +import java.util.List; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithCollection implements ParameterGroup { + private String name; + private List<Integer> intArrayList = new ArrayList<>(); + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithCollection(final String name) { + this.name = name; + + intArrayList.add(1); + intArrayList.add(2); + intArrayList.add(3); + } + + public List<Integer> getIntArrayList() { + return intArrayList; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java new file mode 100644 index 00000000..3de3270e --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithIllegalMapKey implements ParameterGroup { + private String name; + private Map<Integer, ParameterGroup> badMap = new LinkedHashMap<>(); + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithIllegalMapKey(final String name) { + this.name = name; + + badMap.put(1, new TestParametersLGeneric("One")); + badMap.put(2, new TestParametersLGeneric("Two")); + badMap.put(3, new TestParametersLGeneric("Three")); + } + + public Map<Integer, ParameterGroup> getBadMap() { + return badMap; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } + +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java new file mode 100644 index 00000000..8eb697a4 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.LinkedHashMap; +import java.util.Map; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithIllegalMapValue implements ParameterGroup { + private String name; + private Map<String, Integer> intMap = new LinkedHashMap<>(); + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithIllegalMapValue(final String name) { + this.name = name; + + intMap.put("One", 1); + intMap.put("Two", 2); + intMap.put("Three", 3); + } + + public Map<String, Integer> getIntMap() { + return intMap; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java new file mode 100644 index 00000000..37399da3 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.List; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithNullCollection implements ParameterGroup { + private String name; + private List<Integer> nullList = null; + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithNullCollection(final String name) { + this.name = name; + } + + public List<Integer> getNullList() { + return nullList; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java new file mode 100644 index 00000000..80f55355 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.Map; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithNullMapValue implements ParameterGroup { + private String name; + private Map<String, Integer> nullMap = null; + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithNullMapValue(final String name) { + this.name = name; + } + + public Map<String, Integer> getNullMap() { + return nullMap; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java new file mode 100644 index 00000000..e7d1de75 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java @@ -0,0 +1,58 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.ArrayList; +import java.util.List; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class ParameterGroupWithParameterGroupCollection implements ParameterGroup { + private String name; + private List<ParameterGroup> parameterGroupArrayList = new ArrayList<>(); + + /** + * Create a test parameter group. + * @param name the parameter group name + */ + public ParameterGroupWithParameterGroupCollection(final String name) { + this.name = name; + + parameterGroupArrayList.add(new TestParametersLGeneric("Generic0")); + parameterGroupArrayList.add(new TestParametersLGeneric("Generic1")); + parameterGroupArrayList.add(new TestParametersLGeneric("Generic2")); + } + + public List<ParameterGroup> getIntArrayList() { + return parameterGroupArrayList; + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + return new GroupValidationResult(this); + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java new file mode 100644 index 00000000..6b8460cd --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java @@ -0,0 +1,177 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ParameterConstants; +import org.onap.policy.common.parameters.ValidationStatus; + +public class TestParametersL00 implements ParameterGroup { + private String name; + private int l00IntField = 0; + private String l00StringField = "Legal " + this.getClass().getCanonicalName(); + private TestParametersL10 l00L10Nested = new TestParametersL10("l00L10Nested"); + private TestParametersLGeneric l00LGenericNested = new TestParametersLGeneric("l00LGenericNested"); + private Map<String, TestParametersLGeneric> l00LGenericNestedMap = new LinkedHashMap<>(); + + /** + * Default constructor + */ + public TestParametersL00() { + } + + /** + * Create a test parameter group. + * + * @param name the parameter group name + */ + public TestParametersL00(final String name) { + this.name = name; + + TestParametersLGeneric l00LGenericNestedMapVal0 = new TestParametersLGeneric("l00LGenericNestedMapVal0"); + l00LGenericNestedMap.put(l00LGenericNestedMapVal0.getName(), l00LGenericNestedMapVal0); + TestParametersLGeneric l00LGenericNestedMapVal1 = new TestParametersLGeneric("l00LGenericNestedMapVal1"); + l00LGenericNestedMap.put(l00LGenericNestedMapVal1.getName(), l00LGenericNestedMapVal1); + } + + public void setName(String name) { + this.name = name; + } + + public void setL00IntField(int l00IntField) { + this.l00IntField = l00IntField; + } + + public void setL00StringField(String l00StringField) { + this.l00StringField = l00StringField; + } + + public void setL00L10Nested(TestParametersL10 l00l10Nested) { + l00L10Nested = l00l10Nested; + } + + public void setL00LGenericNested(TestParametersLGeneric l00lGenericNested) { + l00LGenericNested = l00lGenericNested; + } + + public void setL00LGenericNestedMap(Map<String, TestParametersLGeneric> l00lGenericNestedMap) { + l00LGenericNestedMap = l00lGenericNestedMap; + } + + /** + * Trigger a validation message. + * + * @param triggerStatus Validation status to trigger + * @param level Number of levels to recurse before stopping + */ + public void triggerValidationStatus(final ValidationStatus triggerStatus, int level) { + if (level == 0) { + return; + } else { + level--; + } + + switch (triggerStatus) { + case CLEAN: + l00StringField = "Legal " + this.getClass().getCanonicalName(); + l00IntField = 0; + break; + case OBSERVATION: + l00StringField = "aString"; + l00IntField = 2; + break; + case WARNING: + l00StringField = "l00StringField"; + l00IntField = 3; + break; + case INVALID: + l00StringField = ""; + l00IntField = -1; + break; + default: + break; + } + + l00L10Nested.triggerValidationStatus(triggerStatus, level); + l00LGenericNested.triggerValidationStatus(triggerStatus, level); + + for (TestParametersLGeneric nestedParameterGroup : l00LGenericNestedMap.values()) { + nestedParameterGroup.triggerValidationStatus(triggerStatus, level); + } + + } + + @Override + public String getName() { + return name; + } + + @Override + public GroupValidationResult validate() { + GroupValidationResult validationResult = new GroupValidationResult(this); + + if (name == null || name.trim().length() == 0) { + validationResult.setResult("name", ValidationStatus.INVALID, "name must be a non-blank string"); + } + + if (l00StringField == null || l00StringField.trim().length() == 0) { + validationResult.setResult("l00StringField", ValidationStatus.INVALID, + "l00StringField must be a non-blank string"); + } else if (l00StringField.equals("l00StringField")) { + validationResult.setResult("l00StringField", ValidationStatus.WARNING, + "using the field name for the parameter value is dangerous"); + } else if (l00StringField.equals("aString")) { + validationResult.setResult("l00StringField", ValidationStatus.OBSERVATION, + "this value for name is unhelpful"); + } else { + validationResult.setResult("l00StringField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + if (l00IntField < 0) { + validationResult.setResult("l00IntField", ValidationStatus.INVALID, + "l00IntField must be a positive integer"); + } else if (l00IntField > 2) { + validationResult.setResult("l00IntField", ValidationStatus.WARNING, + "values greater than 2 are not recommended"); + } else if (l00IntField == 2) { + validationResult.setResult("l00IntField", ValidationStatus.OBSERVATION, "this field has been set to 2"); + } else { + validationResult.setResult("l00IntField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + validationResult.setResult("l00L10Nested", l00L10Nested.validate()); + validationResult.setResult("l00LGenericNested", l00LGenericNested.validate()); + + for (Entry<String, TestParametersLGeneric> nestedGroupEntry : l00LGenericNestedMap.entrySet()) { + validationResult.setResult("l00LGenericNestedMap", nestedGroupEntry.getKey(), + nestedGroupEntry.getValue().validate()); + } + + return validationResult; + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java new file mode 100644 index 00000000..94a67ec7 --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java @@ -0,0 +1,173 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ParameterConstants; +import org.onap.policy.common.parameters.ValidationStatus; + +public class TestParametersL10 implements ParameterGroup { + private String name; + private int l10IntField = 0; + private String l10StringField = "Legal " + this.getClass().getCanonicalName(); + private TestParametersLGeneric l10LGenericNested0 = new TestParametersLGeneric("l10LGenericNested0"); + private TestParametersLGeneric l10LGenericNested1 = new TestParametersLGeneric("l10LGenericNested1"); + private Map<String, TestParametersLGeneric> l10LGenericNestedMap = new LinkedHashMap<>(); + + /** + * Default constructor + */ + public TestParametersL10() { + } + + /** + * Create a test parameter group. + * + * @param name the parameter group name + */ + public TestParametersL10(final String name) { + this.name = name; + + TestParametersLGeneric l10LGenericNestedMapVal0 = new TestParametersLGeneric("l10LGenericNestedMapVal0"); + l10LGenericNestedMap.put(l10LGenericNestedMapVal0.getName(), l10LGenericNestedMapVal0); + TestParametersLGeneric l10LGenericNestedMapVal1 = new TestParametersLGeneric("l10LGenericNestedMapVal1"); + l10LGenericNestedMap.put(l10LGenericNestedMapVal1.getName(), l10LGenericNestedMapVal1); + } + + public void setName(String name) { + this.name = name; + } + + public void setL10IntField(int l10IntField) { + this.l10IntField = l10IntField; + } + + public void setL10StringField(String l10StringField) { + this.l10StringField = l10StringField; + } + + public void setL10LGenericNested0(TestParametersLGeneric l10lGenericNested0) { + l10LGenericNested0 = l10lGenericNested0; + } + + public void setL10LGenericNested1(TestParametersLGeneric l10lGenericNested1) { + l10LGenericNested1 = l10lGenericNested1; + } + + public void setL10LGenericNestedMap(Map<String, TestParametersLGeneric> l10lGenericNestedMap) { + l10LGenericNestedMap = l10lGenericNestedMap; + } + + /** + * Trigger a validation message. + * + * @param level Number of levels to recurse before stopping + */ + public void triggerValidationStatus(final ValidationStatus triggerStatus, int level) { + if (level == 0) { + return; + } + else { + level--; + } + + switch (triggerStatus) { + case CLEAN: + l10StringField = "Legal " + this.getClass().getCanonicalName(); + l10IntField = 0; + break; + case OBSERVATION: + l10StringField = "aString"; + l10IntField = 2; + break; + case WARNING: + l10StringField = "l10StringField"; + l10IntField = 3; + break; + case INVALID: + l10StringField = ""; + l10IntField = -1; + break; + default: + break; + } + + l10LGenericNested0.triggerValidationStatus(triggerStatus, level); + l10LGenericNested1.triggerValidationStatus(triggerStatus, level); + + for (TestParametersLGeneric nestedParameterGroup : l10LGenericNestedMap.values()) { + nestedParameterGroup.triggerValidationStatus(triggerStatus, level); + } + } + + @Override + public String getName() { + return this.name; + } + + @Override + public GroupValidationResult validate() { + GroupValidationResult validationResult = new GroupValidationResult(this); + + if (l10StringField == null || l10StringField.trim().length() == 0) { + validationResult.setResult("l10StringField", ValidationStatus.INVALID, + "l10StringField must be a non-blank string"); + } else if (l10StringField.equals("l10StringField")) { + validationResult.setResult("l10StringField", ValidationStatus.WARNING, + "using the field name for the parameter value is dangerous"); + } else if (l10StringField.equals("aString")) { + validationResult.setResult("l10StringField", ValidationStatus.OBSERVATION, + "this value for name is unhelpful"); + } else { + validationResult.setResult("l10StringField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + if (l10IntField < 0) { + validationResult.setResult("l10IntField", ValidationStatus.INVALID, + "l10IntField must be a positive integer"); + } else if (l10IntField > 2) { + validationResult.setResult("l10IntField", ValidationStatus.WARNING, + "values greater than 2 are not recommended"); + } else if (l10IntField == 2) { + validationResult.setResult("l10IntField", ValidationStatus.OBSERVATION, "this field has been set to 2"); + } else { + validationResult.setResult("l10IntField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + + validationResult.setResult("l10LGenericNested0", l10LGenericNested0.validate()); + validationResult.setResult("l10LGenericNested1", l10LGenericNested1.validate()); + + for (Entry<String, TestParametersLGeneric> nestedGroupEntry : l10LGenericNestedMap.entrySet()) { + validationResult.setResult("l10LGenericNestedMap", nestedGroupEntry.getKey(), + nestedGroupEntry.getValue().validate()); + } + + return validationResult; + } +} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java new file mode 100644 index 00000000..ce368bac --- /dev/null +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java @@ -0,0 +1,135 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters.testclasses; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ParameterConstants; +import org.onap.policy.common.parameters.ValidationStatus; + +public class TestParametersLGeneric implements ParameterGroup { + private String name; + private int lgenericIntField = 0; + private String lgenericStringField = "Legal " + this.getClass().getCanonicalName(); + + /** + * Default constructor + */ + public TestParametersLGeneric() { + } + + /** + * Create a test parameter group. + * + * @param name the parameter group name + */ + public TestParametersLGeneric(final String name) { + this.name = name; + } + + public void setName(String name) { + this.name = name; + } + + public void setLgenericIntField(int lgenericIntField) { + this.lgenericIntField = lgenericIntField; + } + + public void setLgenericStringField(String lgenericStringField) { + this.lgenericStringField = lgenericStringField; + } + + /** + * Trigger a validation message. + * + * @param level Number of levels to recurse before stopping + */ + public void triggerValidationStatus(final ValidationStatus triggerStatus, int level) { + if (level == 0) { + return; + } + else { + level--; + } + + switch (triggerStatus) { + case CLEAN: + lgenericStringField = "Legal " + this.getClass().getCanonicalName(); + lgenericIntField = 0; + break; + case OBSERVATION: + lgenericStringField = "aString"; + lgenericIntField = 2; + break; + case WARNING: + lgenericStringField = "lgenericStringField"; + lgenericIntField = 3; + break; + case INVALID: + lgenericStringField = ""; + lgenericIntField = -1; + break; + default: + break; + } + + } + + @Override + public String getName() { + return this.name; + } + + @Override + public GroupValidationResult validate() { + GroupValidationResult validationResult = new GroupValidationResult(this); + + if (lgenericStringField == null || lgenericStringField.trim().length() == 0) { + validationResult.setResult("lgenericStringField", ValidationStatus.INVALID, + "lgenericStringField must be a non-blank string"); + } else if (lgenericStringField.equals("lgenericStringField")) { + validationResult.setResult("lgenericStringField", ValidationStatus.WARNING, + "using the field name for the parameter value is dangerous"); + } else if (lgenericStringField.equals("aString")) { + validationResult.setResult("lgenericStringField", ValidationStatus.OBSERVATION, + "this value for name is unhelpful"); + } else { + validationResult.setResult("lgenericStringField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + if (lgenericIntField < 0) { + validationResult.setResult("lgenericIntField", ValidationStatus.INVALID, + "lgenericIntField must be a positive integer"); + } else if (lgenericIntField > 2) { + validationResult.setResult("lgenericIntField", ValidationStatus.WARNING, + "values greater than 2 are not recommended"); + } else if (lgenericIntField == 2) { + validationResult.setResult("lgenericIntField", ValidationStatus.OBSERVATION, + "this field has been set to 2"); + } else { + validationResult.setResult("lgenericIntField", ValidationStatus.CLEAN, + ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString()); + } + + return validationResult; + } +} diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt b/common-parameters/src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt new file mode 100644 index 00000000..103321ff --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt @@ -0,0 +1,39 @@ +parameter group "l00NameFromFile" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l00NameFromFile" CLEAN, parameter has status CLEAN + field "l00IntField" type "int" value "1" CLEAN, parameter has status CLEAN + field "l00StringField" type "java.lang.String" value "l00 string field value from file" CLEAN, parameter has status CLEAN + parameter group "l00L10NestedNameFromFile" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l00L10NestedNameFromFile" CLEAN, parameter has status CLEAN + field "l10IntField" type "int" value "1" CLEAN, parameter has status CLEAN + field "l10StringField" type "java.lang.String" value "l00 L10 nested string field value from file" CLEAN, parameter has status CLEAN + parameter group "l10LGenericNested0NameFromFile" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l10LGenericNested0NameFromFile" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "l10 generic nested 0 string field value from file" CLEAN, parameter has status CLEAN + parameter group "l10LGenericNested1NameFromFile" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l10LGenericNested1NameFromFile" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "l10 generic nested 1 string field value from file" CLEAN, parameter has status CLEAN + parameter group map "l10LGenericNestedMap" CLEAN, parameter group map has status CLEAN + parameter group "L10Entry0Name" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "L10Entry0Name" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "L10Entry0 value from file" CLEAN, parameter has status CLEAN + parameter group "L10Entry1Name" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "L10Entry1Name" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "L10Entry1 value from file" CLEAN, parameter has status CLEAN + parameter group "l00GenericNestedNameFromFile" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l00GenericNestedNameFromFile" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "l00 generic nested string field value from file" CLEAN, parameter has status CLEAN + parameter group map "l00LGenericNestedMap" CLEAN, parameter group map has status CLEAN + parameter group "L00Entry0Name" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "L00Entry0Name" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "L00Entry0 value from file" CLEAN, parameter has status CLEAN + parameter group "L00Entry1Name" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "L00Entry1Name" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "L00Entry1 value from file" CLEAN, parameter has status CLEAN + diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_0_OK.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_0_OK.txt new file mode 100644 index 00000000..7f6d298c --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_0_OK.txt @@ -0,0 +1,39 @@ +parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l0Parameters" CLEAN, parameter has status CLEAN + field "l00IntField" type "int" value "0" CLEAN, parameter has status CLEAN + field "l00StringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersL00" CLEAN, parameter has status CLEAN + parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l00L10Nested" CLEAN, parameter has status CLEAN + field "l10IntField" type "int" value "0" CLEAN, parameter has status CLEAN + field "l10StringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersL10" CLEAN, parameter has status CLEAN + parameter group "l10LGenericNested0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l10LGenericNested0" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN + parameter group "l10LGenericNested1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l10LGenericNested1" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN + parameter group map "l10LGenericNestedMap" CLEAN, parameter group map has status CLEAN + parameter group "l10LGenericNestedMapVal0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l10LGenericNestedMapVal0" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN + parameter group "l10LGenericNestedMapVal1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l10LGenericNestedMapVal1" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN + parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l00LGenericNested" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN + parameter group map "l00LGenericNestedMap" CLEAN, parameter group map has status CLEAN + parameter group "l00LGenericNestedMapVal0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l00LGenericNestedMapVal0" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN + parameter group "l00LGenericNestedMapVal1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN + field "name" type "java.lang.String" value "l00LGenericNestedMapVal1" CLEAN, parameter has status CLEAN + field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN + field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN + diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Invalid.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Invalid.txt new file mode 100644 index 00000000..dcc3cee3 --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Invalid.txt @@ -0,0 +1,3 @@ +parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" INVALID, parameter group has status INVALID + field "l00IntField" type "int" value "-1" INVALID, l00IntField must be a positive integer + field "l00StringField" type "java.lang.String" value "" INVALID, l00StringField must be a non-blank string diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Observation.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Observation.txt new file mode 100644 index 00000000..ae627926 --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Observation.txt @@ -0,0 +1,3 @@ +parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" OBSERVATION, parameter group has status OBSERVATION + field "l00IntField" type "int" value "2" OBSERVATION, this field has been set to 2 + field "l00StringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Warning.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Warning.txt new file mode 100644 index 00000000..14a65aa8 --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Warning.txt @@ -0,0 +1,3 @@ +parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" WARNING, parameter group has status WARNING + field "l00IntField" type "int" value "3" WARNING, values greater than 2 are not recommended + field "l00StringField" type "java.lang.String" value "l00StringField" WARNING, using the field name for the parameter value is dangerous diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Invalid.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Invalid.txt new file mode 100644 index 00000000..cec8f208 --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Invalid.txt @@ -0,0 +1,9 @@ +parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" INVALID, parameter group has status INVALID + field "l00IntField" type "int" value "-1" INVALID, l00IntField must be a positive integer + field "l00StringField" type "java.lang.String" value "" INVALID, l00StringField must be a non-blank string + parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" INVALID, parameter group has status INVALID + field "l10IntField" type "int" value "-1" INVALID, l10IntField must be a positive integer + field "l10StringField" type "java.lang.String" value "" INVALID, l10StringField must be a non-blank string + parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" INVALID, parameter group has status INVALID + field "lgenericIntField" type "int" value "-1" INVALID, lgenericIntField must be a positive integer + field "lgenericStringField" type "java.lang.String" value "" INVALID, lgenericStringField must be a non-blank string
\ No newline at end of file diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Observation.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Observation.txt new file mode 100644 index 00000000..45402033 --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Observation.txt @@ -0,0 +1,9 @@ +parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" OBSERVATION, parameter group has status OBSERVATION + field "l00IntField" type "int" value "2" OBSERVATION, this field has been set to 2 + field "l00StringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful + parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" OBSERVATION, parameter group has status OBSERVATION + field "l10IntField" type "int" value "2" OBSERVATION, this field has been set to 2 + field "l10StringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful + parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" OBSERVATION, parameter group has status OBSERVATION + field "lgenericIntField" type "int" value "2" OBSERVATION, this field has been set to 2 + field "lgenericStringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Warning.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Warning.txt new file mode 100644 index 00000000..33d1d16a --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Warning.txt @@ -0,0 +1,9 @@ +parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" WARNING, parameter group has status WARNING + field "l00IntField" type "int" value "3" WARNING, values greater than 2 are not recommended + field "l00StringField" type "java.lang.String" value "l00StringField" WARNING, using the field name for the parameter value is dangerous + parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" WARNING, parameter group has status WARNING + field "l10IntField" type "int" value "3" WARNING, values greater than 2 are not recommended + field "l10StringField" type "java.lang.String" value "l10StringField" WARNING, using the field name for the parameter value is dangerous + parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" WARNING, parameter group has status WARNING + field "lgenericIntField" type "int" value "3" WARNING, values greater than 2 are not recommended + field "lgenericStringField" type "java.lang.String" value "lgenericStringField" WARNING, using the field name for the parameter value is dangerous
\ No newline at end of file diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Invalid.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Invalid.txt new file mode 100644 index 00000000..fecfe70d --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Invalid.txt @@ -0,0 +1,15 @@ +parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" INVALID, parameter group has status INVALID + field "l00IntField" type "int" value "-1" INVALID, l00IntField must be a positive integer + field "l00StringField" type "java.lang.String" value "" INVALID, l00StringField must be a non-blank string + parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" INVALID, parameter group has status INVALID + field "l10IntField" type "int" value "-1" INVALID, l10IntField must be a positive integer + field "l10StringField" type "java.lang.String" value "" INVALID, l10StringField must be a non-blank string + parameter group "l10LGenericNested0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" INVALID, parameter group has status INVALID + field "lgenericIntField" type "int" value "-1" INVALID, lgenericIntField must be a positive integer + field "lgenericStringField" type "java.lang.String" value "" INVALID, lgenericStringField must be a non-blank string + parameter group "l10LGenericNested1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" INVALID, parameter group has status INVALID + field "lgenericIntField" type "int" value "-1" INVALID, lgenericIntField must be a positive integer + field "lgenericStringField" type "java.lang.String" value "" INVALID, lgenericStringField must be a non-blank string + parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" INVALID, parameter group has status INVALID + field "lgenericIntField" type "int" value "-1" INVALID, lgenericIntField must be a positive integer + field "lgenericStringField" type "java.lang.String" value "" INVALID, lgenericStringField must be a non-blank string
\ No newline at end of file diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Observation.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Observation.txt new file mode 100644 index 00000000..00fe6627 --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Observation.txt @@ -0,0 +1,15 @@ +parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" OBSERVATION, parameter group has status OBSERVATION + field "l00IntField" type "int" value "2" OBSERVATION, this field has been set to 2 + field "l00StringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful + parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" OBSERVATION, parameter group has status OBSERVATION + field "l10IntField" type "int" value "2" OBSERVATION, this field has been set to 2 + field "l10StringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful + parameter group "l10LGenericNested0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" OBSERVATION, parameter group has status OBSERVATION + field "lgenericIntField" type "int" value "2" OBSERVATION, this field has been set to 2 + field "lgenericStringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful + parameter group "l10LGenericNested1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" OBSERVATION, parameter group has status OBSERVATION + field "lgenericIntField" type "int" value "2" OBSERVATION, this field has been set to 2 + field "lgenericStringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful + parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" OBSERVATION, parameter group has status OBSERVATION + field "lgenericIntField" type "int" value "2" OBSERVATION, this field has been set to 2 + field "lgenericStringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Warning.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Warning.txt new file mode 100644 index 00000000..6c1c639d --- /dev/null +++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Warning.txt @@ -0,0 +1,15 @@ +parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" WARNING, parameter group has status WARNING + field "l00IntField" type "int" value "3" WARNING, values greater than 2 are not recommended + field "l00StringField" type "java.lang.String" value "l00StringField" WARNING, using the field name for the parameter value is dangerous + parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" WARNING, parameter group has status WARNING + field "l10IntField" type "int" value "3" WARNING, values greater than 2 are not recommended + field "l10StringField" type "java.lang.String" value "l10StringField" WARNING, using the field name for the parameter value is dangerous + parameter group "l10LGenericNested0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" WARNING, parameter group has status WARNING + field "lgenericIntField" type "int" value "3" WARNING, values greater than 2 are not recommended + field "lgenericStringField" type "java.lang.String" value "lgenericStringField" WARNING, using the field name for the parameter value is dangerous + parameter group "l10LGenericNested1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" WARNING, parameter group has status WARNING + field "lgenericIntField" type "int" value "3" WARNING, values greater than 2 are not recommended + field "lgenericStringField" type "java.lang.String" value "lgenericStringField" WARNING, using the field name for the parameter value is dangerous + parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" WARNING, parameter group has status WARNING + field "lgenericIntField" type "int" value "3" WARNING, values greater than 2 are not recommended + field "lgenericStringField" type "java.lang.String" value "lgenericStringField" WARNING, using the field name for the parameter value is dangerous
\ No newline at end of file diff --git a/common-parameters/src/test/resources/parameters/TestParameters.json b/common-parameters/src/test/resources/parameters/TestParameters.json new file mode 100644 index 00000000..8e312166 --- /dev/null +++ b/common-parameters/src/test/resources/parameters/TestParameters.json @@ -0,0 +1,49 @@ +{ + "name" : "l00NameFromFile", + "l00IntField" : 1, + "l00StringField" : "l00 string field value from file", + "l00L10Nested" : { + "name" : "l00L10NestedNameFromFile", + "l10IntField" : 1, + "l10StringField" : "l00 L10 nested string field value from file", + "l10LGenericNested0" : { + "name" : "l10LGenericNested0NameFromFile", + "lgenericIntField" : 1, + "lgenericStringField" : "l10 generic nested 0 string field value from file" + }, + "l10LGenericNested1" : { + "name" : "l10LGenericNested1NameFromFile", + "lgenericIntField" : 1, + "lgenericStringField" : "l10 generic nested 1 string field value from file" + }, + "l10LGenericNestedMap": { + "L10Entry0": { + "name" : "L10Entry0Name", + "lgenericIntField" : 1, + "lgenericStringField" : "L10Entry0 value from file" + }, + "L10Entry1": { + "name" : "L10Entry1Name", + "lgenericIntField" : 1, + "lgenericStringField" : "L10Entry1 value from file" + } + } + }, + "l00LGenericNested" : { + "name" : "l00GenericNestedNameFromFile", + "lgenericIntField" : 1, + "lgenericStringField" : "l00 generic nested string field value from file" + }, + "l00LGenericNestedMap": { + "L00Entry0": { + "name" : "L00Entry0Name", + "lgenericIntField" : 1, + "lgenericStringField" : "L00Entry0 value from file" + }, + "L00Entry1": { + "name" : "L00Entry1Name", + "lgenericIntField" : 1, + "lgenericStringField" : "L00Entry1 value from file" + } + } +}
\ No newline at end of file diff --git a/common-parameters/src/test/resources/parameters/TestParameters.yaml b/common-parameters/src/test/resources/parameters/TestParameters.yaml new file mode 100644 index 00000000..c7e17f6a --- /dev/null +++ b/common-parameters/src/test/resources/parameters/TestParameters.yaml @@ -0,0 +1,37 @@ +name: l00NameFromFile +l00IntField: 1 +l00StringField: l00 string field value from file +l00L10Nested: + name: l00L10NestedNameFromFile + l10IntField: 1 + l10StringField: l00 L10 nested string field value from file + l10LGenericNested0: + name: l10LGenericNested0NameFromFile + lgenericIntField: 1 + lgenericStringField: l10 generic nested 0 string field value from file + l10LGenericNested1: + name: l10LGenericNested1NameFromFile + lgenericIntField: 1 + lgenericStringField: l10 generic nested 1 string field value from file + l10LGenericNestedMap: + l10Entry0: + name: L10Entry0Name + lgenericIntField: 1 + lgenericStringField: L10Entry0 value from file + L10Entry1: + name: L10Entry1Name + lgenericIntField: 1 + lgenericStringField: L10Entry1 value from file +l00LGenericNested: + name: l00GenericNestedNameFromFile + lgenericIntField: 1 + lgenericStringField: l00 generic nested string field value from file +l00LGenericNestedMap: + L00Entry0: + name: L00Entry0Name + lgenericIntField: 1 + lgenericStringField: L00Entry0 value from file + L00Entry1: + name: L00Entry1Name + lgenericIntField: 1 + lgenericStringField: L00Entry1 value from file @@ -23,10 +23,10 @@ <modelVersion>4.0.0</modelVersion> <parent> - <groupId>org.onap.oparent</groupId> - <artifactId>oparent</artifactId> - <version>1.1.0</version> - <relativePath /> + <groupId>org.onap.policy.parent</groupId> + <artifactId>integration</artifactId> + <version>2.0.0-SNAPSHOT</version> + <relativePath/> </parent> <groupId>org.onap.policy.common</groupId> |