You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by di...@apache.org on 2022/06/08 10:49:59 UTC

[sling-org-apache-sling-feature-extension-apiregions] 01/01: SLING-11383: use per configuration mode for factoyconfig validation

This is an automated email from the ASF dual-hosted git repository.

diru pushed a commit to branch issue/SLING-11383
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-apiregions.git

commit 07661fb59f9cef303e4262b5d04a93463dde86e2
Author: Dirk Rudolph <dr...@adobe.com>
AuthorDate: Wed Jun 8 12:49:47 2022 +0200

    SLING-11383: use per configuration mode for factoyconfig validation
---
 .../api/config/validation/FeatureValidator.java    | 10 ++--
 .../config/validation/FeatureValidatorTest.java    | 60 ++++++++++++++++++++--
 2 files changed, 61 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
index ac89b6b..4609b64 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
@@ -37,6 +37,7 @@ import org.apache.sling.feature.extension.apiregions.api.config.ConfigurationApi
 import org.apache.sling.feature.extension.apiregions.api.config.ConfigurationDescription;
 import org.apache.sling.feature.extension.apiregions.api.config.FactoryConfigurationDescription;
 import org.apache.sling.feature.extension.apiregions.api.config.FrameworkPropertyDescription;
+import org.apache.sling.feature.extension.apiregions.api.config.Mode;
 import org.apache.sling.feature.extension.apiregions.api.config.Operation;
 import org.apache.sling.feature.extension.apiregions.api.config.Region;
 import org.osgi.util.converter.Converter;
