Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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<String> 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<String> 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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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<String> 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<String> 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<String> 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<String> supportedParameters = getSupportedParameters();
Collection<String> strings = discoverAllParameterConstants();

Set<String> 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<String> getSupportedParameters() {
Set<String> supportedParameters = new HashSet<>();
fillWithSupportedParameters(supportedParameters);
fillWithNonEntitySpecificSupportedParameters(supportedParameters);
return supportedParameters;
}

private void fillWithSupportedParameters(Set<String> 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<String> supportedParameters) {
supportedParameters.addAll(GENERAL_PARAMETERS);
supportedParameters.addAll(CONFIGURATION_REFERENCE_PARAMETERS);
supportedParameters.addAll(NESTED_PARAMETERS);
}

private Collection<String> discoverAllParameterConstants() throws IllegalAccessException {
Collection<String> 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;
}
}
Loading