Copyright added in missed files
[nonrtric/plt/rappmanager.git] / rapp-manager-application / src / test / java / com / oransc / rappmanager / rest / RappControllerTest.java
1 /*
2  * ============LICENSE_START======================================================================
3  * Copyright (C) 2023 OpenInfra Foundation Europe. 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.rest;
20
21 import static org.hamcrest.Matchers.hasSize;
22 import static org.mockito.ArgumentMatchers.any;
23 import static org.mockito.Mockito.when;
24 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
25 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
26
27 import com.fasterxml.jackson.databind.ObjectMapper;
28 import com.oransc.rappmanager.acm.service.AcmDeployer;
29 import com.oransc.rappmanager.dme.service.DmeDeployer;
30 import com.oransc.rappmanager.models.cache.RappCacheService;
31 import com.oransc.rappmanager.models.rapp.PrimeOrder;
32 import com.oransc.rappmanager.models.rapp.Rapp;
33 import com.oransc.rappmanager.models.rapp.RappPrimeOrder;
34 import com.oransc.rappmanager.models.rapp.RappState;
35 import com.oransc.rappmanager.sme.service.SmeLifecycleManager;
36 import java.io.File;
37 import java.io.FileInputStream;
38 import java.util.UUID;
39 import org.apache.http.entity.ContentType;
40 import org.junit.jupiter.api.Test;
41 import org.junit.jupiter.params.ParameterizedTest;
42 import org.junit.jupiter.params.provider.EnumSource;
43 import org.springframework.beans.factory.annotation.Autowired;
44 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
45 import org.springframework.boot.test.context.SpringBootTest;
46 import org.springframework.boot.test.mock.mockito.MockBean;
47 import org.springframework.http.MediaType;
48 import org.springframework.mock.web.MockMultipartFile;
49 import org.springframework.test.web.servlet.MockMvc;
50 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
51
52 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
53 @AutoConfigureMockMvc
54 class RappControllerTest {
55
56     @Autowired
57     private MockMvc mockMvc;
58
59     @Autowired
60     private RappCacheService rappCacheService;
61
62     @MockBean
63     AcmDeployer acmDeployer;
64
65     @MockBean
66     DmeDeployer dmeDeployer;
67
68     @MockBean
69     SmeLifecycleManager smeLifecycleManager;
70
71     private final String validRappFile = "valid-rapp-package.csar";
72
73     private final String invalidRappFile = "invalid-rapp-package.csar";
74     private final String validCsarFileLocation = "src/test/resources/";
75
76     private final ObjectMapper objectMapper = new ObjectMapper();
77
78     @Test
79     void testGetRapps() throws Exception {
80         mockMvc.perform(MockMvcRequestBuilders.get("/rapps")).andExpect(status().isOk())
81                 .andExpect(jsonPath("$", hasSize(0)));
82         UUID rappId = UUID.randomUUID();
83         Rapp rapp = Rapp.builder().rappId(rappId).name(String.valueOf(rappId)).packageName(validRappFile)
84                             .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build();
85         rappCacheService.putRapp(rapp);
86         mockMvc.perform(MockMvcRequestBuilders.get("/rapps")).andExpect(status().isOk())
87                 .andExpect(jsonPath("$", hasSize(1)));
88     }
89
90     @Test
91     void testGetRapp() throws Exception {
92         UUID rappId = UUID.randomUUID();
93         Rapp rapp = Rapp.builder().rappId(rappId).name(String.valueOf(rappId)).packageName(validRappFile)
94                             .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build();
95         rappCacheService.putRapp(rapp);
96         mockMvc.perform(MockMvcRequestBuilders.get("/rapps/{rapp_id}", rappId)).andExpect(status().isOk())
97                 .andExpect(jsonPath("$.rappId").value(rappId.toString()))
98                 .andExpect(jsonPath("$.state").value(RappState.COMMISSIONED.name()));
99     }
100
101     @Test
102     void testGetInvalidRapp() throws Exception {
103         mockMvc.perform(MockMvcRequestBuilders.get("/rapps/{rapp_id}", UUID.randomUUID()))
104                 .andExpect(status().isNotFound());
105     }
106
107     @Test
108     void testCreateRapp() throws Exception {
109         String rappCsarPath = validCsarFileLocation + File.separator + validRappFile;
110         MockMultipartFile multipartFile =
111                 new MockMultipartFile("file", validRappFile, ContentType.MULTIPART_FORM_DATA.getMimeType(),
112                         new FileInputStream(rappCsarPath));
113         mockMvc.perform(MockMvcRequestBuilders.multipart("/rapps/{rapp_id}", UUID.randomUUID()).file(multipartFile))
114                 .andExpect(status().isAccepted());
115     }
116
117     @Test
118     void testCreateInvalidRapp() throws Exception {
119         String rappCsarPath = validCsarFileLocation + File.separator + invalidRappFile;
120         MockMultipartFile multipartFile =
121                 new MockMultipartFile("file", invalidRappFile, ContentType.MULTIPART_FORM_DATA.getMimeType(),
122                         new FileInputStream(rappCsarPath));
123         mockMvc.perform(MockMvcRequestBuilders.multipart("/rapps/{rapp_id}", UUID.randomUUID()).file(multipartFile))
124                 .andExpect(status().isBadRequest());
125     }
126
127     @Test
128     void testPrimeRapp() throws Exception {
129         UUID rappId = UUID.randomUUID();
130         Rapp rapp = Rapp.builder().rappId(rappId).name(String.valueOf(rappId)).packageName(validRappFile)
131                             .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build();
132         rappCacheService.putRapp(rapp);
133         when(acmDeployer.primeRapp(any())).thenReturn(true);
134         when(dmeDeployer.primeRapp(any())).thenReturn(true);
135         RappPrimeOrder rappPrimeOrder = new RappPrimeOrder();
136         rappPrimeOrder.setPrimeOrder(PrimeOrder.PRIME);
137         mockMvc.perform(MockMvcRequestBuilders.put("/rapps/{rapp_id}", rappId).contentType(MediaType.APPLICATION_JSON)
138                                 .content(objectMapper.writeValueAsString(rappPrimeOrder))).andExpect(status().isOk());
139     }
140
141     @ParameterizedTest
142     @EnumSource(value = PrimeOrder.class, names = {"PRIME", "DEPRIME"})
143     void testPrimeRappFailure(PrimeOrder primeOrder) throws Exception {
144         RappPrimeOrder rappPrimeOrder = new RappPrimeOrder();
145         rappPrimeOrder.setPrimeOrder(primeOrder);
146         mockMvc.perform(MockMvcRequestBuilders.put("/rapps/{rapp_id}", UUID.randomUUID())
147                                 .contentType(MediaType.APPLICATION_JSON)
148                                 .content(objectMapper.writeValueAsString(rappPrimeOrder)))
149                 .andExpect(status().isNotFound());
150     }
151
152     @Test
153     void testDeprimeRapp() throws Exception {
154         UUID rappId = UUID.randomUUID();
155         Rapp rapp = Rapp.builder().rappId(rappId).name(String.valueOf(rappId)).packageName(validRappFile)
156                             .packageLocation(validCsarFileLocation).state(RappState.PRIMED).build();
157         rappCacheService.putRapp(rapp);
158         when(acmDeployer.deprimeRapp(any())).thenReturn(true);
159         when(dmeDeployer.deprimeRapp(any())).thenReturn(true);
160         RappPrimeOrder rappPrimeOrder = new RappPrimeOrder();
161         rappPrimeOrder.setPrimeOrder(PrimeOrder.DEPRIME);
162         mockMvc.perform(MockMvcRequestBuilders.put("/rapps/{rapp_id}", rappId).contentType(MediaType.APPLICATION_JSON)
163                                 .content(objectMapper.writeValueAsString(rappPrimeOrder))).andExpect(status().isOk());
164     }
165
166     @Test
167     void testDeleteRapp() throws Exception {
168         UUID rappId = UUID.randomUUID();
169         Rapp rapp = Rapp.builder().rappId(rappId).name(String.valueOf(rappId)).packageName(validRappFile)
170                             .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build();
171         rappCacheService.putRapp(rapp);
172         mockMvc.perform(MockMvcRequestBuilders.delete("/rapps/{rapp_id}", rappId)).andExpect(status().isOk());
173     }
174
175     @Test
176     void testDeleteRappFailure() throws Exception {
177         mockMvc.perform(MockMvcRequestBuilders.delete("/rapps/{rapp_id}", UUID.randomUUID()))
178                 .andExpect(status().isNotFound());
179     }
180 }