Merge "Uplift spring boot version to 3.1.4"
[nonrtric/plt/rappmanager.git] / rapp-manager-models / src / test / java / com / oransc / rappmanager / models / csar / RappCsarConfigurationHandlerTest.java
1 /*-
2  * ============LICENSE_START======================================================================
3  * Copyright (C) 2023 Nordix Foundation. All rights reserved.
4  * ===============================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  * ============LICENSE_END========================================================================
17  */
18
19 package com.oransc.rappmanager.models.csar;
20
21 import static org.assertj.core.api.Assertions.assertThat;
22 import static org.junit.jupiter.api.Assertions.assertEquals;
23 import static org.junit.jupiter.api.Assertions.assertNotNull;
24 import static org.junit.jupiter.api.Assertions.assertNull;
25 import static org.mockito.Mockito.mock;
26
27 import com.oransc.rappmanager.models.rapp.Rapp;
28 import com.oransc.rappmanager.models.rapp.RappResources;
29 import com.oransc.rappmanager.models.rappinstance.RappACMInstance;
30 import com.oransc.rappmanager.models.rappinstance.RappDMEInstance;
31 import com.oransc.rappmanager.models.rappinstance.RappSMEInstance;
32 import java.io.ByteArrayOutputStream;
33 import java.io.File;
34 import java.io.FileInputStream;
35 import java.io.IOException;
36 import java.util.Set;
37 import java.util.UUID;
38 import org.apache.http.entity.ContentType;
39 import org.json.JSONException;
40 import org.json.JSONObject;
41 import org.junit.jupiter.api.Test;
42 import org.springframework.beans.factory.annotation.Autowired;
43 import org.springframework.boot.test.context.SpringBootTest;
44 import org.springframework.mock.web.MockMultipartFile;
45 import org.springframework.test.context.ContextConfiguration;
46 import org.springframework.web.multipart.MultipartFile;
47
48 @SpringBootTest
49 @ContextConfiguration(classes = RappCsarConfigurationHandler.class)
50 class RappCsarConfigurationHandlerTest {
51
52     @Autowired
53     RappCsarConfigurationHandler rappCsarConfigurationHandler;
54
55     String validCsarFileLocation = "src/test/resources/";
56
57
58     private final String validRappFile = "valid-rapp-package.csar";
59
60     private final String invalidRappFile = "invalid-rapp-package.csar";
61
62     @Test
63     void testCsarPackageValidationSuccess() throws IOException {
64         String rappCsarPath = validCsarFileLocation + File.separator + validRappFile;
65         MultipartFile multipartFile =
66                 new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(),
67                         new FileInputStream(rappCsarPath));
68         assertEquals(Boolean.TRUE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
69     }
70
71     @Test
72     void testCsarPackageValidationFailure() throws IOException {
73         String rappCsarPath = validCsarFileLocation + File.separator + invalidRappFile;
74         MultipartFile multipartFile =
75                 new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(),
76                         new FileInputStream(rappCsarPath));
77         assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
78     }
79
80     @Test
81     void testCsarPackageValidationFailureWithoutOrginalName() throws IOException {
82         MultipartFile multipartFile = mock(MultipartFile.class);
83         assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
84     }
85
86     @Test
87     void testInvalidCsarFileExist() {
88         MultipartFile multipartFile = mock(MultipartFile.class);
89         assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isFileExistsInCsar(multipartFile, "INVALID_LOCATION"));
90     }
91
92     @Test
93     void testCsarInstantiationPayload() throws JSONException {
94         Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
95         UUID compositionId = UUID.randomUUID();
96         RappACMInstance rappACMInstance = new RappACMInstance();
97         rappACMInstance.setInstance("kserve-instance");
98         JSONObject jsonObject = new JSONObject(
99                 rappCsarConfigurationHandler.getInstantiationPayload(rapp, rappACMInstance, compositionId));
100         assertEquals(jsonObject.get("compositionId"), String.valueOf(compositionId));
101     }
102
103     @Test
104     void testFileListing() {
105         File file = new File(validCsarFileLocation + validRappFile);
106         Set<String> fileListFromCsar = rappCsarConfigurationHandler.getFileListFromCsar(file, "Files/Sme/serviceapis/");
107         assertThat(fileListFromCsar).hasSize(2);
108     }
109
110     @Test
111     void testInvalidFileListing() {
112         File file = new File(validCsarFileLocation);
113         Set<String> fileListFromCsar = rappCsarConfigurationHandler.getFileListFromCsar(file, null);
114         assertThat(fileListFromCsar).isEmpty();
115     }
116
117     @Test
118     void testInvalidFileListingFromCsar() {
119         File file = new File("InvalidFile");
120         ByteArrayOutputStream fileByteArray = rappCsarConfigurationHandler.getFileFromCsar(file, null);
121         assertThat(fileByteArray.size()).isZero();
122     }
123
124     @Test
125     void testListResources() {
126         UUID rappId = UUID.randomUUID();
127         Rapp rapp =
128                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
129                         .build();
130         RappResources rappResources = rappCsarConfigurationHandler.getRappResource(rapp);
131         assertThat(rappResources).isNotNull();
132         assertNotNull(rappResources.getAcm().getCompositionDefinitions());
133         assertThat(rappResources.getAcm().getCompositionInstances()).hasSize(4);
134         assertThat(rappResources.getSme().getProviderFunctions()).hasSize(4);
135         assertThat(rappResources.getSme().getServiceApis()).hasSize(2);
136         assertThat(rappResources.getSme().getInvokers()).hasSize(2);
137         assertThat(rappResources.getDme().getInfoTypes()).hasSize(2);
138         assertThat(rappResources.getDme().getInfoProducers()).hasSize(2);
139         assertThat(rappResources.getDme().getInfoConsumers()).hasSize(2);
140     }
141
142     @Test
143     void testListInvalidResources() {
144         UUID rappId = UUID.randomUUID();
145         Rapp rapp = Rapp.builder().rappId(rappId).name("").build();
146         RappResources rappResources = rappCsarConfigurationHandler.getRappResource(rapp);
147         assertThat(rappResources).isNotNull();
148         assertNull(rappResources.getAcm());
149         assertNull(rappResources.getSme());
150         assertNull(rappResources.getDme());
151     }
152
153     @Test
154     void testGetAcmCompositionPayload() {
155         UUID rappId = UUID.randomUUID();
156         RappResources rappResources = new RappResources();
157         rappResources.setAcm(RappResources.ACMResources.builder().compositionDefinitions("compositions")
158                                      .compositionInstances(Set.of()).build());
159         Rapp rapp =
160                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
161                         .rappResources(rappResources).build();
162         String acmCompositionPayload = rappCsarConfigurationHandler.getAcmCompositionPayload(rapp);
163         assertNotNull(acmCompositionPayload);
164     }
165
166     @Test
167     void testGetInvalidAcmCompositionPayload() {
168         UUID rappId = UUID.randomUUID();
169         RappResources rappResources = new RappResources();
170         rappResources.setAcm(RappResources.ACMResources.builder().compositionDefinitions("invalidcomposition")
171                                      .compositionInstances(Set.of()).build());
172         Rapp rapp =
173                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
174                         .rappResources(rappResources).build();
175         String acmCompositionPayload = rappCsarConfigurationHandler.getAcmCompositionPayload(rapp);
176         assertEquals("", acmCompositionPayload);
177     }
178
179     @Test
180     void testGetSmeProviderDomainPayload() {
181         UUID rappId = UUID.randomUUID();
182         RappSMEInstance rappSMEInstance = new RappSMEInstance();
183         rappSMEInstance.setProviderFunction("aef-provider-function");
184         Rapp rapp =
185                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
186                         .build();
187         String smeProviderDomainPayload =
188                 rappCsarConfigurationHandler.getSmeProviderDomainPayload(rapp, rappSMEInstance);
189         assertNotNull(smeProviderDomainPayload);
190     }
191
192     @Test
193     void testGetSmeServiceApiPayload() {
194         UUID rappId = UUID.randomUUID();
195         RappSMEInstance rappSMEInstance = new RappSMEInstance();
196         rappSMEInstance.setServiceApis("api-set-1");
197         Rapp rapp =
198                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
199                         .build();
200         String smeProviderDomainPayload = rappCsarConfigurationHandler.getSmeProviderApiPayload(rapp, rappSMEInstance);
201         assertNotNull(smeProviderDomainPayload);
202     }
203
204     @Test
205     void testGetSmeInvokerPayload() {
206         UUID rappId = UUID.randomUUID();
207         RappSMEInstance rappSMEInstance = new RappSMEInstance();
208         rappSMEInstance.setServiceApis("invoker-app1");
209         Rapp rapp =
210                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
211                         .build();
212         String smeProviderDomainPayload = rappCsarConfigurationHandler.getSmeInvokerPayload(rapp, rappSMEInstance);
213         assertNotNull(smeProviderDomainPayload);
214     }
215
216     @Test
217     void testGetDmeInfoTypePayload() {
218         UUID rappId = UUID.randomUUID();
219         RappDMEInstance rappDMEInstance = new RappDMEInstance();
220         rappDMEInstance.setInfoTypesProducer(Set.of("json-file-data-from-filestore"));
221         Rapp rapp =
222                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
223                         .build();
224         String dmeInfoTypePayload = rappCsarConfigurationHandler.getDmeInfoTypePayload(rapp,
225                 rappDMEInstance.getInfoTypesProducer().iterator().next());
226         assertNotNull(dmeInfoTypePayload);
227     }
228
229     @Test
230     void testGetDmeInfoProducerPayload() {
231         UUID rappId = UUID.randomUUID();
232         RappDMEInstance rappDMEInstance = new RappDMEInstance();
233         rappDMEInstance.setInfoProducer("json-file-data-producer");
234         Rapp rapp =
235                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
236                         .build();
237         String dmeInfoProducerPayload =
238                 rappCsarConfigurationHandler.getDmeInfoProducerPayload(rapp, rappDMEInstance.getInfoProducer());
239         assertNotNull(dmeInfoProducerPayload);
240     }
241
242     @Test
243     void testGetDmeInfoConsumerPayload() {
244         UUID rappId = UUID.randomUUID();
245         RappDMEInstance rappDMEInstance = new RappDMEInstance();
246         rappDMEInstance.setInfoConsumer("json-file-consumer");
247         Rapp rapp =
248                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
249                         .build();
250         String dmeInfoConsumerPayload =
251                 rappCsarConfigurationHandler.getDmeInfoConsumerPayload(rapp, rappDMEInstance.getInfoConsumer());
252         assertNotNull(dmeInfoConsumerPayload);
253     }
254
255 }