|
| 1 | +package org.cloudfoundry.multiapps.controller.core.model; |
| 2 | + |
| 3 | +import java.lang.reflect.Field; |
| 4 | +import java.util.ArrayList; |
| 5 | +import java.util.Arrays; |
| 6 | +import java.util.Collection; |
| 7 | +import java.util.HashSet; |
| 8 | +import java.util.Set; |
| 9 | +import java.util.stream.Collectors; |
| 10 | + |
| 11 | +import org.junit.jupiter.api.Test; |
| 12 | + |
| 13 | +import static org.junit.jupiter.api.Assertions.assertTrue; |
| 14 | + |
| 15 | +public class SupportedParameterTest { |
| 16 | + |
| 17 | + private static final String DEFINED_MISSING_PARAMETERS_MESSAGE = "The following parameters are defined, but are not added to any structure: "; |
| 18 | + private static final String FIX_MISSING_PARAMETERS_INSTRUCTIONS = ".\nTo resolve this, add the missing parameters to the appropriate collection in the SupportedParameters class."; |
| 19 | + |
| 20 | + private static final Set<String> GENERAL_PARAMETERS = Set.of(SupportedParameters.XS_TARGET_API_URL, |
| 21 | + SupportedParameters.APPLY_NAMESPACE_SERVICES, |
| 22 | + SupportedParameters.XS_AUTHORIZATION_ENDPOINT, |
| 23 | + SupportedParameters.APPLY_NAMESPACE_AS_SUFFIX, |
| 24 | + SupportedParameters.DEPLOY_TARGET, |
| 25 | + SupportedParameters.APPLY_NAMESPACE_APPS, |
| 26 | + SupportedParameters.APPLY_NAMESPACE_ROUTES, |
| 27 | + SupportedParameters.DEPLOY_SERVICE_URL, SupportedParameters.NAMESPACE, |
| 28 | + SupportedParameters.MTA_VERSION); |
| 29 | + |
| 30 | + private static final Set<String> CONFIGURATION_REFERENCE_PARAMETERS = Set.of(SupportedParameters.PROVIDER_NAMESPACE, |
| 31 | + SupportedParameters.DEPRECATED_CONFIG_MTA_PROVIDES_DEPENDENCY, |
| 32 | + SupportedParameters.MTA_ID, |
| 33 | + SupportedParameters.DEPRECATED_CONFIG_MTA_MODULE); |
| 34 | + |
| 35 | + private static final Set<String> NESTED_PARAMETERS = Set.of(SupportedParameters.IDLE_ROUTE, SupportedParameters.VCAP_APPLICATION_ENV, |
| 36 | + SupportedParameters.VCAP_SERVICES_ENV, |
| 37 | + SupportedParameters.USER_PROVIDED_ENV, SupportedParameters.NO_HOSTNAME); |
| 38 | + |
| 39 | + @Test |
| 40 | + public void allFieldsShouldBeWhitelisted() throws IllegalAccessException { |
| 41 | + Set<String> supportedParameters = getSupportedParameters(); |
| 42 | + Collection<String> strings = discoverAllParameterConstants(); |
| 43 | + |
| 44 | + Set<String> missing = strings.stream() |
| 45 | + .filter(f -> !supportedParameters.contains(f)) |
| 46 | + .collect(Collectors.toSet()); |
| 47 | + |
| 48 | + assertTrue(missing.isEmpty(), |
| 49 | + () -> DEFINED_MISSING_PARAMETERS_MESSAGE + missing + |
| 50 | + FIX_MISSING_PARAMETERS_INSTRUCTIONS); |
| 51 | + } |
| 52 | + |
| 53 | + private Set<String> getSupportedParameters() { |
| 54 | + Set<String> supportedParameters = new HashSet<>(); |
| 55 | + fillWithSupportedParameters(supportedParameters); |
| 56 | + fillWithNonEntitySpecificSupportedParameters(supportedParameters); |
| 57 | + return supportedParameters; |
| 58 | + } |
| 59 | + |
| 60 | + private void fillWithSupportedParameters(Set<String> supportedParameters) { |
| 61 | + supportedParameters.addAll(SupportedParameters.MODULE_PARAMETERS); |
| 62 | + supportedParameters.addAll(SupportedParameters.RESOURCE_PARAMETERS); |
| 63 | + supportedParameters.addAll(SupportedParameters.GLOBAL_PARAMETERS); |
| 64 | + supportedParameters.addAll(SupportedParameters.DEPENDENCY_PARAMETERS); |
| 65 | + supportedParameters.addAll(SupportedParameters.MODULE_HOOK_PARAMETERS); |
| 66 | + supportedParameters.addAll(SupportedParameters.READ_ONLY_MODULE_PARAMETERS); |
| 67 | + supportedParameters.addAll(SupportedParameters.READ_ONLY_SYSTEM_PARAMETERS); |
| 68 | + supportedParameters.addAll(SupportedParameters.READ_ONLY_RESOURCE_PARAMETERS); |
| 69 | + supportedParameters.addAll(SupportedParameters.DYNAMIC_RESOLVABLE_PARAMETERS); |
| 70 | + } |
| 71 | + |
| 72 | + private void fillWithNonEntitySpecificSupportedParameters(Set<String> supportedParameters) { |
| 73 | + supportedParameters.addAll(GENERAL_PARAMETERS); |
| 74 | + supportedParameters.addAll(CONFIGURATION_REFERENCE_PARAMETERS); |
| 75 | + supportedParameters.addAll(NESTED_PARAMETERS); |
| 76 | + } |
| 77 | + |
| 78 | + private Collection<String> discoverAllParameterConstants() throws IllegalAccessException { |
| 79 | + Collection<String> strings = new ArrayList<>(); |
| 80 | + Class<?> clazz = SupportedParameters.class; |
| 81 | + for (Field field : clazz.getDeclaredFields()) { |
| 82 | + field.setAccessible(true); |
| 83 | + Object value = field.get(null); |
| 84 | + |
| 85 | + if (value instanceof String) { |
| 86 | + strings.addAll(Arrays.asList((String) value)); |
| 87 | + } |
| 88 | + |
| 89 | + } |
| 90 | + return strings; |
| 91 | + } |
| 92 | +} |
0 commit comments