diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/model/SupportedParameters.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/model/SupportedParameters.java index 2b28d75130..f4bb010390 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/model/SupportedParameters.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/model/SupportedParameters.java @@ -127,7 +127,6 @@ public class SupportedParameters { // Required dependency parameters: public static final String SERVICE_BINDING_CONFIG = "config"; - public static final String SERVICE_BINDING_CONFIG_PATH = "config-path"; public static final String MANAGED = "managed"; public static final String ENV_VAR_NAME = "env-var-name"; public static final String BINDING_NAME = "binding-name"; @@ -198,14 +197,17 @@ public class SupportedParameters { REGISTER_SERVICE_URL, REGISTER_SERVICE_URL_SERVICE_NAME, REGISTER_SERVICE_URL_SERVICE_URL, MODULE_CONFIG, MANAGED, PATH, APPS_UPLOAD_TIMEOUT, APPS_TASK_EXECUTION_TIMEOUT, - APPS_START_TIMEOUT, APPS_STAGE_TIMEOUT); + APPS_START_TIMEOUT, APPS_STAGE_TIMEOUT, + READINESS_HEALTH_CHECK_HTTP_ENDPOINT, + READINESS_HEALTH_CHECK_INVOCATION_TIMEOUT, READINESS_HEALTH_CHECK_TYPE, + READINESS_HEALTH_CHECK_INTERVAL, DELETE_SERVICE_KEY_AFTER_DEPLOYMENT); public static final Set RESOURCE_PARAMETERS = Set.of(APPLY_NAMESPACE, SERVICE_CONFIG, SYSLOG_DRAIN_URL, DEFAULT_CONTAINER_NAME, DEFAULT_SERVICE_NAME, DEFAULT_XS_APP_NAME, SERVICE, SERVICE_KEYS, SERVICE_KEY_NAME, SERVICE_NAME, SERVICE_PLAN, SERVICE_TAGS, SERVICE_BROKER, SKIP_SERVICE_UPDATES, TYPE, PROVIDER_ID, PROVIDER_NID, TARGET, SERVICE_CONFIG_PATH, FILTER, MANAGED, VERSION, PATH, MEMORY, - FAIL_ON_SERVICE_UPDATE); + FAIL_ON_SERVICE_UPDATE, SERVICE_PROVIDER, SERVICE_VERSION); public static final Set GLOBAL_PARAMETERS = Set.of(KEEP_EXISTING_ROUTES, APPS_UPLOAD_TIMEOUT, APPS_TASK_EXECUTION_TIMEOUT, APPS_START_TIMEOUT, APPS_STAGE_TIMEOUT, APPLY_NAMESPACE, ENABLE_PARALLEL_DEPLOYMENTS, DEPLOY_MODE); diff --git a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/model/SupportedParameterTest.java b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/model/SupportedParameterTest.java new file mode 100644 index 0000000000..a5522aa842 --- /dev/null +++ b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/model/SupportedParameterTest.java @@ -0,0 +1,92 @@ +package org.cloudfoundry.multiapps.controller.core.model; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class SupportedParameterTest { + + private static final String DEFINED_MISSING_PARAMETERS_MESSAGE = "The following parameters are defined, but are not added to any structure: "; + private static final String FIX_MISSING_PARAMETERS_INSTRUCTIONS = ".\nTo resolve this, add the missing parameters to the appropriate collection in the SupportedParameters class."; + + private static final Set GENERAL_PARAMETERS = Set.of(SupportedParameters.XS_TARGET_API_URL, + SupportedParameters.APPLY_NAMESPACE_SERVICES, + SupportedParameters.XS_AUTHORIZATION_ENDPOINT, + SupportedParameters.APPLY_NAMESPACE_AS_SUFFIX, + SupportedParameters.DEPLOY_TARGET, + SupportedParameters.APPLY_NAMESPACE_APPS, + SupportedParameters.APPLY_NAMESPACE_ROUTES, + SupportedParameters.DEPLOY_SERVICE_URL, SupportedParameters.NAMESPACE, + SupportedParameters.MTA_VERSION); + + private static final Set CONFIGURATION_REFERENCE_PARAMETERS = Set.of(SupportedParameters.PROVIDER_NAMESPACE, + SupportedParameters.DEPRECATED_CONFIG_MTA_PROVIDES_DEPENDENCY, + SupportedParameters.MTA_ID, + SupportedParameters.DEPRECATED_CONFIG_MTA_MODULE); + + private static final Set NESTED_PARAMETERS = Set.of(SupportedParameters.IDLE_ROUTE, SupportedParameters.VCAP_APPLICATION_ENV, + SupportedParameters.VCAP_SERVICES_ENV, + SupportedParameters.USER_PROVIDED_ENV, SupportedParameters.NO_HOSTNAME); + + @Test + public void allFieldsShouldBeWhitelisted() throws IllegalAccessException { + Set supportedParameters = getSupportedParameters(); + Collection strings = discoverAllParameterConstants(); + + Set missing = strings.stream() + .filter(f -> !supportedParameters.contains(f)) + .collect(Collectors.toSet()); + + assertTrue(missing.isEmpty(), + () -> DEFINED_MISSING_PARAMETERS_MESSAGE + missing + + FIX_MISSING_PARAMETERS_INSTRUCTIONS); + } + + private Set getSupportedParameters() { + Set supportedParameters = new HashSet<>(); + fillWithSupportedParameters(supportedParameters); + fillWithNonEntitySpecificSupportedParameters(supportedParameters); + return supportedParameters; + } + + private void fillWithSupportedParameters(Set supportedParameters) { + supportedParameters.addAll(SupportedParameters.MODULE_PARAMETERS); + supportedParameters.addAll(SupportedParameters.RESOURCE_PARAMETERS); + supportedParameters.addAll(SupportedParameters.GLOBAL_PARAMETERS); + supportedParameters.addAll(SupportedParameters.DEPENDENCY_PARAMETERS); + supportedParameters.addAll(SupportedParameters.MODULE_HOOK_PARAMETERS); + supportedParameters.addAll(SupportedParameters.READ_ONLY_MODULE_PARAMETERS); + supportedParameters.addAll(SupportedParameters.READ_ONLY_SYSTEM_PARAMETERS); + supportedParameters.addAll(SupportedParameters.READ_ONLY_RESOURCE_PARAMETERS); + supportedParameters.addAll(SupportedParameters.DYNAMIC_RESOLVABLE_PARAMETERS); + } + + private void fillWithNonEntitySpecificSupportedParameters(Set supportedParameters) { + supportedParameters.addAll(GENERAL_PARAMETERS); + supportedParameters.addAll(CONFIGURATION_REFERENCE_PARAMETERS); + supportedParameters.addAll(NESTED_PARAMETERS); + } + + private Collection discoverAllParameterConstants() throws IllegalAccessException { + Collection strings = new ArrayList<>(); + Class clazz = SupportedParameters.class; + for (Field field : clazz.getDeclaredFields()) { + field.setAccessible(true); + Object value = field.get(null); + + if (value instanceof String) { + strings.addAll(Arrays.asList((String) value)); + } + + } + return strings; + } +}