aboutsummaryrefslogtreecommitdiffstats
path: root/sdc-distribution-ci/src/main/java/org/onap/test/core
diff options
context:
space:
mode:
Diffstat (limited to 'sdc-distribution-ci/src/main/java/org/onap/test/core')
-rw-r--r--sdc-distribution-ci/src/main/java/org/onap/test/core/config/ArtifactTypeEnum.java110
-rw-r--r--sdc-distribution-ci/src/main/java/org/onap/test/core/config/DistributionClientConfig.java343
-rw-r--r--sdc-distribution-ci/src/main/java/org/onap/test/core/service/ArtifactsDownloader.java86
-rw-r--r--sdc-distribution-ci/src/main/java/org/onap/test/core/service/ArtifactsValidator.java28
-rw-r--r--sdc-distribution-ci/src/main/java/org/onap/test/core/service/ClientInitializer.java53
-rw-r--r--sdc-distribution-ci/src/main/java/org/onap/test/core/service/ClientNotifyCallback.java101
-rw-r--r--sdc-distribution-ci/src/main/java/org/onap/test/core/service/DistributionStatusMessage.java66
-rw-r--r--sdc-distribution-ci/src/main/java/org/onap/test/core/service/ValidationMessage.java25
-rw-r--r--sdc-distribution-ci/src/main/java/org/onap/test/core/service/ValidationResult.java42
9 files changed, 854 insertions, 0 deletions
diff --git a/sdc-distribution-ci/src/main/java/org/onap/test/core/config/ArtifactTypeEnum.java b/sdc-distribution-ci/src/main/java/org/onap/test/core/config/ArtifactTypeEnum.java
new file mode 100644
index 0000000..64923c5
--- /dev/null
+++ b/sdc-distribution-ci/src/main/java/org/onap/test/core/config/ArtifactTypeEnum.java
@@ -0,0 +1,110 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.test.core.config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Enum That Represents possible Artifacts Types.
+ *
+ */
+public enum ArtifactTypeEnum {
+
+ CHEF("CHEF"),
+ PUPPET("PUPPET"),
+ YANG("YANG"),
+ SHELL_SCRIPT("SHELL_SCRIPT"),
+ ICON("ICON"),
+ UNKNOWN("UNKNOWN"),
+ HEAT("HEAT"),
+ DG_XML("DG_XML"),
+ MURANO_PKG("MURANO_PKG"),
+ HEAT_ENV("HEAT_ENV"),
+ YANG_XML("YANG_XML"),
+ HEAT_VOL("HEAT_VOL"),
+ HEAT_NET("HEAT_NET"),
+ OTHER("OTHER"),
+ WORKFLOW("WORKFLOW"),
+ NETWORK_CALL_FLOW("NETWORK_CALL_FLOW"),
+ TOSCA_TEMPLATE("TOSCA_TEMPLATE"),
+ TOSCA_CSAR("TOSCA_CSAR"),
+ VNF_CATALOG("VNF_CATALOG"),
+ VF_LICENSE("VF_LICENSE"),
+ VENDOR_LICENSE("VENDOR_LICENSE"),
+ MODEL_INVENTORY_PROFILE("MODEL_INVENTORY_PROFILE"),
+ MODEL_QUERY_SPEC("MODEL_QUERY_SPEC"),
+ APPC_CONFIG("APPC_CONFIG"),
+ HEAT_NESTED("HEAT_NESTED"),
+ HEAT_ARTIFACT("HEAT_ARTIFACT"),
+ VF_MODULES_METADATA("VF_MODULES_METADATA"),
+
+ // DCAE Artifacts
+ DCAE_TOSCA("DCAE_TOSCA"),
+ DCAE_JSON("DCAE_JSON"),
+ DCAE_POLICY("DCAE_POLICY"),
+ DCAE_DOC("DCAE_DOC"),
+ DCAE_EVENT("DCAE_EVENT"),
+ DCAE_INVENTORY_TOSCA("DCAE_INVENTORY_TOSCA"),
+ DCAE_INVENTORY_JSON("DCAE_INVENTORY_JSON"),
+ 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 Artifacts
+ AAI_SERVICE_MODEL("AAI_SERVICE_MODEL"),
+ AAI_VF_MODEL("AAI_VF_MODEL"),
+ AAI_VF_MODULE_MODEL("AAI_VF_MODULE_MODEL"),
+ AAI_VF_INSTANCE_MODEL("AAI_VF_INSTANCE_MODEL"),
+
+ // MIB artifacts
+ SNMP_POLL("SNMP_POLL"),
+ SNMP_TRAP("SNMP_TRAP"),
+ GUIDE("GUIDE");
+
+ ArtifactTypeEnum(String type) {
+ this.type = type;
+ }
+
+ private String type;
+
+ public String getType() {
+ return type;
+ }
+
+ public static ArtifactTypeEnum findType(final String type) {
+ for (ArtifactTypeEnum ate : ArtifactTypeEnum.values()) {
+ // According to Pavel/Ella
+ if (ate.getType().equalsIgnoreCase(type)) {
+ return ate;
+ }
+ }
+ return null;
+ }
+
+ public static List<String> getAllTypes() {
+ List<String> types = new ArrayList<>();
+ for (ArtifactTypeEnum ate : ArtifactTypeEnum.values()) {
+ types.add(ate.getType());
+ }
+ return types;
+ }
+}
diff --git a/sdc-distribution-ci/src/main/java/org/onap/test/core/config/DistributionClientConfig.java b/sdc-distribution-ci/src/main/java/org/onap/test/core/config/DistributionClientConfig.java
new file mode 100644
index 0000000..be6f6a6
--- /dev/null
+++ b/sdc-distribution-ci/src/main/java/org/onap/test/core/config/DistributionClientConfig.java
@@ -0,0 +1,343 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.test.core.config;
+
+import org.onap.sdc.api.consumer.IConfiguration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class DistributionClientConfig implements IConfiguration {
+
+ public static final String DEFAULT_ASDC_ADDRESS = "localhost:30206";
+ public static final String DEFAULT_COMSUMER_ID = "dcae-openapi-manager";
+ public static final String DEFAULT_CONSUMER_GROUP = "noapp";
+ public static final String DEFAULT_ENVIRONMENT_NAME = "AUTO";
+ public static final String DEFAULT_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U";
+ public static final int DEFAULT_POLLING_INTERVAL = 20;
+ public static final int DEFAULT_POLLING_TIMEOUT = 20;
+ public static final String DEFAULT_USER = "dcae";
+ public static final String DEFAULT_KEY_STORE_PATH = "etc/asdc-client.jks";
+ public static final String DEFAULT_KEY_STORE_PASSWORD = "Aa123456";
+ public static final boolean DEFAULT_ACTIVATE_SERVER_TLS_AUTH = false;
+ public static final boolean DEFAULT_IS_FILTER_IN_EMPTY_RESOURCES = false;
+ public static final boolean DEFAULT_USE_HTTPS_WITH_SDC = false;
+ public static final String DEFAULT_MSG_BUS_ADDRESS = "localhost";
+ private String asdcAddress;
+ private String user;
+ private String password;
+ private int pollingInterval;
+ private int pollingTimeout;
+ private List<String> relevantArtifactTypes;
+ private String consumerGroup;
+ private String environmentName;
+ private String comsumerID;
+ private String keyStorePath;
+ private String keyStorePassword;
+ private boolean activateServerTLSAuth;
+ private boolean isFilterInEmptyResources;
+ private boolean useHttpsWithDmaap;
+ private boolean useHttpsWithSDC;
+ private List<String> msgBusAddress;
+
+ public DistributionClientConfig(IConfiguration other) {
+ this.asdcAddress = other.getAsdcAddress();
+ this.comsumerID = other.getConsumerID();
+ this.consumerGroup = other.getConsumerGroup();
+ this.environmentName = other.getEnvironmentName();
+ this.password = other.getPassword();
+ this.pollingInterval = other.getPollingInterval();
+ this.pollingTimeout = other.getPollingTimeout();
+ this.relevantArtifactTypes = other.getRelevantArtifactTypes();
+ this.user = other.getUser();
+ this.keyStorePath = other.getKeyStorePath();
+ this.keyStorePassword = other.getKeyStorePassword();
+ this.activateServerTLSAuth = other.activateServerTLSAuth();
+ this.isFilterInEmptyResources = other.isFilterInEmptyResources();
+ }
+
+ public DistributionClientConfig() {
+ this.asdcAddress = DEFAULT_ASDC_ADDRESS;
+ this.comsumerID = DEFAULT_COMSUMER_ID;
+ this.consumerGroup = DEFAULT_CONSUMER_GROUP;
+ this.environmentName = DEFAULT_ENVIRONMENT_NAME;
+ this.password = DEFAULT_PASSWORD;
+ this.pollingInterval = DEFAULT_POLLING_INTERVAL;
+ this.pollingTimeout = DEFAULT_POLLING_TIMEOUT;
+ this.relevantArtifactTypes = new ArrayList<>();
+ this.relevantArtifactTypes.add(ArtifactTypeEnum.HEAT.name());
+ this.user = DEFAULT_USER;
+ this.keyStorePath = DEFAULT_KEY_STORE_PATH;
+ this.keyStorePassword = DEFAULT_KEY_STORE_PASSWORD;
+ this.activateServerTLSAuth = DEFAULT_ACTIVATE_SERVER_TLS_AUTH;
+ this.isFilterInEmptyResources = DEFAULT_IS_FILTER_IN_EMPTY_RESOURCES;
+ this.useHttpsWithSDC = DEFAULT_USE_HTTPS_WITH_SDC;
+ msgBusAddress = new ArrayList<>();
+ msgBusAddress.add(DEFAULT_MSG_BUS_ADDRESS);
+ msgBusAddress.add(DEFAULT_MSG_BUS_ADDRESS);
+ msgBusAddress.add(DEFAULT_MSG_BUS_ADDRESS);
+ }
+
+ @Override
+ public String getAsdcAddress() {
+ return asdcAddress;
+ }
+
+ @Override
+ public List<String> getMsgBusAddress() {
+ return msgBusAddress;
+ }
+
+ @Override
+ public String getUser() {
+ return user;
+ }
+
+ @Override
+ public String getPassword() {
+ return password;
+ }
+
+ @Override
+ public int getPollingInterval() {
+ return pollingInterval;
+ }
+
+ @Override
+ public int getPollingTimeout() {
+ return pollingTimeout;
+ }
+
+ @Override
+ public List<String> getRelevantArtifactTypes() {
+ return relevantArtifactTypes;
+ }
+
+ @Override
+ public String getConsumerGroup() {
+ return consumerGroup;
+ }
+
+ @Override
+ public String getEnvironmentName() {
+ return environmentName;
+ }
+
+ @Override
+ public String getConsumerID() {
+ return comsumerID;
+ }
+
+ @Override
+ public String getKeyStorePath() {
+ return keyStorePath;
+ }
+
+ @Override
+ public String getKeyStorePassword() {
+ return keyStorePassword;
+ }
+
+ public String getComsumerID() {
+ return comsumerID;
+ }
+
+ public void setComsumerID(String comsumerID) {
+ this.comsumerID = comsumerID;
+ }
+
+ public void setAsdcAddress(String asdcAddress) {
+ this.asdcAddress = asdcAddress;
+ }
+
+ public void setUser(String user) {
+ this.user = user;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public void setPollingInterval(int pollingInterval) {
+ this.pollingInterval = pollingInterval;
+ }
+
+ public void setPollingTimeout(int pollingTimeout) {
+ this.pollingTimeout = pollingTimeout;
+ }
+
+ public void setRelevantArtifactTypes(List<String> relevantArtifactTypes) {
+ this.relevantArtifactTypes = relevantArtifactTypes;
+ }
+
+ public void setConsumerGroup(String consumerGroup) {
+ this.consumerGroup = consumerGroup;
+ }
+
+ public void setEnvironmentName(String environmentName) {
+ this.environmentName = environmentName;
+ }
+
+ public void setKeyStorePath(String keyStorePath) {
+ this.keyStorePath = keyStorePath;
+ }
+
+ public void setKeyStorePassword(String keyStorePassword) {
+ this.keyStorePassword = keyStorePassword;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((asdcAddress == null) ? 0 : asdcAddress.hashCode());
+ result = prime * result + ((comsumerID == null) ? 0 : comsumerID.hashCode());
+ result = prime * result + ((consumerGroup == null) ? 0 : consumerGroup.hashCode());
+ result = prime * result + ((environmentName == null) ? 0 : environmentName.hashCode());
+ result = prime * result + ((password == null) ? 0 : password.hashCode());
+ result = prime * result + pollingInterval;
+ result = prime * result + pollingTimeout;
+ result = prime * result + ((relevantArtifactTypes == null) ? 0 : relevantArtifactTypes.hashCode());
+ result = prime * result + ((user == null) ? 0 : user.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean activateServerTLSAuth() {
+
+ return activateServerTLSAuth;
+ }
+
+ public void setactivateServerTLSAuth(boolean activateServerTLSAuth) {
+ this.activateServerTLSAuth = activateServerTLSAuth;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ DistributionClientConfig other = (DistributionClientConfig) obj;
+ if (asdcAddress == null) {
+ if (other.asdcAddress != null) {
+ return false;
+ }
+ } else if (!asdcAddress.equals(other.asdcAddress)) {
+ return false;
+ }
+ if (comsumerID == null) {
+ if (other.comsumerID != null) {
+ return false;
+ }
+ } else if (!comsumerID.equals(other.comsumerID)) {
+ return false;
+ }
+ if (consumerGroup == null) {
+ if (other.consumerGroup != null) {
+ return false;
+ }
+ } else if (!consumerGroup.equals(other.consumerGroup)) {
+ return false;
+ }
+ if (environmentName == null) {
+ if (other.environmentName != null) {
+ return false;
+ }
+ } else if (!environmentName.equals(other.environmentName)) {
+ return false;
+ }
+ if (password == null) {
+ if (other.password != null) {
+ return false;
+ }
+ } else if (!password.equals(other.password)) {
+ return false;
+ }
+ if (pollingInterval != other.pollingInterval) {
+ return false;
+ }
+ if (pollingTimeout != other.pollingTimeout) {
+ return false;
+ }
+ if (relevantArtifactTypes == null) {
+ if (other.relevantArtifactTypes != null) {
+ return false;
+ }
+ } else if (!relevantArtifactTypes.equals(other.relevantArtifactTypes)) {
+ return false;
+ }
+ if (user == null) {
+ if (other.user != null) {
+ return false;
+ }
+ } else if (!user.equals(other.user)) {
+ return false;
+ }
+ if (keyStorePath == null) {
+ if (other.keyStorePath != null) {
+ return false;
+ }
+ } else if (!keyStorePath.equals(other.keyStorePath)) {
+ return false;
+ }
+ if (keyStorePassword == null) {
+ return other.keyStorePassword == null;
+ } else {
+ return keyStorePassword.equals(other.keyStorePassword);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "TestConfiguration [asdcAddress=" + asdcAddress + ", user=" + user + ", password=" + password + ", pollingInterval=" + pollingInterval + ", pollingTimeout=" + pollingTimeout + ", relevantArtifactTypes=" + relevantArtifactTypes
+ + ", consumerGroup=" + consumerGroup + ", environmentName=" + environmentName + ", comsumerID=" + comsumerID + "]";
+ }
+
+ @Override
+ public boolean isFilterInEmptyResources() {
+ return isFilterInEmptyResources;
+ }
+
+
+ public void setFilterInEmptyResources(boolean isFilterInEmptyResources) {
+ this.isFilterInEmptyResources = isFilterInEmptyResources;
+ }
+
+ @Override
+ public Boolean isUseHttpsWithDmaap() {
+ return this.useHttpsWithDmaap;
+ }
+
+
+ public Boolean isUseHttpsWithSDC() {
+ return this.useHttpsWithSDC;
+ }
+
+ public void setUseHttpsWithSDC(Boolean useHttpsWithSDC) {
+ this.useHttpsWithSDC = useHttpsWithSDC;
+ }
+}
diff --git a/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ArtifactsDownloader.java b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ArtifactsDownloader.java
new file mode 100644
index 0000000..1e0623d
--- /dev/null
+++ b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ArtifactsDownloader.java
@@ -0,0 +1,86 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.test.core.service;
+
+import org.apache.commons.io.FileUtils;
+import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.sdc.api.notification.INotificationData;
+import org.onap.sdc.api.notification.IResourceInstance;
+import org.onap.sdc.http.SdcConnectorClient;
+import org.onap.sdc.impl.DistributionClientDownloadResultImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+
+public class ArtifactsDownloader {
+
+ private static final Logger log = LoggerFactory.getLogger(ArtifactsDownloader.class);
+
+ private final String artifactsDownloadPath;
+ private final SdcConnectorClient sdcConnectorClient;
+
+ public ArtifactsDownloader(String artifactsDownloadPath,
+ SdcConnectorClient sdcConnectorClient) {
+ this.artifactsDownloadPath = artifactsDownloadPath;
+ this.sdcConnectorClient = sdcConnectorClient;
+ }
+
+ public List<DistributionClientDownloadResultImpl> pullArtifacts(INotificationData service) {
+ log.info("Downloading artifacts...");
+ return service.getResources().stream()
+ .flatMap(this::getArtifactsStream)
+ .map(sdcConnectorClient::downloadArtifact)
+ .collect(Collectors.toList());
+ }
+
+ public void saveArtifacts(List<DistributionClientDownloadResultImpl> artifacts, String serviceName) {
+ artifacts.forEach(artifact -> saveArtifact(artifact, serviceName));
+ }
+
+ public String parseArtifactName(DistributionClientDownloadResultImpl artifact) {
+ return artifact.getArtifactName().split("\"")[1];
+ }
+
+ private String getArtifactPath(String serviceName, String artifactName) {
+ return String.format("%s/%s/%s", artifactsDownloadPath, serviceName, artifactName);
+ }
+
+ private Stream<IArtifactInfo> getArtifactsStream(IResourceInstance resourceInstance) {
+ return resourceInstance.getArtifacts().stream();
+ }
+
+ private void saveArtifact(DistributionClientDownloadResultImpl artifact, String serviceName) {
+ String artifactName = parseArtifactName(artifact);
+ String path = getArtifactPath(serviceName, artifactName);
+
+ try {
+ File file = new File(path);
+ FileUtils.writeByteArrayToFile(file, artifact.getArtifactPayload());
+ } catch (IOException e) {
+ log.error("Couldn't save an artifact: " + path, e);
+ }
+ }
+}
diff --git a/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ArtifactsValidator.java b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ArtifactsValidator.java
new file mode 100644
index 0000000..2972777
--- /dev/null
+++ b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ArtifactsValidator.java
@@ -0,0 +1,28 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.test.core.service;
+
+import org.onap.sdc.api.notification.INotificationData;
+
+import java.util.List;
+
+public interface ArtifactsValidator {
+ List<ValidationResult> validate(INotificationData service);
+}
diff --git a/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ClientInitializer.java b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ClientInitializer.java
new file mode 100644
index 0000000..64e6a6f
--- /dev/null
+++ b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ClientInitializer.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.test.core.service;
+
+import org.onap.sdc.api.results.IDistributionClientResult;
+import org.onap.sdc.impl.DistributionClientImpl;
+import org.onap.test.core.config.DistributionClientConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ClientInitializer {
+
+ Logger log = LoggerFactory.getLogger(ClientInitializer.class);
+ public static final String SEPARATOR = "========================================";
+ private final DistributionClientConfig clientConfig;
+ private final ClientNotifyCallback callback;
+ private final DistributionClientImpl client;
+
+
+ public ClientInitializer(DistributionClientConfig clientConfig, ClientNotifyCallback callback, DistributionClientImpl client) {
+ this.clientConfig = clientConfig;
+ this.callback = callback;
+ this.client = client;
+ }
+
+ public void initialize() {
+ IDistributionClientResult initResult = client.init(clientConfig, callback);
+ log.info(initResult.getDistributionMessageResult());
+ log.info(SEPARATOR);
+ log.info(SEPARATOR);
+ IDistributionClientResult startResult = client.start();
+ log.info(startResult.getDistributionMessageResult());
+ log.info(SEPARATOR);
+ }
+
+}
diff --git a/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ClientNotifyCallback.java b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ClientNotifyCallback.java
new file mode 100644
index 0000000..7737457
--- /dev/null
+++ b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ClientNotifyCallback.java
@@ -0,0 +1,101 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.test.core.service;
+
+import org.onap.sdc.api.consumer.IDistributionStatusMessage;
+import org.onap.sdc.api.consumer.INotificationCallback;
+import org.onap.sdc.api.notification.INotificationData;
+import org.onap.sdc.api.notification.IResourceInstance;
+import org.onap.sdc.http.HttpAsdcClient;
+import org.onap.sdc.http.SdcConnectorClient;
+import org.onap.sdc.impl.DistributionClientImpl;
+import org.onap.sdc.utils.DistributionStatusEnum;
+import org.onap.test.core.config.DistributionClientConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.Collection;
+import java.util.List;
+
+public class ClientNotifyCallback implements INotificationCallback {
+
+ private static final Logger log = LoggerFactory.getLogger(ClientNotifyCallback.class);
+
+ private final List<ArtifactsValidator> validators;
+ private final DistributionClientImpl distributionClient;
+ DistributionClientConfig config = new DistributionClientConfig();
+ HttpAsdcClient asdcClient = new HttpAsdcClient(config);
+ SdcConnectorClient sdcConnectorClient = new SdcConnectorClient(config,asdcClient);
+ ArtifactsDownloader artifactsDownloader = new ArtifactsDownloader("/app/path", sdcConnectorClient);
+
+ public ClientNotifyCallback(List<ArtifactsValidator> validators, DistributionClientImpl distributionClient) {
+ this.validators = validators;
+ this.distributionClient = distributionClient;
+ }
+
+ @Override
+ public void activateCallback(INotificationData inotificationData) {
+ logServiceInfo(inotificationData);
+ artifactsDownloader.pullArtifacts(inotificationData);
+ }
+
+ private void logServiceInfo(INotificationData service) {
+ log.info("=================================================");
+ log.info("Distrubuted service information");
+ log.info("Service UUID: {}", service.getServiceUUID());
+ log.info("Service name: {}", service.getServiceName());
+ List<IResourceInstance> resources = service.getResources();
+ log.info("Service resources:");
+ resources.forEach(resource -> {
+ log.info(" - Resource: {}", resource.getResourceName());
+ log.info(" Artifacts:");
+ resource.getArtifacts().forEach(artifact -> log.info(" - Name: {}", artifact.getArtifactName()));
+ });
+ log.info("=================================================");
+ }
+
+ private void validate(INotificationData service) {
+ validators.stream()
+ .map(validator -> validator.validate(service))
+ .flatMap(Collection::stream)
+ .forEach(validationResult -> sendNotificationResponse(validationResult, service.getDistributionID()));
+ }
+
+ private void sendNotificationResponse(ValidationResult validationResult, String distributionId) {
+ if (!validationResult.getMessage().equals(ValidationMessage.VALID)) {
+ log.warn("Artifact {} is invalid.", validationResult.getArtifact().getArtifactName());
+ log.warn("Validation message: {}", validationResult.getMessage());
+
+ IDistributionStatusMessage message = getDistributionStatusMessage(validationResult, distributionId);
+ distributionClient.sendDeploymentStatus(message, "Schema reference is invalid.");
+ }
+ }
+
+ private DistributionStatusMessage getDistributionStatusMessage(ValidationResult validationResult, String distributionId) {
+ return new DistributionStatusMessage(
+ validationResult.getArtifact().getArtifactURL(),
+ distributionId,
+ distributionClient.getConfiguration().getConsumerID(),
+ LocalDateTime.now().toEpochSecond(ZoneOffset.UTC),
+ DistributionStatusEnum.DISTRIBUTION_COMPLETE_ERROR);
+ }
+}
diff --git a/sdc-distribution-ci/src/main/java/org/onap/test/core/service/DistributionStatusMessage.java b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/DistributionStatusMessage.java
new file mode 100644
index 0000000..42d54a4
--- /dev/null
+++ b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/DistributionStatusMessage.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.test.core.service;
+
+import org.onap.sdc.api.consumer.IDistributionStatusMessage;
+import org.onap.sdc.utils.DistributionStatusEnum;
+
+
+public class DistributionStatusMessage implements IDistributionStatusMessage {
+
+ private String artifactUrl;
+ private String distributionId;
+ private String consumerId;
+ private long timestamp;
+ private DistributionStatusEnum status;
+
+ public DistributionStatusMessage(String artifactUrl, String distributionId, String consumerId, long timestamp, DistributionStatusEnum status) {
+ this.artifactUrl = artifactUrl;
+ this.distributionId = distributionId;
+ this.consumerId = consumerId;
+ this.timestamp = timestamp;
+ this.status = status;
+ }
+
+ @Override
+ public String getArtifactURL() {
+ return artifactUrl;
+ }
+
+ @Override
+ public String getDistributionID() {
+ return distributionId;
+ }
+
+ @Override
+ public String getConsumerID() {
+ return consumerId;
+ }
+
+ @Override
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ @Override
+ public DistributionStatusEnum getStatus() {
+ return status;
+ }
+}
diff --git a/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ValidationMessage.java b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ValidationMessage.java
new file mode 100644
index 0000000..107d814
--- /dev/null
+++ b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ValidationMessage.java
@@ -0,0 +1,25 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.test.core.service;
+
+public enum ValidationMessage {
+ VALID,
+ SCHEMA_REFERENCE_INVALID
+}
diff --git a/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ValidationResult.java b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ValidationResult.java
new file mode 100644
index 0000000..57c6fce
--- /dev/null
+++ b/sdc-distribution-ci/src/main/java/org/onap/test/core/service/ValidationResult.java
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.test.core.service;
+
+
+import org.onap.sdc.api.notification.IArtifactInfo;
+
+public class ValidationResult {
+ private IArtifactInfo artifact;
+ private ValidationMessage message;
+
+
+ public ValidationResult(IArtifactInfo artifact, ValidationMessage message) {
+ this.artifact = artifact;
+ this.message = message;
+ }
+
+ public IArtifactInfo getArtifact() {
+ return artifact;
+ }
+
+ public ValidationMessage getMessage() {
+ return message;
+ }
+}