Add validation for asd descriptor and invariant id
[nonrtric/plt/rappmanager.git] / rapp-manager-models / src / test / java / com / oransc / rappmanager / models / csar / RappCsarConfigurationHandlerTest.java
index b4c00a7..9f1893b 100755 (executable)
@@ -1,6 +1,7 @@
 /*-
  * ============LICENSE_START======================================================================
  * Copyright (C) 2023 Nordix Foundation. All rights reserved.
+ * Copyright (C) 2024 OpenInfra Foundation Europe. 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.
@@ -22,57 +23,48 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.JsonSyntaxException;
 import com.oransc.rappmanager.models.rapp.Rapp;
 import com.oransc.rappmanager.models.rapp.RappResources;
 import com.oransc.rappmanager.models.rappinstance.RappACMInstance;
+import com.oransc.rappmanager.models.rappinstance.RappDMEInstance;
 import com.oransc.rappmanager.models.rappinstance.RappSMEInstance;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.util.List;
+import java.util.Set;
 import java.util.UUID;
-import org.apache.http.entity.ContentType;
+import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.boot.test.mock.mockito.SpyBean;
 import org.springframework.test.context.ContextConfiguration;
-import org.springframework.web.multipart.MultipartFile;
 
 @SpringBootTest
-@ContextConfiguration(classes = RappCsarConfigurationHandler.class)
+@ContextConfiguration(classes = {ObjectMapper.class, RappCsarConfigurationHandler.class})
 class RappCsarConfigurationHandlerTest {
 
-    @Autowired
+    @SpyBean
     RappCsarConfigurationHandler rappCsarConfigurationHandler;
 
     String validCsarFileLocation = "src/test/resources/";
 
-
     private final String validRappFile = "valid-rapp-package.csar";
 
-    private final String invalidRappFile = "invalid-rapp-package.csar";
-
-    @Test
-    void testCsarPackageValidationSuccess() throws IOException {
-        String rappCsarPath = validCsarFileLocation + File.separator + validRappFile;
-        MultipartFile multipartFile =
-                new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(),
-                        new FileInputStream(rappCsarPath));
-        assertEquals(Boolean.TRUE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
-    }
+    private final String invalidRappNoAsdFile = "invalid-rapp-package-no-asd-yaml.csar";
 
-    @Test
-    void testCsarPackageValidationFailure() throws IOException {
-        String rappCsarPath = validCsarFileLocation + File.separator + invalidRappFile;
-        MultipartFile multipartFile =
-                new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(),
-                        new FileInputStream(rappCsarPath));
-        assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
-    }
+    private final String invalidRappEmptyAsdFile = "invalid-rapp-package-empty-asd-yaml.csar";
 
     @Test
     void testCsarInstantiationPayload() throws JSONException {
@@ -88,18 +80,32 @@ class RappCsarConfigurationHandlerTest {
     @Test
     void testFileListing() {
         File file = new File(validCsarFileLocation + validRappFile);
-        List<String> fileListFromCsar =
-                rappCsarConfigurationHandler.getFileListFromCsar(file, "Files/Sme/serviceapis/");
+        Set<String> fileListFromCsar = rappCsarConfigurationHandler.getFileListFromCsar(file, "Files/Sme/serviceapis/");
         assertThat(fileListFromCsar).hasSize(2);
     }
 
     @Test
     void testInvalidFileListing() {
         File file = new File(validCsarFileLocation);
-        List<String> fileListFromCsar = rappCsarConfigurationHandler.getFileListFromCsar(file, null);
+        Set<String> fileListFromCsar = rappCsarConfigurationHandler.getFileListFromCsar(file, null);
         assertThat(fileListFromCsar).isEmpty();
     }
 
+    @Test
+    void testInvalidFileListingFromCsar() {
+        File file = new File("InvalidFile");
+        ByteArrayOutputStream fileByteArray = rappCsarConfigurationHandler.getFileFromCsar(file, null);
+        assertThat(fileByteArray.size()).isZero();
+    }
+
+    @Test
+    void testInvalidZipStreamGetFromCsar() throws IOException {
+        ZipArchiveInputStream zipArchiveInputStream = mock(ZipArchiveInputStream.class);
+        doThrow(new IOException()).when(zipArchiveInputStream).getNextEntry();
+        ByteArrayOutputStream fileByteArray = rappCsarConfigurationHandler.getFileFromCsar(zipArchiveInputStream, null);
+        assertThat(fileByteArray.size()).isZero();
+    }
+
     @Test
     void testListResources() {
         UUID rappId = UUID.randomUUID();
@@ -109,20 +115,25 @@ class RappCsarConfigurationHandlerTest {
         RappResources rappResources = rappCsarConfigurationHandler.getRappResource(rapp);
         assertThat(rappResources).isNotNull();
         assertNotNull(rappResources.getAcm().getCompositionDefinitions());
-        assertThat(rappResources.getAcm().getCompositionInstances()).hasSize(3);
+        assertThat(rappResources.getAcm().getCompositionInstances()).hasSize(4);
         assertThat(rappResources.getSme().getProviderFunctions()).hasSize(4);
         assertThat(rappResources.getSme().getServiceApis()).hasSize(2);
         assertThat(rappResources.getSme().getInvokers()).hasSize(2);
+        assertThat(rappResources.getDme().getProducerInfoTypes()).hasSize(2);
+        assertThat(rappResources.getDme().getConsumerInfoTypes()).hasSize(2);
+        assertThat(rappResources.getDme().getInfoProducers()).hasSize(2);
+        assertThat(rappResources.getDme().getInfoConsumers()).hasSize(2);
     }
 
     @Test
     void testListInvalidResources() {
         UUID rappId = UUID.randomUUID();
-        Rapp rapp = Rapp.builder().rappId(rappId).name("").build();
+        Rapp rapp = Rapp.builder().rappId(rappId).name("").packageName("").packageLocation("").build();
         RappResources rappResources = rappCsarConfigurationHandler.getRappResource(rapp);
         assertThat(rappResources).isNotNull();
         assertNull(rappResources.getAcm());
         assertNull(rappResources.getSme());
+        assertNull(rappResources.getDme());
     }
 
     @Test
@@ -130,7 +141,7 @@ class RappCsarConfigurationHandlerTest {
         UUID rappId = UUID.randomUUID();
         RappResources rappResources = new RappResources();
         rappResources.setAcm(RappResources.ACMResources.builder().compositionDefinitions("compositions")
-                                     .compositionInstances(List.of()).build());
+                                     .compositionInstances(Set.of()).build());
         Rapp rapp =
                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
                         .rappResources(rappResources).build();
@@ -143,7 +154,7 @@ class RappCsarConfigurationHandlerTest {
         UUID rappId = UUID.randomUUID();
         RappResources rappResources = new RappResources();
         rappResources.setAcm(RappResources.ACMResources.builder().compositionDefinitions("invalidcomposition")
-                                     .compositionInstances(List.of()).build());
+                                     .compositionInstances(Set.of()).build());
         Rapp rapp =
                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
                         .rappResources(rappResources).build();
@@ -188,4 +199,97 @@ class RappCsarConfigurationHandlerTest {
         assertNotNull(smeProviderDomainPayload);
     }
 
+    @Test
+    void testGetDmeProducerInfoTypePayload() {
+        UUID rappId = UUID.randomUUID();
+        RappDMEInstance rappDMEInstance = new RappDMEInstance();
+        rappDMEInstance.setInfoTypesProducer(Set.of("json-file-data-from-filestore"));
+        Rapp rapp =
+                Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
+                        .build();
+        String dmeInfoTypePayload = rappCsarConfigurationHandler.getDmeProducerInfoTypePayload(rapp,
+                rappDMEInstance.getInfoTypesProducer().iterator().next());
+        assertNotNull(dmeInfoTypePayload);
+    }
+
+    @Test
+    void testGetDmeConsumerInfoTypePayload() {
+        UUID rappId = UUID.randomUUID();
+        RappDMEInstance rappDMEInstance = new RappDMEInstance();
+        rappDMEInstance.setInfoTypeConsumer("json-file-data-from-filestore");
+        Rapp rapp =
+                Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
+                        .build();
+        String dmeInfoTypePayload =
+                rappCsarConfigurationHandler.getDmeConsumerInfoTypePayload(rapp, rappDMEInstance.getInfoTypeConsumer());
+        assertNotNull(dmeInfoTypePayload);
+    }
+
+    @Test
+    void testGetDmeInfoProducerPayload() {
+        UUID rappId = UUID.randomUUID();
+        RappDMEInstance rappDMEInstance = new RappDMEInstance();
+        rappDMEInstance.setInfoProducer("json-file-data-producer");
+        Rapp rapp =
+                Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
+                        .build();
+        String dmeInfoProducerPayload =
+                rappCsarConfigurationHandler.getDmeInfoProducerPayload(rapp, rappDMEInstance.getInfoProducer());
+        assertNotNull(dmeInfoProducerPayload);
+    }
+
+    @Test
+    void testGetDmeInfoConsumerPayload() {
+        UUID rappId = UUID.randomUUID();
+        RappDMEInstance rappDMEInstance = new RappDMEInstance();
+        rappDMEInstance.setInfoConsumer("json-file-consumer");
+        Rapp rapp =
+                Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
+                        .build();
+        String dmeInfoConsumerPayload =
+                rappCsarConfigurationHandler.getDmeInfoConsumerPayload(rapp, rappDMEInstance.getInfoConsumer());
+        assertNotNull(dmeInfoConsumerPayload);
+    }
+
+    @Test
+    void testGetAsdMetadata() {
+        Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
+        AsdMetadata asdMetadata = rappCsarConfigurationHandler.getAsdMetadata(rapp);
+        assertEquals("123e4567-e89b-12d3-a456-426614174000", asdMetadata.getDescriptorId());
+        assertEquals("040eff2a-eb1a-4aff-bd46-37ce38092985", asdMetadata.getDescriptorInvariantId());
+        assertEquals(2, asdMetadata.getDeploymentItems().size());
+    }
+
+    @ParameterizedTest
+    @ValueSource(strings = {invalidRappNoAsdFile, invalidRappEmptyAsdFile})
+    void testGetAsdMetadataNoAsd(String packageName) {
+        Rapp rapp = Rapp.builder().name("").packageName(packageName).packageLocation(validCsarFileLocation).build();
+        assertThat(rappCsarConfigurationHandler.getAsdMetadata(rapp)).isNotNull();
+    }
+
+    @Test
+    void testGetAsdMetadataException() throws JsonProcessingException {
+        Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
+        doThrow(new JsonSyntaxException("")).when(rappCsarConfigurationHandler).getAsdContentNode(any());
+        assertNull(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDescriptorId());
+        assertNull(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDescriptorInvariantId());
+        assertThat(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDeploymentItems()).isNull();
+    }
+
+    @Test
+    void testGetAsdMetadataNullAsdContent() throws JsonProcessingException {
+        Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
+        doReturn(null).when(rappCsarConfigurationHandler).getAsdContentNode(any());
+        assertNull(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDescriptorId());
+        assertNull(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDescriptorInvariantId());
+        assertThat(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDeploymentItems()).isNull();
+    }
+
+    @Test
+    void testGetArtifactPayload() {
+        Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
+        assertNotNull(rappCsarConfigurationHandler.getArtifactPayload(rapp,
+                "Artifacts/Deployment/HELM/ransliceassurance-1.0.0.tgz"));
+
+    }
 }