summaryrefslogtreecommitdiffstats
path: root/common-app-api
diff options
context:
space:
mode:
authorandre.schmid <andre.schmid@est.tech>2020-04-17 14:53:17 +0100
committerOfir Sonsino <ofir.sonsino@intl.att.com>2020-04-19 16:35:32 +0000
commit615de28561aeb843e4fc18a1859b68a8164b17a4 (patch)
treee4d66d6452e1b0cd8c81dba21d76d8e56c48a8a6 /common-app-api
parentcd6f933375c412c2f79a12e909821322d58a8499 (diff)
Validates artifact configuration
Validates if all the SDC base artifacts are configured. The base artifacts are provided by the ArtifactTypeEnum. Change-Id: Iffa38d6ba276014940afad71f7472bc8d730fcf8 Issue-ID: SDC-2929 Signed-off-by: andre.schmid <andre.schmid@est.tech>
Diffstat (limited to 'common-app-api')
-rw-r--r--common-app-api/src/main/java/org/openecomp/sdc/be/config/ConfigurationManager.java13
-rw-r--r--common-app-api/src/main/java/org/openecomp/sdc/be/config/exception/MissingBaseArtifactConfigException.java28
-rw-r--r--common-app-api/src/main/java/org/openecomp/sdc/be/config/validation/ArtifactConfigValidator.java82
-rw-r--r--common-app-api/src/main/java/org/openecomp/sdc/common/api/ArtifactTypeEnum.java116
-rw-r--r--common-app-api/src/test/java/org/openecomp/sdc/be/config/validation/ArtifactConfigValidatorTest.java76
5 files changed, 303 insertions, 12 deletions
diff --git a/common-app-api/src/main/java/org/openecomp/sdc/be/config/ConfigurationManager.java b/common-app-api/src/main/java/org/openecomp/sdc/be/config/ConfigurationManager.java
index 101b60e941..66494ed668 100644
--- a/common-app-api/src/main/java/org/openecomp/sdc/be/config/ConfigurationManager.java
+++ b/common-app-api/src/main/java/org/openecomp/sdc/be/config/ConfigurationManager.java
@@ -21,6 +21,8 @@
package org.openecomp.sdc.be.config;
import com.google.common.annotations.VisibleForTesting;
+import org.openecomp.sdc.be.config.validation.ArtifactConfigValidator;
+import org.openecomp.sdc.common.api.ArtifactTypeEnum;
import org.openecomp.sdc.common.api.BasicConfiguration;
import org.openecomp.sdc.common.api.ConfigurationListener;
import org.openecomp.sdc.common.api.ConfigurationSource;
@@ -48,11 +50,11 @@ public class ConfigurationManager implements FileChangeCallback, IEcompConfigura
super();
this.configurationSource = configurationSource;
loadConfigurationFiles();
+ validateConfiguration();
instance = this;
}
private void loadConfigurationFiles() {
-
loadConfigurationClass(Configuration.class);
loadConfigurationClass(ErrorConfiguration.class);
loadConfigurationClass(Neo4jErrorsConfiguration.class);
@@ -60,6 +62,15 @@ public class ConfigurationManager implements FileChangeCallback, IEcompConfigura
loadConfigurationClass(DistributionEngineConfiguration.class);
}
+ private void validateConfiguration() {
+ final Object configurationObj = configurations.get(getKey(Configuration.class));
+ if (configurationObj instanceof Configuration) {
+ final ArtifactConfigValidator artifactConfigValidator =
+ new ArtifactConfigValidator((Configuration) configurationObj, ArtifactTypeEnum.getBaseArtifacts());
+ artifactConfigValidator.validate();
+ }
+ }
+
private <T extends BasicConfiguration> void loadConfigurationClass(Class<T> clazz) {
ConfigurationListener configurationListener = new ConfigurationListener(clazz, this);
diff --git a/common-app-api/src/main/java/org/openecomp/sdc/be/config/exception/MissingBaseArtifactConfigException.java b/common-app-api/src/main/java/org/openecomp/sdc/be/config/exception/MissingBaseArtifactConfigException.java
new file mode 100644
index 0000000000..87bf2cc5a8
--- /dev/null
+++ b/common-app-api/src/main/java/org/openecomp/sdc/be/config/exception/MissingBaseArtifactConfigException.java
@@ -0,0 +1,28 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix Foundation
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.be.config.exception;
+
+public class MissingBaseArtifactConfigException extends RuntimeException {
+
+ public MissingBaseArtifactConfigException(final String msg) {
+ super(msg);
+ }
+
+}
diff --git a/common-app-api/src/main/java/org/openecomp/sdc/be/config/validation/ArtifactConfigValidator.java b/common-app-api/src/main/java/org/openecomp/sdc/be/config/validation/ArtifactConfigValidator.java
new file mode 100644
index 0000000000..66152d6a20
--- /dev/null
+++ b/common-app-api/src/main/java/org/openecomp/sdc/be/config/validation/ArtifactConfigValidator.java
@@ -0,0 +1,82 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix Foundation
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.be.config.validation;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.apache.commons.collections.CollectionUtils;
+import org.openecomp.sdc.be.config.ArtifactConfiguration;
+import org.openecomp.sdc.be.config.Configuration;
+import org.openecomp.sdc.be.config.exception.MissingBaseArtifactConfigException;
+import org.openecomp.sdc.common.api.ArtifactTypeEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Responsible for the validation of the artifact configuration
+ */
+public class ArtifactConfigValidator {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ArtifactConfigValidator.class);
+
+ private final Configuration configuration;
+ private final Set<ArtifactTypeEnum> baseArtifactSet;
+
+ public ArtifactConfigValidator(final Configuration configuration,
+ final Set<ArtifactTypeEnum> baseArtifactSet) {
+ this.configuration = configuration;
+ this.baseArtifactSet = baseArtifactSet;
+ }
+
+ /**
+ * Validates the artifacts configuration
+ */
+ public void validate() {
+ if (CollectionUtils.isEmpty(baseArtifactSet)) {
+ return;
+ }
+
+ final List<ArtifactConfiguration> artifacts = configuration.getArtifacts();
+ if (CollectionUtils.isEmpty(artifacts)) {
+ LOGGER.warn("No configuration artifacts entry found. Ignoring artifacts validation.");
+ return;
+ }
+
+ final Set<ArtifactTypeEnum> notConfiguredArtifactTypeSet = baseArtifactSet.stream()
+ .filter(artifactTypeEnum ->
+ artifacts.stream()
+ .noneMatch(artifactConfiguration ->
+ artifactTypeEnum.getType().equals(artifactConfiguration.getType())))
+ .collect(Collectors.toSet());
+ if (!notConfiguredArtifactTypeSet.isEmpty()) {
+ final String msg = buildErrorMessage(notConfiguredArtifactTypeSet);
+ throw new MissingBaseArtifactConfigException(msg);
+ }
+ }
+
+ private String buildErrorMessage(final Set<ArtifactTypeEnum> missingConfigArtifactTypeSet) {
+ final String artifactTypeAsString = missingConfigArtifactTypeSet.stream()
+ .map(ArtifactTypeEnum::getType)
+ .collect(Collectors.joining(", "));
+ return String.format("Missing configuration for Artifact Type(s): %s", artifactTypeAsString);
+ }
+
+}
diff --git a/common-app-api/src/main/java/org/openecomp/sdc/common/api/ArtifactTypeEnum.java b/common-app-api/src/main/java/org/openecomp/sdc/common/api/ArtifactTypeEnum.java
index affa2d32e0..94d9a8ed73 100644
--- a/common-app-api/src/main/java/org/openecomp/sdc/common/api/ArtifactTypeEnum.java
+++ b/common-app-api/src/main/java/org/openecomp/sdc/common/api/ArtifactTypeEnum.java
@@ -20,34 +20,64 @@
package org.openecomp.sdc.common.api;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
- * Represents an artifact type that is used for hard-coded type representation. All artifacts must be configured in the
- * SDC configuration file.
+ * Represents an artifact type that is used for hard-coded type representation.
+ * All artifacts must be configured in the SDC configuration file.
*/
@Getter
@AllArgsConstructor
public enum ArtifactTypeEnum {
AAI_SERVICE_MODEL("AAI_SERVICE_MODEL"),
+ AAI_VF_INSTANCE_MODEL("AAI_VF_INSTANCE_MODEL"),
+ AAI_VF_MODEL("AAI_VF_MODEL"),
+ AAI_VF_MODULE_MODEL("AAI_VF_MODULE_MODEL"),
ANSIBLE_PLAYBOOK("ANSIBLE_PLAYBOOK"),
+ APPC_CONFIG("APPC_CONFIG"),
+ BPEL("BPEL"),
+ CHEF("CHEF"),
CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT("CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT"),
+ CONTROLLER_BLUEPRINT_ARCHIVE("CONTROLLER_BLUEPRINT_ARCHIVE"),
+ DCAE_DOC("DCAE_DOC"),
+ DCAE_EVENT("DCAE_EVENT"),
+ DCAE_INVENTORY_BLUEPRINT("DCAE_INVENTORY_BLUEPRINT"),
+ DCAE_INVENTORY_DOC("DCAE_INVENTORY_DOC"),
+ DCAE_INVENTORY_EVENT("DCAE_INVENTORY_EVENT"),
DCAE_INVENTORY_JSON("DCAE_INVENTORY_JSON"),
+ DCAE_INVENTORY_POLICY("DCAE_INVENTORY_POLICY"),
DCAE_INVENTORY_TOSCA("DCAE_INVENTORY_TOSCA"),
+ DCAE_JSON("DCAE_JSON"),
+ DCAE_POLICY("DCAE_POLICY"),
+ DCAE_TOSCA("DCAE_TOSCA"),
+ DG_XML("DG_XML"),
GUIDE("GUIDE"),
- HEAT("HEAT"),
HEAT_ARTIFACT("HEAT_ARTIFACT"),
HEAT_ENV("HEAT_ENV"),
+ HEAT("HEAT"),
HEAT_NESTED("HEAT_NESTED"),
HEAT_NET("HEAT_NET"),
HEAT_VOL("HEAT_VOL"),
+ ICON("ICON"),
LIFECYCLE_OPERATIONS("LIFECYCLE_OPERATIONS"),
MODEL_INVENTORY_PROFILE("MODEL_INVENTORY_PROFILE"),
MODEL_QUERY_SPEC("MODEL_QUERY_SPEC"),
+ MURANO_PKG("MURANO_PKG"),
+ NETWORK_CALL_FLOW("NETWORK_CALL_FLOW"),
+ ONBOARDED_PACKAGE("ONBOARDED_PACKAGE"),
OTHER("OTHER"),
+ PERFORMANCE_COUNTER("PERFORMANCE_COUNTER"),
+ PLAN("PLAN"),
PM_DICTIONARY("PM_DICTIONARY"),
+ PNF_SW_INFORMATION("PNF_SW_INFORMATION"),
PUPPET("PUPPET"),
+ SHELL("SHELL"),
+ SHELL_SCRIPT("SHELL_SCRIPT"),
SNMP_POLL("SNMP_POLL"),
SNMP_TRAP("SNMP_TRAP"),
TOSCA_CSAR("TOSCA_CSAR"),
@@ -59,14 +89,9 @@ public enum ArtifactTypeEnum {
VF_MODULES_METADATA("VF_MODULES_METADATA"),
VNF_CATALOG("VNF_CATALOG"),
WORKFLOW("WORKFLOW"),
- YANG_XML("YANG_XML"),
- CHEF("CHEF"), YANG("YANG"), SHELL_SCRIPT("SHELL_SCRIPT"), SHELL("SHELL"), ICON("ICON"), UNKNOWN("UNKNOWN"), DG_XML("DG_XML"), MURANO_PKG("MURANO_PKG"),
- NETWORK_CALL_FLOW("NETWORK_CALL_FLOW"), BPEL("BPEL"), APPC_CONFIG("APPC_CONFIG"), PERFORMANCE_COUNTER("PERFORMANCE_COUNTER"), CONTROLLER_BLUEPRINT_ARCHIVE("CONTROLLER_BLUEPRINT_ARCHIVE"),
- DCAE_TOSCA("DCAE_TOSCA"), DCAE_JSON("DCAE_JSON"), DCAE_POLICY("DCAE_POLICY"), DCAE_DOC("DCAE_DOC"), DCAE_EVENT("DCAE_EVENT"),
- DCAE_INVENTORY_POLICY("DCAE_INVENTORY_POLICY"), DCAE_INVENTORY_DOC("DCAE_INVENTORY_DOC"), DCAE_INVENTORY_BLUEPRINT("DCAE_INVENTORY_BLUEPRINT"), DCAE_INVENTORY_EVENT("DCAE_INVENTORY_EVENT"),
- AAI_VF_MODEL("AAI_VF_MODEL"), AAI_VF_MODULE_MODEL("AAI_VF_MODULE_MODEL"), AAI_VF_INSTANCE_MODEL("AAI_VF_INSTANCE_MODEL"),
- PLAN("PLAN"), YANG_MODULE("YANG_MODULE"), ONBOARDED_PACKAGE("ONBOARDED_PACKAGE"), PNF_SW_INFORMATION("PNF_SW_INFORMATION");
-
+ YANG("YANG"),
+ YANG_MODULE("YANG_MODULE"),
+ YANG_XML("YANG_XML");
private final String type;
@@ -85,4 +110,73 @@ public enum ArtifactTypeEnum {
return null;
}
+ /**
+ * Gets the list of mandatory/base SDC artifacts. Those artifacts must be configured.
+ *
+ * @return A set of base artifact types
+ */
+ public static Set<ArtifactTypeEnum> getBaseArtifacts() {
+ final List<ArtifactTypeEnum> artifactTypeEnums = Arrays.asList(
+ AAI_SERVICE_MODEL,
+ AAI_VF_INSTANCE_MODEL,
+ AAI_VF_MODEL,
+ AAI_VF_MODULE_MODEL,
+ ANSIBLE_PLAYBOOK,
+ APPC_CONFIG,
+ BPEL,
+ CHEF,
+ CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT,
+ CONTROLLER_BLUEPRINT_ARCHIVE,
+ DCAE_DOC,
+ DCAE_EVENT,
+ DCAE_INVENTORY_BLUEPRINT,
+ DCAE_INVENTORY_DOC,
+ DCAE_INVENTORY_EVENT,
+ DCAE_INVENTORY_JSON,
+ DCAE_INVENTORY_POLICY,
+ DCAE_INVENTORY_TOSCA,
+ DCAE_JSON,
+ DCAE_POLICY,
+ DCAE_TOSCA,
+ DG_XML,
+ GUIDE,
+ HEAT,
+ HEAT_ARTIFACT,
+ HEAT_ENV,
+ HEAT_NESTED,
+ HEAT_NET,
+ HEAT_VOL,
+ ICON,
+ LIFECYCLE_OPERATIONS,
+ MODEL_INVENTORY_PROFILE,
+ MODEL_QUERY_SPEC,
+ MURANO_PKG,
+ NETWORK_CALL_FLOW,
+ ONBOARDED_PACKAGE,
+ OTHER,
+ PERFORMANCE_COUNTER,
+ PLAN,
+ PM_DICTIONARY,
+ PNF_SW_INFORMATION,
+ PUPPET,
+ SHELL,
+ SHELL_SCRIPT,
+ SNMP_POLL,
+ SNMP_TRAP,
+ TOSCA_CSAR,
+ TOSCA_TEMPLATE,
+ UCPE_LAYER_2_CONFIGURATION,
+ VENDOR_LICENSE,
+ VES_EVENTS,
+ VF_LICENSE,
+ VF_MODULES_METADATA,
+ VNF_CATALOG,
+ WORKFLOW,
+ YANG,
+ YANG_MODULE,
+ YANG_XML
+ );
+ return new HashSet<>(artifactTypeEnums);
+ }
+
}
diff --git a/common-app-api/src/test/java/org/openecomp/sdc/be/config/validation/ArtifactConfigValidatorTest.java b/common-app-api/src/test/java/org/openecomp/sdc/be/config/validation/ArtifactConfigValidatorTest.java
new file mode 100644
index 0000000000..14e679276e
--- /dev/null
+++ b/common-app-api/src/test/java/org/openecomp/sdc/be/config/validation/ArtifactConfigValidatorTest.java
@@ -0,0 +1,76 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix Foundation
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.be.config.validation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.openecomp.sdc.be.config.ArtifactConfiguration;
+import org.openecomp.sdc.be.config.Configuration;
+import org.openecomp.sdc.be.config.exception.MissingBaseArtifactConfigException;
+import org.openecomp.sdc.common.api.ArtifactTypeEnum;
+
+public class ArtifactConfigValidatorTest {
+
+ @Rule
+ public ExpectedException exceptionRule = ExpectedException.none();
+
+ public ArtifactConfigValidator artifactConfigValidator;
+
+ @Test
+ public void testValidate() {
+ final Configuration configuration = new Configuration();
+ //not base artifacts, should validate
+ artifactConfigValidator = new ArtifactConfigValidator(configuration, Collections.emptySet());
+ artifactConfigValidator.validate();
+ final HashSet<ArtifactTypeEnum> baseArtifactTypes = new HashSet<>(
+ Arrays.asList(ArtifactTypeEnum.AAI_SERVICE_MODEL, ArtifactTypeEnum.BPEL));
+ //with base artifacts, but no artifact configured, should validate
+ artifactConfigValidator = new ArtifactConfigValidator(configuration, baseArtifactTypes);
+ artifactConfigValidator.validate();
+
+ final List<ArtifactConfiguration> artifactConfigurationList = new ArrayList<>();
+ final ArtifactConfiguration artifactConfiguration1 = new ArtifactConfiguration();
+ artifactConfiguration1.setType(ArtifactTypeEnum.AAI_SERVICE_MODEL.getType());
+ artifactConfigurationList.add(artifactConfiguration1);
+
+ final ArtifactConfiguration artifactConfiguration2 = new ArtifactConfiguration();
+ artifactConfiguration2.setType(ArtifactTypeEnum.BPEL.getType());
+ artifactConfigurationList.add(artifactConfiguration2);
+
+ configuration.setArtifacts(artifactConfigurationList);
+ //with base artifacts and corresponding configuration, should validate
+ artifactConfigValidator = new ArtifactConfigValidator(configuration, baseArtifactTypes);
+ artifactConfigValidator.validate();
+
+ //with base artifacts and missing one configuration, should not validate
+ configuration.setArtifacts(Collections.singletonList(artifactConfiguration1));
+ exceptionRule.expect(MissingBaseArtifactConfigException.class);
+ exceptionRule.expectMessage(String.format("Missing configuration for Artifact Type(s): %s", ArtifactTypeEnum.BPEL.getType()));
+ artifactConfigValidator = new ArtifactConfigValidator(configuration, baseArtifactTypes);
+ artifactConfigValidator.validate();
+ }
+
+} \ No newline at end of file