Create IT test for downloading artifacts 82/116582/4
authorEdyta Krukowska <edyta.krukowska@nokia.com>
Tue, 5 Jan 2021 11:27:02 +0000 (12:27 +0100)
committerEdyta Krukowska <edyta.krukowska@nokia.com>
Thu, 7 Jan 2021 07:26:09 +0000 (08:26 +0100)
Issue-ID: SDC-3417
Signed-off-by: Edyta Krukowska <edyta.krukowska@nokia.com>
Change-Id: I8bd24c34902a2d59d0d0dd1b0c1e8c08352a4cc2

sdc-distribution-ci/pom.xml
sdc-distribution-ci/src/main/java/org/onap/test/core/config/DistributionClientConfig.java
sdc-distribution-ci/src/main/java/org/onap/test/core/service/ClientNotifyCallback.java
sdc-distribution-ci/src/test/java/org/onap/test/core/service/ClientInitializerTest.java
sdc-distribution-ci/src/test/resources/artifacts.json [new file with mode: 0644]
sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java

index b1dfa86..9af54ca 100644 (file)
@@ -23,6 +23,8 @@
         <junit-jupiter-engine.version>5.4.2</junit-jupiter-engine.version>
         <junit-jupiter-params.version>5.4.2</junit-jupiter-params.version>
         <junit-jupiter-api.version>5.4.2</junit-jupiter-api.version>
