aboutsummaryrefslogtreecommitdiffstats
path: root/sdc-distribution-ci/src/main/java/org/onap/test/core/service
diff options
context:
space:
mode:
Diffstat (limited to 'sdc-distribution-ci/src/main/java/org/onap/test/core/service')
-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
7 files changed, 401 insertions, 0 deletions
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;
+ }
+}