/*-
* ============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.
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;
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/";
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));
}
@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
@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());