From ee6486f35e6fda0ab104bde957f0959455995a04 Mon Sep 17 00:00:00 2001 From: vkalapov <87693906+vkalapov@users.noreply.github.com> Date: Mon, 19 May 2025 15:29:01 +0300 Subject: [PATCH 1/4] Add unit test for SupportedParameters --- .../core/model/SupportedParameters.java | 8 +- .../core/model/SupportedParameterTest.java | 90 +++++++++++++++++++ 2 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/model/SupportedParameterTest.java 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..8a5ce1663c --- /dev/null +++ b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/model/SupportedParameterTest.java @@ -0,0 +1,90 @@ +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.fail; + +public class SupportedParameterTest { + + 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 = getClassStringFieldsFromClass(); + + Set missing = strings.stream() + .filter(f -> !supportedParameters.contains(f)) + .collect(Collectors.toSet()); + + if (!missing.isEmpty()) { + fail("Missing whitelist entries: " + missing + + ".\nTo resolve this, add the missing parameter(s) to the appropriate whitelist set in the SupportedParameters class. "); + } + } + + 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 getClassStringFieldsFromClass() 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; + } +} From d9d7a68872a076a46ed87be8e8bcf57120286c59 Mon Sep 17 00:00:00 2001 From: vkalapov <87693906+vkalapov@users.noreply.github.com> Date: Mon, 19 May 2025 16:18:53 +0300 Subject: [PATCH 2/4] Make error message more verbose --- .../controller/core/model/SupportedParameterTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 index 8a5ce1663c..a53d7bf75e 100644 --- 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 @@ -43,8 +43,8 @@ public void allFieldsShouldBeWhitelisted() throws IllegalAccessException { .collect(Collectors.toSet()); if (!missing.isEmpty()) { - fail("Missing whitelist entries: " + missing + - ".\nTo resolve this, add the missing parameter(s) to the appropriate whitelist set in the SupportedParameters class. "); + fail("The following parameters are defined, but are not added to any structure: " + missing + + ".\nTo resolve this, add the missing parameters to the appropriate collection in the SupportedParameters class."); } } From e143fdc72c2669562ce88d12547e4a19d447bc5e Mon Sep 17 00:00:00 2001 From: vkalapov <87693906+vkalapov@users.noreply.github.com> Date: Thu, 22 May 2025 12:19:43 +0300 Subject: [PATCH 3/4] Slight refactor from comments --- .../core/model/SupportedParameterTest.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) 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 index a53d7bf75e..0bd02d7b57 100644 --- 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 @@ -10,7 +10,7 @@ import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.fail; +import static org.junit.jupiter.api.Assertions.assertTrue; public class SupportedParameterTest { @@ -36,16 +36,15 @@ public class SupportedParameterTest { @Test public void allFieldsShouldBeWhitelisted() throws IllegalAccessException { Set supportedParameters = getSupportedParameters(); - Collection strings = getClassStringFieldsFromClass(); + Collection strings = discoverAllParameterConstants(); Set missing = strings.stream() .filter(f -> !supportedParameters.contains(f)) .collect(Collectors.toSet()); - if (!missing.isEmpty()) { - fail("The following parameters are defined, but are not added to any structure: " + missing + - ".\nTo resolve this, add the missing parameters to the appropriate collection in the SupportedParameters class."); - } + assertTrue(missing.isEmpty(), + () -> "The following parameters are defined, but are not added to any structure: " + missing + + ".\nTo resolve this, add the missing parameters to the appropriate collection in the SupportedParameters class."); } private Set getSupportedParameters() { @@ -73,7 +72,7 @@ private void fillWithNonEntitySpecificSupportedParameters(Set supportedP supportedParameters.addAll(NESTED_PARAMETERS); } - private Collection getClassStringFieldsFromClass() throws IllegalAccessException { + private Collection discoverAllParameterConstants() throws IllegalAccessException { Collection strings = new ArrayList<>(); Class clazz = SupportedParameters.class; for (Field field : clazz.getDeclaredFields()) { From f2b6372c5ec1e9e9fe71bb467a10985a3835a92c Mon Sep 17 00:00:00 2001 From: vkalapov <87693906+vkalapov@users.noreply.github.com> Date: Thu, 22 May 2025 12:57:16 +0300 Subject: [PATCH 4/4] Extract messages to constants --- .../controller/core/model/SupportedParameterTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 index 0bd02d7b57..a5522aa842 100644 --- 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 @@ -14,6 +14,9 @@ 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, @@ -43,8 +46,8 @@ public void allFieldsShouldBeWhitelisted() throws IllegalAccessException { .collect(Collectors.toSet()); assertTrue(missing.isEmpty(), - () -> "The following parameters are defined, but are not added to any structure: " + missing + - ".\nTo resolve this, add the missing parameters to the appropriate collection in the SupportedParameters class."); + () -> DEFINED_MISSING_PARAMETERS_MESSAGE + missing + + FIX_MISSING_PARAMETERS_INSTRUCTIONS); } private Set getSupportedParameters() {