+        <awaitility-proxy.version>3.0.0</awaitility-proxy.version>
+        <awaitility.version>3.0.0</awaitility.version>
     </properties>
 
 
             <version>${mockito-junit-jupiter.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <version>${awaitility.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility-proxy</artifactId>
+            <version>${awaitility-proxy.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
index be6f6a6..8a02801 100644 (file)
@@ -38,7 +38,7 @@ public class DistributionClientConfig implements IConfiguration {
     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_IS_FILTER_IN_EMPTY_RESOURCES = true;
     public static final boolean DEFAULT_USE_HTTPS_WITH_SDC = false;
     public static final String DEFAULT_MSG_BUS_ADDRESS = "localhost";
     private String asdcAddress;
index 7737457..4dfe388 100644 (file)
@@ -25,6 +25,7 @@ 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.DistributionClientDownloadResultImpl;
 import org.onap.sdc.impl.DistributionClientImpl;
 import org.onap.sdc.utils.DistributionStatusEnum;
 import org.onap.test.core.config.DistributionClientConfig;
@@ -33,6 +34,7 @@ import org.slf4j.LoggerFactory;
 
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
@@ -42,11 +44,16 @@ public class ClientNotifyCallback implements INotificationCallback {
 
     private final List<ArtifactsValidator> validators;
     private final DistributionClientImpl distributionClient;
+    private final List<DistributionClientDownloadResultImpl> pulledArtifacts = new ArrayList<>();
     DistributionClientConfig config = new DistributionClientConfig();
     HttpAsdcClient asdcClient = new HttpAsdcClient(config);
-    SdcConnectorClient sdcConnectorClient = new SdcConnectorClient(config,asdcClient);
+    SdcConnectorClient sdcConnectorClient = new SdcConnectorClient(config, asdcClient);
     ArtifactsDownloader artifactsDownloader = new ArtifactsDownloader("/app/path", sdcConnectorClient);
 
+    public List<DistributionClientDownloadResultImpl> getPulledArtifacts() {
+        return List.copyOf(pulledArtifacts);
+    }
+
     public ClientNotifyCallback(List<ArtifactsValidator> validators, DistributionClientImpl distributionClient) {
         this.validators = validators;
         this.distributionClient = distributionClient;
@@ -55,7 +62,7 @@ public class ClientNotifyCallback implements INotificationCallback {
     @Override
     public void activateCallback(INotificationData inotificationData) {
         logServiceInfo(inotificationData);
-        artifactsDownloader.pullArtifacts(inotificationData);
+        pulledArtifacts.addAll(artifactsDownloader.pullArtifacts(inotificationData));
     }
 
     private void logServiceInfo(INotificationData service) {
index 40278b1..797009d 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.onap.test.core.service;
 
+import org.awaitility.Duration;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -26,17 +28,26 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.jupiter.MockitoExtension;
+import org.onap.sdc.impl.DistributionClientDownloadResultImpl;
 import org.onap.sdc.impl.DistributionClientImpl;
 import org.onap.test.core.config.DistributionClientConfig;
 import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.junit.jupiter.Container;
 import org.testcontainers.junit.jupiter.Testcontainers;
 
+import java.io.IOException;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.awaitility.Awaitility.await;
 import static org.mockito.Mockito.verify;
 
 @Testcontainers
@@ -47,12 +58,16 @@ class ClientInitializerTest {
     private static final int SUCCESSFUL_UNREGISTER_MSG_INDEX = 3;
     private static final int SUCCESSFUL_INIT_MSG_INDEX = 0;
     private static final int SUCCESSFUL_DIST_MSG_INDEX = 3;
+    private static final int EXPECTED_HEAT_ARTIFACTS = 4;
     private ClientInitializer clientInitializer;
+    private ClientNotifyCallback clientNotifyCallback;
+    private static final Logger testLog = LoggerFactory.getLogger(ClientInitializerTest.class);
 
     @Container
     public GenericContainer mockDmaap = new GenericContainer("registry.gitlab.com/orange-opensource/lfn/onap/mock_servers/mock-dmaap:latest")
             .withNetworkMode("host");
 
+
     @Container
     public GenericContainer mockSdc = new GenericContainer("registry.gitlab.com/orange-opensource/lfn/onap/mock_servers/mock-sdc:latest")
             .withNetworkMode("host");
@@ -62,13 +77,14 @@ class ClientInitializerTest {
     @Mock
     Logger distClientLog;
 
+
     @BeforeEach
     public void initializeClient() {
         DistributionClientConfig clientConfig = new DistributionClientConfig();
         List<ArtifactsValidator> validators = new ArrayList<>();
         DistributionClientImpl client = new DistributionClientImpl(distClientLog);
-        ClientNotifyCallback callback = new ClientNotifyCallback(validators, client);
-        clientInitializer = new ClientInitializer(clientConfig, callback, client);
+        clientNotifyCallback = new ClientNotifyCallback(validators, client);
+        clientInitializer = new ClientInitializer(clientConfig, clientNotifyCallback, client);
     }
 
     @Test
@@ -98,4 +114,28 @@ class ClientInitializerTest {
         assertThat(allValues.get(SUCCESSFUL_STOP_MSG_INDEX)).isEqualTo("stop DistributionClient");
         assertThat(allValues.get(SUCCESSFUL_UNREGISTER_MSG_INDEX)).isEqualTo("client unregistered from topics successfully");
     }
-}
\ No newline at end of file
+
+    @Test
+    public void shouldDownloadArtifactsWithArtifactTypeHeat() throws IOException, InterruptedException {
+
+        //given
+        HttpRequest request = HttpRequest.newBuilder()
+                .uri(URI.create("http://localhost:3904/events/testName/add"))
+                .POST(HttpRequest.BodyPublishers.ofFile(Paths.get("src/test/resources/artifacts.json")))
+                .build();
+        HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
+        //when
+        clientInitializer.initialize();
+        waitForArtifacts();
+        List<DistributionClientDownloadResultImpl> calls = clientNotifyCallback.getPulledArtifacts();
+        //then
+        Assertions.assertEquals(EXPECTED_HEAT_ARTIFACTS, calls.size());
+    }
+
+    private void waitForArtifacts() {
+        testLog.info("Waiting for artifacts");
+        await()
+                .atMost(Duration.ONE_MINUTE)
+                .until(() -> !clientNotifyCallback.getPulledArtifacts().isEmpty());
+    }
+}
diff --git a/sdc-distribution-ci/src/test/resources/artifacts.json b/sdc-distribution-ci/src/test/resources/artifacts.json
new file mode 100644 (file)
index 0000000..4d4f45d
--- /dev/null
@@ -0,0 +1,170 @@
+{
+  "distributionID": "bf3df55e-cdc6-4bf7-b3b3-0fdccab91106",
+  "serviceName": "demoVLB_CDS",
+  "serviceVersion": "1.0",
+  "serviceUUID": "d2192fd5-6ba4-40d2-9078-e3642d9175ee",
+  "serviceDescription": "catalog service description",
+  "serviceInvariantUUID": "6f355230-c44b-4aca-873a-41c250b8137c",
+  "resources": [
+    {
+      "resourceInstanceName": "vLB_CDS 68b6da59-68e4 0",
+      "resourceName": "vLB_CDS 68b6da59-68e4",
+      "resourceVersion": "1.0",
+      "resoucreType": "VF",
+      "resourceUUID": "acdcb4be-7ec8-4d1f-a6ab-c225e35ee7ed",
+      "resourceInvariantUUID": "d9309314-be70-46d6-9ac3-fefb5d74fd3a",
+      "resourceCustomizationUUID": "f163654b-f172-4828-af92-04fc60eabc28",
+      "category": "Generic",
+      "subcategory": "Abstract",
+      "artifacts": [
+        {
+          "artifactName": "k8s-tca-clamp-policy-05082019.yaml",
+          "artifactType": "DCAE_INVENTORY_BLUEPRINT",
+          "artifactURL": "/sdc/v1/catalog/services/DemovlbCds/1.0/resourceInstances/vlb_cds68b6da5968e40/artifacts/k8s-tca-clamp-policy-05082019.yaml",
+          "artifactChecksum": "ZTIyYzkyYzgyYzBkMjc0YWJhNTIzOGI4YWE1Njg3YzA=",
+          "artifactDescription": "k8s-tca-clamp-policy-05082019.yaml",
+          "artifactTimeout": 0,
+          "artifactUUID": "560f355f-00e7-413c-bf56-025c999ae983",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "vf-license-model.yaml",
+          "artifactType": "VF_LICENSE",
+          "artifactURL": "/sdc/v1/catalog/services/DemovlbCds/1.0/resourceInstances/vlb_cds68b6da5968e40/artifacts/vf-license-model.xml",
+          "artifactChecksum": "YTc3NjEwZThhMjFjMjlmNDQ0M2FmYzExZDQ0MjQ0Yzc=",
+          "artifactDescription": "VF license file",
+          "artifactTimeout": 0,
+          "artifactUUID": "f1b25b41-334f-40db-afdb-dea1da827316",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "base_template.env",
+          "artifactType": "HEAT_ENV",
+          "artifactURL": "/sdc/v1/catalog/services/DemovlbCds/1.0/resourceInstances/vlb_cds68b6da5968e40/artifacts/base_template.env",
+          "artifactChecksum": "NTYzNDIzN2I5MTg1M2Y1MjgyNDdlMzc2NjNiNDVmZWM=",
+          "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+          "artifactTimeout": 0,
+          "artifactUUID": "2cf083a6-aae1-46b4-89c8-312c6d6abc29",
+          "artifactVersion": "3",
+          "generatedFromUUID": "fdfced54-8425-4c51-a913-ab9ac126cc20"
+        },
+        {
+          "artifactName": "vlb_cds68b6da5968e40_modules.json",
+          "artifactType": "VF_MODULES_METADATA",
+          "artifactURL": "/sdc/v1/catalog/services/DemovlbCds/1.0/resourceInstances/vlb_cds68b6da5968e40/artifacts/vlb_cds68b6da5968e40_modules.json",
+          "artifactChecksum": "YWUzODIzMjczMDAzMGNjZDlhYWIzM2FmNjE3MjY0NTk=",
+          "artifactDescription": "Auto-generated VF Modules information artifact",
+          "artifactTimeout": 30,
+          "artifactUUID": "15f20c8e-c644-4e8f-8a4b-099761e9f05d",
+          "artifactVersion": "2"
+        },
+        {
+          "artifactName": "vpkg.yaml",
+          "artifactType": "HEAT",
+          "artifactURL": "/",
+          "artifactChecksum": "MTFkMDYzMGMyZjUyM2Y2ZjA0ZGRlOWFjZmI4ODMyZmQ=",
+          "artifactDescription": "created from csar",
+          "artifactTimeout": 30,
+          "artifactUUID": "eb0c1b54-a71a-43f2-9c8c-95040365d657",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "vdns.env",
+          "artifactType": "HEAT_ENV",
+          "artifactURL": "/sdc/v1/catalog/services/DemovlbCds/1.0/resourceInstances/vlb_cds68b6da5968e40/artifacts/vdns.env",
+          "artifactChecksum": "YjA2OGFiN2RiYjJkZGI2YzgwNDdhNmZiNzc0MmIwODQ=",
+          "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+          "artifactTimeout": 0,
+          "artifactUUID": "1c81a0e7-06f6-49af-ae95-b6ad24e3cad9",
+          "artifactVersion": "3",
+          "generatedFromUUID": "95e8b9d6-3456-469b-be14-0904cf0de619"
+        },
+        {
+          "artifactName": "vendor-license-model.xml",
+          "artifactType": "VENDOR_LICENSE",
+          "artifactURL": "/sdc/v1/catalog/services/DemovlbCds/1.0/resourceInstances/vlb_cds68b6da5968e40/artifacts/vendor-license-model.xml",
+          "artifactChecksum": "ZTQ1N2MxNmZjMmIzMjlhMWRjNGM5MDNjMzkyYzdjMGM=",
+          "artifactDescription": " Vendor license file",
+          "artifactTimeout": 0,
+          "artifactUUID": "dee67b01-bf96-44d6-8565-e6a0cbe98528",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "vlb.yaml",
+          "artifactType": "HEAT",
+          "artifactURL": "/",
+          "artifactChecksum": "MDk5ZGUwN2M1NjAzMjY2Yjc1OGM5MGQzYjJkNGQzNTM=",
+          "artifactDescription": "created from csar",
+          "artifactTimeout": 30,
+          "artifactUUID": "6d6bf6d7-e76c-4488-85ad-a7dcc5867d8f",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "vlb.env",
+          "artifactType": "HEAT_ENV",
+          "artifactURL": "/sdc/v1/catalog/services/DemovlbCds/1.0/resourceInstances/vlb_cds68b6da5968e40/artifacts/vlb.env",
+          "artifactChecksum": "MzY2MGE3NGNlMjU2ZDk4OTNkNjI0MTAwZjY0ZGE0Y2U=",
+          "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+          "artifactTimeout": 0,
+          "artifactUUID": "0fe5eb8f-180c-4b50-b73d-ae404141fad1",
+          "artifactVersion": "3",
+          "generatedFromUUID": "6d6bf6d7-e76c-4488-85ad-a7dcc5867d8f"
+        },
+        {
+          "artifactName": "vpkg.env",
+          "artifactType": "HEAT_ENV",
+          "artifactURL": "/sdc/v1/catalog/services/DemovlbCds/1.0/resourceInstances/vlb_cds68b6da5968e40/artifacts/vpkg.env",
+          "artifactChecksum": "NGRkZTVjMWRiYTkyYjM3MmY1MmIzNjAzYTRlMjdmN2I=",
+          "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+          "artifactTimeout": 0,
+          "artifactUUID": "25d6197f-b465-4ca5-a22c-5ae261c79313",
+          "artifactVersion": "3",
+          "generatedFromUUID": "eb0c1b54-a71a-43f2-9c8c-95040365d657"
+        },
+        {
+          "artifactName": "vdns.yaml",
+          "artifactType": "HEAT",
+          "artifactURL": "/",
+          "artifactChecksum": "YzM5M2M1NjY2ZWYyOGU2MTgyNmIwYmFhZjUzMzdiYzM=",
+          "artifactDescription": "created from csar",
+          "artifactTimeout": 30,
+          "artifactUUID": "95e8b9d6-3456-469b-be14-0904cf0de619",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "base_template.yaml",
+          "artifactType": "HEAT",
+          "artifactURL": "/",
+          "artifactChecksum": "MjllZGZkNTU3MTljOTVhNGMwY2FiZDk3MmFmZjAwNmE=",
+          "artifactDescription": "created from csar",
+          "artifactTimeout": 30,
+          "artifactUUID": "fdfced54-8425-4c51-a913-ab9ac126cc20",
+          "artifactVersion": "1"
+        }
+      ]
+    }
+  ],
+  "serviceArtifacts": [
+    {
+      "artifactName": "service-DemovlbCds-template.yml",
+      "artifactType": "TOSCA_TEMPLATE",
+      "artifactURL": "/sdc/v1/catalog/services/DemovlbCds/1.0/artifacts/service-DemovlbCds-template.yml",
+      "artifactChecksum": "YWJiYWQ0MjUxMjk5ZjNmYjk2ODVhZjk3ZDI1ZmViNjk=",
+      "artifactDescription": "TOSCA representation of the asset",
+      "artifactTimeout": 0,
+      "artifactUUID": "ceeb88f4-cd35-437d-8a15-7342a18803bd",
+      "artifactVersion": "1"
+    },
+    {
+      "artifactName": "service-DemovlbCds-csar.csar",
+      "artifactType": "TOSCA_CSAR",
+      "artifactURL": "/sdc/v1/catalog/services/DemovlbCds/1.0/artifacts/service-DemovlbCds-csar.csar",
+      "artifactChecksum": "ZmI5NzQ1MWViZGFkMjRjZWEwNTQzY2U0OWQwYjlmYjQ=",
+      "artifactDescription": "TOSCA definition package of the asset",
+      "artifactTimeout": 0,
+      "artifactUUID": "f6f907f1-3f45-4fb4-8cbe-15a4c6ee16db",
+      "artifactVersion": "1"
+    }
+  ],
+  "workloadContext": "Production"
+}
\ No newline at end of file
index b719432..c372642 100644 (file)
@@ -186,7 +186,6 @@ public class DistributionClientImpl implements IDistributionClient {
             List<String> relevantArtifactTypes = configuration.getRelevantArtifactTypes();
             // Remove nulls from list - workaround for how configuration is built
             relevantArtifactTypes.removeAll(Collections.singleton(null));
-
             NotificationConsumer consumer = new NotificationConsumer(cambriaNotificationConsumer, callback, relevantArtifactTypes, this);
             executorPool = Executors.newScheduledThreadPool(DistributionClientConstants.POOL_SIZE);
             executorPool.scheduleAtFixedRate(consumer, 0, configuration.getPollingInterval(), TimeUnit.SECONDS);