2 * ============LICENSE_START======================================================================
3 * Copyright (C) 2023 Nordix Foundation. All rights reserved.
4 * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
5 * ===============================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 * ============LICENSE_END========================================================================
20 package com.oransc.rappmanager.models.csar;
22 import static org.assertj.core.api.Assertions.assertThat;
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.junit.jupiter.api.Assertions.assertNotNull;
25 import static org.junit.jupiter.api.Assertions.assertNull;
26 import static org.mockito.ArgumentMatchers.any;
27 import static org.mockito.Mockito.doReturn;
28 import static org.mockito.Mockito.doThrow;
29 import static org.mockito.Mockito.mock;
31 import com.fasterxml.jackson.core.JsonProcessingException;
32 import com.fasterxml.jackson.databind.ObjectMapper;
33 import com.google.gson.JsonSyntaxException;
34 import com.oransc.rappmanager.models.rapp.Rapp;
35 import com.oransc.rappmanager.models.rapp.RappResources;
36 import com.oransc.rappmanager.models.rappinstance.RappACMInstance;
37 import com.oransc.rappmanager.models.rappinstance.RappDMEInstance;
38 import com.oransc.rappmanager.models.rappinstance.RappSMEInstance;
39 import java.io.ByteArrayOutputStream;
41 import java.io.IOException;
43 import java.util.UUID;
44 import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
45 import org.json.JSONException;
46 import org.json.JSONObject;
47 import org.junit.jupiter.api.Test;
48 import org.junit.jupiter.params.ParameterizedTest;
49 import org.junit.jupiter.params.provider.ValueSource;
50 import org.springframework.boot.test.context.SpringBootTest;
51 import org.springframework.boot.test.mock.mockito.SpyBean;
52 import org.springframework.test.context.ContextConfiguration;
55 @ContextConfiguration(classes = {ObjectMapper.class, RappCsarConfigurationHandler.class})
56 class RappCsarConfigurationHandlerTest {
59 RappCsarConfigurationHandler rappCsarConfigurationHandler;
61 String validCsarFileLocation = "src/test/resources/";
63 private final String validRappFile = "valid-rapp-package.csar";
65 private final String invalidRappNoAsdFile = "invalid-rapp-package-no-asd-yaml.csar";
67 private final String invalidRappEmptyAsdFile = "invalid-rapp-package-empty-asd-yaml.csar";
70 void testCsarInstantiationPayload() throws JSONException {
71 Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
72 UUID compositionId = UUID.randomUUID();
73 RappACMInstance rappACMInstance = new RappACMInstance();
74 rappACMInstance.setInstance("kserve-instance");
75 JSONObject jsonObject = new JSONObject(
76 rappCsarConfigurationHandler.getInstantiationPayload(rapp, rappACMInstance, compositionId));
77 assertEquals(jsonObject.get("compositionId"), String.valueOf(compositionId));
81 void testFileListing() {
82 File file = new File(validCsarFileLocation + validRappFile);
83 Set<String> fileListFromCsar = rappCsarConfigurationHandler.getFileListFromCsar(file, "Files/Sme/serviceapis/");
84 assertThat(fileListFromCsar).hasSize(2);
88 void testInvalidFileListing() {
89 File file = new File(validCsarFileLocation);
90 Set<String> fileListFromCsar = rappCsarConfigurationHandler.getFileListFromCsar(file, null);
91 assertThat(fileListFromCsar).isEmpty();
95 void testInvalidFileListingFromCsar() {
96 File file = new File("InvalidFile");
97 ByteArrayOutputStream fileByteArray = rappCsarConfigurationHandler.getFileFromCsar(file, null);
98 assertThat(fileByteArray.size()).isZero();
102 void testInvalidZipStreamGetFromCsar() throws IOException {
103 ZipArchiveInputStream zipArchiveInputStream = mock(ZipArchiveInputStream.class);
104 doThrow(new IOException()).when(zipArchiveInputStream).getNextEntry();
105 ByteArrayOutputStream fileByteArray = rappCsarConfigurationHandler.getFileFromCsar(zipArchiveInputStream, null);
106 assertThat(fileByteArray.size()).isZero();
110 void testListResources() {
111 UUID rappId = UUID.randomUUID();
113 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
115 RappResources rappResources = rappCsarConfigurationHandler.getRappResource(rapp);
116 assertThat(rappResources).isNotNull();
117 assertNotNull(rappResources.getAcm().getCompositionDefinitions());
118 assertThat(rappResources.getAcm().getCompositionInstances()).hasSize(4);
119 assertThat(rappResources.getSme().getProviderFunctions()).hasSize(4);
120 assertThat(rappResources.getSme().getServiceApis()).hasSize(2);
121 assertThat(rappResources.getSme().getInvokers()).hasSize(2);
122 assertThat(rappResources.getDme().getProducerInfoTypes()).hasSize(2);
123 assertThat(rappResources.getDme().getConsumerInfoTypes()).hasSize(2);
124 assertThat(rappResources.getDme().getInfoProducers()).hasSize(2);
125 assertThat(rappResources.getDme().getInfoConsumers()).hasSize(2);
129 void testListInvalidResources() {
130 UUID rappId = UUID.randomUUID();
131 Rapp rapp = Rapp.builder().rappId(rappId).name("").packageName("").packageLocation("").build();
132 RappResources rappResources = rappCsarConfigurationHandler.getRappResource(rapp);
133 assertThat(rappResources).isNotNull();
134 assertNull(rappResources.getAcm());
135 assertNull(rappResources.getSme());
136 assertNull(rappResources.getDme());
140 void testGetAcmCompositionPayload() {
141 UUID rappId = UUID.randomUUID();
142 RappResources rappResources = new RappResources();
143 rappResources.setAcm(RappResources.ACMResources.builder().compositionDefinitions("compositions")
144 .compositionInstances(Set.of()).build());
146 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
147 .rappResources(rappResources).build();
148 String acmCompositionPayload = rappCsarConfigurationHandler.getAcmCompositionPayload(rapp);
149 assertNotNull(acmCompositionPayload);
153 void testGetInvalidAcmCompositionPayload() {
154 UUID rappId = UUID.randomUUID();
155 RappResources rappResources = new RappResources();
156 rappResources.setAcm(RappResources.ACMResources.builder().compositionDefinitions("invalidcomposition")
157 .compositionInstances(Set.of()).build());
159 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
160 .rappResources(rappResources).build();
161 String acmCompositionPayload = rappCsarConfigurationHandler.getAcmCompositionPayload(rapp);
162 assertEquals("", acmCompositionPayload);
166 void testGetSmeProviderDomainPayload() {
167 UUID rappId = UUID.randomUUID();
168 RappSMEInstance rappSMEInstance = new RappSMEInstance();
169 rappSMEInstance.setProviderFunction("aef-provider-function");
171 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
173 String smeProviderDomainPayload =
174 rappCsarConfigurationHandler.getSmeProviderDomainPayload(rapp, rappSMEInstance);
175 assertNotNull(smeProviderDomainPayload);
179 void testGetSmeServiceApiPayload() {
180 UUID rappId = UUID.randomUUID();
181 RappSMEInstance rappSMEInstance = new RappSMEInstance();
182 rappSMEInstance.setServiceApis("api-set-1");
184 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
186 String smeProviderDomainPayload = rappCsarConfigurationHandler.getSmeProviderApiPayload(rapp, rappSMEInstance);
187 assertNotNull(smeProviderDomainPayload);
191 void testGetSmeInvokerPayload() {
192 UUID rappId = UUID.randomUUID();
193 RappSMEInstance rappSMEInstance = new RappSMEInstance();
194 rappSMEInstance.setServiceApis("invoker-app1");
196 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
198 String smeProviderDomainPayload = rappCsarConfigurationHandler.getSmeInvokerPayload(rapp, rappSMEInstance);
199 assertNotNull(smeProviderDomainPayload);
203 void testGetDmeProducerInfoTypePayload() {
204 UUID rappId = UUID.randomUUID();
205 RappDMEInstance rappDMEInstance = new RappDMEInstance();
206 rappDMEInstance.setInfoTypesProducer(Set.of("json-file-data-from-filestore"));
208 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
210 String dmeInfoTypePayload = rappCsarConfigurationHandler.getDmeProducerInfoTypePayload(rapp,
211 rappDMEInstance.getInfoTypesProducer().iterator().next());
212 assertNotNull(dmeInfoTypePayload);
216 void testGetDmeConsumerInfoTypePayload() {
217 UUID rappId = UUID.randomUUID();
218 RappDMEInstance rappDMEInstance = new RappDMEInstance();
219 rappDMEInstance.setInfoTypeConsumer("json-file-data-from-filestore");
221 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
223 String dmeInfoTypePayload =
224 rappCsarConfigurationHandler.getDmeConsumerInfoTypePayload(rapp, rappDMEInstance.getInfoTypeConsumer());
225 assertNotNull(dmeInfoTypePayload);
229 void testGetDmeInfoProducerPayload() {
230 UUID rappId = UUID.randomUUID();
231 RappDMEInstance rappDMEInstance = new RappDMEInstance();
232 rappDMEInstance.setInfoProducer("json-file-data-producer");
234 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
236 String dmeInfoProducerPayload =
237 rappCsarConfigurationHandler.getDmeInfoProducerPayload(rapp, rappDMEInstance.getInfoProducer());
238 assertNotNull(dmeInfoProducerPayload);
242 void testGetDmeInfoConsumerPayload() {
243 UUID rappId = UUID.randomUUID();
244 RappDMEInstance rappDMEInstance = new RappDMEInstance();
245 rappDMEInstance.setInfoConsumer("json-file-consumer");
247 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
249 String dmeInfoConsumerPayload =
250 rappCsarConfigurationHandler.getDmeInfoConsumerPayload(rapp, rappDMEInstance.getInfoConsumer());
251 assertNotNull(dmeInfoConsumerPayload);
255 void testGetAsdMetadata() {
256 Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
257 AsdMetadata asdMetadata = rappCsarConfigurationHandler.getAsdMetadata(rapp);
258 assertEquals("123e4567-e89b-12d3-a456-426614174000", asdMetadata.getDescriptorId());
259 assertEquals("040eff2a-eb1a-4aff-bd46-37ce38092985", asdMetadata.getDescriptorInvariantId());
260 assertEquals(2, asdMetadata.getDeploymentItems().size());
264 @ValueSource(strings = {invalidRappNoAsdFile, invalidRappEmptyAsdFile})
265 void testGetAsdMetadataNoAsd(String packageName) {
266 Rapp rapp = Rapp.builder().name("").packageName(packageName).packageLocation(validCsarFileLocation).build();
267 assertThat(rappCsarConfigurationHandler.getAsdMetadata(rapp)).isNotNull();
271 void testGetAsdMetadataException() throws JsonProcessingException {
272 Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
273 doThrow(new JsonSyntaxException("")).when(rappCsarConfigurationHandler).getAsdContentNode(any());
274 assertNull(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDescriptorId());
275 assertNull(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDescriptorInvariantId());
276 assertThat(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDeploymentItems()).isNull();
280 void testGetAsdMetadataNullAsdContent() throws JsonProcessingException {
281 Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
282 doReturn(null).when(rappCsarConfigurationHandler).getAsdContentNode(any());
283 assertNull(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDescriptorId());
284 assertNull(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDescriptorInvariantId());
285 assertThat(rappCsarConfigurationHandler.getAsdMetadata(rapp).getDeploymentItems()).isNull();
289 void testGetArtifactPayload() {
290 Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
291 assertNotNull(rappCsarConfigurationHandler.getArtifactPayload(rapp,
292 "Artifacts/Deployment/HELM/ransliceassurance-1.0.0.tgz"));