Use unique handling for the rApp resources
[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
26 import com.oransc.rappmanager.models.rapp.Rapp;
27 import com.oransc.rappmanager.models.rapp.RappResources;
28 import com.oransc.rappmanager.models.rappinstance.RappACMInstance;
29 import com.oransc.rappmanager.models.rappinstance.RappSMEInstance;
30 import java.io.File;
31 import java.io.FileInputStream;
32 import java.io.IOException;
33 import java.util.Set;
34 import java.util.UUID;
35 import org.apache.http.entity.ContentType;
36 import org.json.JSONException;
37 import org.json.JSONObject;
38 import org.junit.jupiter.api.Test;
39 import org.springframework.beans.factory.annotation.Autowired;
40 import org.springframework.boot.test.context.SpringBootTest;
41 import org.springframework.mock.web.MockMultipartFile;
42 import org.springframework.test.context.ContextConfiguration;
43 import org.springframework.web.multipart.MultipartFile;
44
45 @SpringBootTest
46 @ContextConfiguration(classes = RappCsarConfigurationHandler.class)
47 class RappCsarConfigurationHandlerTest {
48
49     @Autowired
50     RappCsarConfigurationHandler rappCsarConfigurationHandler;
51
52     String validCsarFileLocation = "src/test/resources/";
53
54
55     private final String validRappFile = "valid-rapp-package.csar";
56
57     private final String invalidRappFile = "invalid-rapp-package.csar";
58
59     @Test
60     void testCsarPackageValidationSuccess() throws IOException {
61         String rappCsarPath = validCsarFileLocation + File.separator + validRappFile;
62         MultipartFile multipartFile =
63                 new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(),
64                         new FileInputStream(rappCsarPath));
65         assertEquals(Boolean.TRUE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
66     }
67
68     @Test
69     void testCsarPackageValidationFailure() throws IOException {
70         String rappCsarPath = validCsarFileLocation + File.separator + invalidRappFile;
71         MultipartFile multipartFile =
72                 new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(),
73                         new FileInputStream(rappCsarPath));
74         assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile));
75     }
76
77     @Test
78     void testCsarInstantiationPayload() throws JSONException {
79         Rapp rapp = Rapp.builder().name("").packageName(validRappFile).packageLocation(validCsarFileLocation).build();
80         UUID compositionId = UUID.randomUUID();
81         RappACMInstance rappACMInstance = new RappACMInstance();
82         rappACMInstance.setInstance("kserve-instance");
83         JSONObject jsonObject = new JSONObject(
84                 rappCsarConfigurationHandler.getInstantiationPayload(rapp, rappACMInstance, compositionId));
85         assertEquals(jsonObject.get("compositionId"), String.valueOf(compositionId));
86     }
87
88     @Test
89     void testFileListing() {
90         File file = new File(validCsarFileLocation + validRappFile);
91         Set<String> fileListFromCsar = rappCsarConfigurationHandler.getFileListFromCsar(file, "Files/Sme/serviceapis/");
92         assertThat(fileListFromCsar).hasSize(2);
93     }
94
95     @Test
96     void testInvalidFileListing() {
97         File file = new File(validCsarFileLocation);
98         Set<String> fileListFromCsar = rappCsarConfigurationHandler.getFileListFromCsar(file, null);
99         assertThat(fileListFromCsar).isEmpty();
100     }
101
102     @Test
103     void testListResources() {
104         UUID rappId = UUID.randomUUID();
105         Rapp rapp =
106                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
107                         .build();
108         RappResources rappResources = rappCsarConfigurationHandler.getRappResource(rapp);
109         assertThat(rappResources).isNotNull();
110         assertNotNull(rappResources.getAcm().getCompositionDefinitions());
111         assertThat(rappResources.getAcm().getCompositionInstances()).hasSize(3);
112         assertThat(rappResources.getSme().getProviderFunctions()).hasSize(4);
113         assertThat(rappResources.getSme().getServiceApis()).hasSize(2);
114         assertThat(rappResources.getSme().getInvokers()).hasSize(2);
115     }
116
117     @Test
118     void testListInvalidResources() {
119         UUID rappId = UUID.randomUUID();
120         Rapp rapp = Rapp.builder().rappId(rappId).name("").build();
121         RappResources rappResources = rappCsarConfigurationHandler.getRappResource(rapp);
122         assertThat(rappResources).isNotNull();
123         assertNull(rappResources.getAcm());
124         assertNull(rappResources.getSme());
125     }
126
127     @Test
128     void testGetAcmCompositionPayload() {
129         UUID rappId = UUID.randomUUID();
130         RappResources rappResources = new RappResources();
131         rappResources.setAcm(RappResources.ACMResources.builder().compositionDefinitions("compositions")
132                                      .compositionInstances(Set.of()).build());
133         Rapp rapp =
134                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
135                         .rappResources(rappResources).build();
136         String acmCompositionPayload = rappCsarConfigurationHandler.getAcmCompositionPayload(rapp);
137         assertNotNull(acmCompositionPayload);
138     }
139
140     @Test
141     void testGetInvalidAcmCompositionPayload() {
142         UUID rappId = UUID.randomUUID();
143         RappResources rappResources = new RappResources();
144         rappResources.setAcm(RappResources.ACMResources.builder().compositionDefinitions("invalidcomposition")
145                                      .compositionInstances(Set.of()).build());
146         Rapp rapp =
147                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
148                         .rappResources(rappResources).build();
149         String acmCompositionPayload = rappCsarConfigurationHandler.getAcmCompositionPayload(rapp);
150         assertEquals("", acmCompositionPayload);
151     }
152
153     @Test
154     void testGetSmeProviderDomainPayload() {
155         UUID rappId = UUID.randomUUID();
156         RappSMEInstance rappSMEInstance = new RappSMEInstance();
157         rappSMEInstance.setProviderFunction("aef-provider-function");
158         Rapp rapp =
159                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
160                         .build();
161         String smeProviderDomainPayload =
162                 rappCsarConfigurationHandler.getSmeProviderDomainPayload(rapp, rappSMEInstance);
163         assertNotNull(smeProviderDomainPayload);
164     }
165
166     @Test
167     void testGetSmeServiceApiPayload() {
168         UUID rappId = UUID.randomUUID();
169         RappSMEInstance rappSMEInstance = new RappSMEInstance();
170         rappSMEInstance.setServiceApis("api-set-1");
171         Rapp rapp =
172                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
173                         .build();
174         String smeProviderDomainPayload = rappCsarConfigurationHandler.getSmeProviderApiPayload(rapp, rappSMEInstance);
175         assertNotNull(smeProviderDomainPayload);
176     }
177
178     @Test
179     void testGetSmeInvokerPayload() {
180         UUID rappId = UUID.randomUUID();
181         RappSMEInstance rappSMEInstance = new RappSMEInstance();
182         rappSMEInstance.setServiceApis("invoker-app1");
183         Rapp rapp =
184                 Rapp.builder().rappId(rappId).name("").packageName(validRappFile).packageLocation(validCsarFileLocation)
185                         .build();
186         String smeProviderDomainPayload = rappCsarConfigurationHandler.getSmeInvokerPayload(rapp, rappSMEInstance);
187         assertNotNull(smeProviderDomainPayload);
188     }
189
190 }