This is an automated email from the ASF dual-hosted git repository.
diru pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-apiregions.git
The following commit(s) were added to refs/heads/master by this push:
new c15c9ba SLING-11383: use per configuration mode for factory config
validation (#19)
c15c9ba is described below
commit c15c9ba4879db78ee72fa1443b9deb2e03ae8cbe
Author: Dirk Rudolph <[email protected]>
AuthorDate: Wed Jun 8 13:52:48 2022 +0200
SLING-11383: use per configuration mode for factory config validation (#19)
---
.../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);