@@ -137,23 +138,24 @@ public class FeatureValidator {
                 if ( config.isFactoryConfiguration() ) {
                     final FactoryConfigurationDescription desc = api.getFactoryConfigurationDescriptions().get(config.getFactoryPid());
                     if ( desc != null ) {
+                        final Mode validationMode = desc.getMode() != null ? desc.getMode() : api.getMode();
                         final ConfigurationValidationResult r = configurationValidator.validate(config, desc, regionInfo.region, api.getMode());
                         result.getConfigurationResults().put(config.getPid(), r);
                         if ( regionInfo.region != Region.INTERNAL ) {
                             if ( desc.getOperations().isEmpty() ) {
-                                ConfigurationValidator.setResult(r, api.getMode(), desc, "No operations allowed for " +
+                                ConfigurationValidator.setResult(r, validationMode, desc, "No operations allowed for " +
                                         "factory configuration");
                             } else {
                                 if ( regionInfo.isUpdate && !desc.getOperations().contains(Operation.UPDATE)) {
-                                    ConfigurationValidator.setResult(r, api.getMode(), desc, "Updating of factory " +
+                                    ConfigurationValidator.setResult(r, validationMode, desc, "Updating of factory " +
                                             "configuration is not allowed");
                                 } else if ( !regionInfo.isUpdate && !desc.getOperations().contains(Operation.CREATE)) {
-                                    ConfigurationValidator.setResult(r, api.getMode(), desc, "Creation of factory " +
+                                    ConfigurationValidator.setResult(r, validationMode, desc, "Creation of factory " +
                                             "configuration is not allowed");
                                 }
                             }
                             if ( desc.getInternalNames().contains(config.getName())) {
-                                ConfigurationValidator.setResult(r, api.getMode(), desc, "Factory configuration with " +
+                                ConfigurationValidator.setResult(r, validationMode, desc, "Factory configuration with " +
                                         "name is not allowed");
                             }
                         }                        
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidatorTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidatorTest.java
index 1f96eb2..216328e 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidatorTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidatorTest.java
@@ -493,17 +493,29 @@ public class FeatureValidatorTest {
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getInternalNames().add("b");
         ConfigurationApi.setConfigurationApi(f1, api);
 
+        // global region -> fail
         FeatureValidationResult result = validator.validate(f1, api);
         assertFalse(result.isValid());
         assertFalse(result.getConfigurationResults().get(FACTORY_PID.concat("~a")).isValid());
         assertFalse(result.getConfigurationResults().get(FACTORY_PID.concat("~b")).isValid());
         assertTrue(result.getConfigurationResults().get(FACTORY_PID.concat("~print")).isValid());
 
-       // internal region
-       api.setRegion(Region.INTERNAL);
-       ConfigurationApi.setConfigurationApi(f1, api);
-       result = validator.validate(f1, api);
-       assertTrue(result.isValid());
+        // global region, lenient -> warn
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(Mode.LENIENT);
+        ConfigurationApi.setConfigurationApi(f1, api);
+        result = validator.validate(f1, api);
+        assertTrue(result.isValid());
+        assertEquals(1, result.getConfigurationResults().get(FACTORY_PID.concat("~a")).getWarnings().size());
+        assertEquals(1, result.getConfigurationResults().get(FACTORY_PID.concat("~b")).getWarnings().size());
+        assertEquals(0, result.getConfigurationResults().get(FACTORY_PID.concat("~print")).getWarnings().size());
+
+        // internal region
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(null);
+        ConfigurationApi.setConfigurationApi(f1, api);
+        api.setRegion(Region.INTERNAL);
+        ConfigurationApi.setConfigurationApi(f1, api);
+        result = validator.validate(f1, api);
+        assertTrue(result.isValid());
     }
 
     @Test public void testFactoryConfigurationOperationsWithCreate() {
@@ -517,13 +529,30 @@ public class FeatureValidatorTest {
         assertFalse(result.isValid());
         assertFalse(result.getConfigurationResults().get(FACTORY_PID.concat("~print")).isValid());
 
+        // no operation, lenient -> warn
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(Mode.LENIENT);
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().clear();
+        ConfigurationApi.setConfigurationApi(f1, api);
+        result = validator.validate(f1, api);
+        assertTrue(result.isValid());
+        assertEquals(1, result.getConfigurationResults().get(FACTORY_PID.concat("~print")).getWarnings().size());
+
         // only update -> fail
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(null);
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().add(Operation.UPDATE);
         ConfigurationApi.setConfigurationApi(f1, api);
         result = validator.validate(f1, api);
         assertFalse(result.isValid());
         assertFalse(result.getConfigurationResults().get(FACTORY_PID.concat("~print")).isValid());
 
+        // only update, lenient -> warn
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(Mode.LENIENT);
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().add(Operation.UPDATE);
+        ConfigurationApi.setConfigurationApi(f1, api);
+        result = validator.validate(f1, api);
+        assertTrue(result.isValid());
+        assertEquals(1, result.getConfigurationResults().get(FACTORY_PID.concat("~print")).getWarnings().size());
+
         // only create -> success
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().clear();
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().add(Operation.CREATE);
@@ -592,19 +621,30 @@ public class FeatureValidatorTest {
         this.validator.setFeatureProvider(provider);
 
         // no operation -> fail
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(null);
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().clear();
         ConfigurationApi.setConfigurationApi(f1, api);
         FeatureValidationResult result = validator.validate(f1, api);
         assertFalse(result.isValid());
         assertFalse(result.getConfigurationResults().get(FACTORY_PID.concat("~print")).isValid());
 
+        // no operation, lenient -> warn
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(Mode.LENIENT);
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().clear();
+        ConfigurationApi.setConfigurationApi(f1, api);
+        result = validator.validate(f1, api);
+        assertTrue(result.isValid());
+        assertEquals(1, result.getConfigurationResults().get(FACTORY_PID.concat("~print")).getWarnings().size());
+
         // only update -> success
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(null);
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().add(Operation.UPDATE);
         ConfigurationApi.setConfigurationApi(f1, api);
         result = validator.validate(f1, api);
         assertTrue(result.isValid());
 
         // only create -> fail
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(null);
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().clear();
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().add(Operation.CREATE);
         ConfigurationApi.setConfigurationApi(f1, api);
@@ -612,7 +652,17 @@ public class FeatureValidatorTest {
         assertFalse(result.isValid());
         assertFalse(result.getConfigurationResults().get(FACTORY_PID.concat("~print")).isValid());
 
+        // only create, lenient -> warn
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(Mode.LENIENT);
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().clear();
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().add(Operation.CREATE);
+        ConfigurationApi.setConfigurationApi(f1, api);
+        result = validator.validate(f1, api);
+        assertTrue(result.isValid());
+        assertEquals(1, result.getConfigurationResults().get(FACTORY_PID.concat("~print")).getWarnings().size());
+
         // update, create -> success
+        api.getFactoryConfigurationDescriptions().get(FACTORY_PID).setMode(null);
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().clear();
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().add(Operation.CREATE);
         api.getFactoryConfigurationDescriptions().get(FACTORY_PID).getOperations().add(Operation.UPDATE);