Add helm artifacts in the CSAR package
[nonrtric/plt/rappmanager.git] / rapp-manager-models / src / test / java / com / oransc / rappmanager / models / csar / RappCsarConfigurationHandlerTest.java
index 8c416ee..81468ee 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,8 +23,15 @@ 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.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.oransc.rappmanager.models.exception.RappHandlerException;
 import com.oransc.rappmanager.models.rapp.Rapp;
 import com.oransc.rappmanager.models.rapp.RappResources;
 import com.oransc.rappmanager.models.rappinstance.RappACMInstance;
@@ -35,21 +43,26 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.util.Set;
 import java.util.UUID;
+import java.util.stream.Stream;
 import org.apache.http.entity.ContentType;
 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.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.SpyBean;
+import org.springframework.http.HttpStatus;
 import org.springframework.mock.web.MockMultipartFile;
 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/";
@@ -68,17 +81,46 @@ class RappCsarConfigurationHandlerTest {
         assertEquals(Boolean.TRUE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
     }
 
-    @Test
-    void testCsarPackageValidationFailure() throws IOException {
-        String rappCsarPath = validCsarFileLocation + File.separator + invalidRappFile;
+    @ParameterizedTest
+    @MethodSource("getInvalidCsarPackage")
+    void testCsarPackageValidationFailure(MultipartFile multipartFile) {
+        System.out.println(multipartFile.getOriginalFilename());
+        RappHandlerException exception = assertThrows(RappHandlerException.class,
+                () -> rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
+        assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode());
+    }
+
+
+    private static Stream<Arguments> getInvalidCsarPackage() throws IOException {
+        String validCsarFileLocation = "src/test/resources";
+        String rappCsarPath = validCsarFileLocation + File.separator + "invalid-rapp-package.csar";
         MultipartFile multipartFile =
                 new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(),
                         new FileInputStream(rappCsarPath));
-        assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
+        String rappCsarPathNoTosca = validCsarFileLocation + File.separator + "invalid-rapp-package-no-tosca.csar";
+        MultipartFile multipartFileNoTosca = new MockMultipartFile(rappCsarPathNoTosca, rappCsarPathNoTosca,
+                ContentType.MULTIPART_FORM_DATA.getMimeType(), new FileInputStream(rappCsarPathNoTosca));
+        String rappCsarPathNoAsdYaml = validCsarFileLocation + File.separator + "invalid-rapp-package-no-asd-yaml.csar";
+        MultipartFile multipartFileNoAsdYaml = new MockMultipartFile(rappCsarPathNoAsdYaml, rappCsarPathNoAsdYaml,
+                ContentType.MULTIPART_FORM_DATA.getMimeType(), new FileInputStream(rappCsarPathNoAsdYaml));
+        String rappCsarPathMissingArtifact =
+                validCsarFileLocation + File.separator + "invalid-rapp-package-missing-artifact.csar";
+        MultipartFile multipartFileMissingArtifact =
+                new MockMultipartFile(rappCsarPathMissingArtifact, rappCsarPathMissingArtifact,
+                        ContentType.MULTIPART_FORM_DATA.getMimeType(),
+                        new FileInputStream(rappCsarPathMissingArtifact));
+        String rappCsarPathNoComposition =
+                validCsarFileLocation + File.separator + "invalid-rapp-package-no-acm-composition.csar";
+        MultipartFile multipartFileNoComposition =
+                new MockMultipartFile(rappCsarPathNoComposition, rappCsarPathNoComposition,
+                        ContentType.MULTIPART_FORM_DATA.getMimeType(), new FileInputStream(rappCsarPathNoComposition));
+        return Stream.of(Arguments.of(multipartFile), Arguments.of(multipartFileNoTosca),
+                Arguments.of(multipartFileNoAsdYaml), Arguments.of(multipartFileMissingArtifact),
+                Arguments.of(multipartFileNoComposition));
     }
 
     @Test
-    void testCsarPackageValidationFailureWithoutOrginalName() throws IOException {
+    void testCsarPackageValidationFailureWithoutOrginalName() {
         MultipartFile multipartFile = mock(MultipartFile.class);
         assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
     }
@@ -86,7 +128,60 @@ class RappCsarConfigurationHandlerTest {
     @Test
     void testInvalidCsarFileExist() {
         MultipartFile multipartFile = mock(MultipartFile.class);
-        assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isFileExistsInCsar(multipartFile, "INVALID_LOCATION"));
+        RappHandlerException exception = assertThrows(RappHandlerException.class,
+                () -> rappCsarConfigurationHandler.isFileExistsInCsar(multipartFile, "INVALID_LOCATION"));
+        assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode());
+    }
+
+    @Test
+    void testCsarContainsValidAsdFile() throws IOException {
+        String rappCsarPath = validCsarFileLocation + File.separator + validRappFile;
+        MultipartFile multipartFile =
+                new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(),
+                        new FileInputStream(rappCsarPath));
+        assertTrue(rappCsarConfigurationHandler.containsValidArtifactDefinition(multipartFile));
+    }
+
+    @Test
+    void testCsarContainsValidAsdFileFailure() throws IOException {
+        String rappCsarPath = validCsarFileLocation + File.separator + invalidRappFile;
+        MultipartFile multipartFile =
+                new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(),
+                        new FileInputStream(rappCsarPath));
+        RappHandlerException exception = assertThrows(RappHandlerException.class,
+                () -> rappCsarConfigurationHandler.containsValidArtifactDefinition(multipartFile));
+        assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode());
+    }
+
+    @Test
+    void testCsarNoAsdFailure() {
+        MultipartFile multipartFile = mock(MultipartFile.class);
+        RappHandlerException exception = assertThrows(RappHandlerException.class,
+                () -> rappCsarConfigurationHandler.containsValidArtifactDefinition(multipartFile));
+        assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode());
+    }
+
+    @Test
+    void testCsarAsdContentInvalidFailure() throws IOException {
+        String rappCsarPath = validCsarFileLocation + File.separator + validRappFile;
+        MultipartFile multipartFile =
+                new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(),
+                        new FileInputStream(rappCsarPath));
+        String invalidJson = "{asasdasd";
+        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        byteArrayOutputStream.write(invalidJson.getBytes(), 0, invalidJson.getBytes().length);
+        doCallRealMethod().doReturn(byteArrayOutputStream).when(rappCsarConfigurationHandler)
+                .getFileFromCsar(any(MultipartFile.class), any());
+        RappHandlerException exception = assertThrows(RappHandlerException.class,
+                () -> rappCsarConfigurationHandler.containsValidArtifactDefinition(multipartFile));
+        assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode());
+    }
+
+    @Test
+    void testgetFileFromCsarFailure() throws IOException {
+        MultipartFile multipartFile = mock(MultipartFile.class);
+        when(multipartFile.getInputStream()).thenThrow(new IOException());
+        assertThat(rappCsarConfigurationHandler.getFileFromCsar(multipartFile, null).size()).isZero();
     }
 
     @Test
@@ -143,7 +238,7 @@ class RappCsarConfigurationHandlerTest {
     @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());