1 package com.oransc.rappmanager.rest;
3 import static org.mockito.ArgumentMatchers.any;
4 import static org.mockito.Mockito.when;
5 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
6 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
8 import com.fasterxml.jackson.databind.ObjectMapper;
9 import com.oransc.rappmanager.acm.service.AcmDeployer;
10 import com.oransc.rappmanager.models.rapp.PrimeOrder;
11 import com.oransc.rappmanager.models.rapp.Rapp;
12 import com.oransc.rappmanager.models.rapp.RappPrimeOrder;
13 import com.oransc.rappmanager.models.rapp.RappState;
14 import com.oransc.rappmanager.models.cache.RappCacheService;
16 import java.io.FileInputStream;
17 import java.util.UUID;
18 import org.apache.http.entity.ContentType;
19 import org.junit.jupiter.api.Test;
20 import org.junit.jupiter.params.ParameterizedTest;
21 import org.junit.jupiter.params.provider.EnumSource;
22 import org.springframework.beans.factory.annotation.Autowired;
23 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
24 import org.springframework.boot.test.context.SpringBootTest;
25 import org.springframework.boot.test.mock.mockito.MockBean;
26 import org.springframework.http.MediaType;
27 import org.springframework.mock.web.MockMultipartFile;
28 import org.springframework.test.web.servlet.MockMvc;
29 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
31 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
33 public class RappControllerTest {
36 private MockMvc mockMvc;
39 private RappCacheService rappCacheService;
42 AcmDeployer acmDeployer;
44 private final String validRappFile = "valid-rapp-package.csar";
46 private final String invalidRappFile = "invalid-rapp-package.csar";
47 private final String validCsarFileLocation = "src/test/resources/";
49 private final ObjectMapper objectMapper = new ObjectMapper();
52 void testGetRapps() throws Exception {
53 mockMvc.perform(MockMvcRequestBuilders.get("/rapps")).andExpect(status().isOk());
57 void testGetRapp() throws Exception {
58 UUID rappId = UUID.randomUUID();
59 Rapp rapp = Rapp.builder().rappId(rappId).name(String.valueOf(rappId)).packageName(validRappFile)
60 .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build();
61 rappCacheService.putRapp(rapp);
62 mockMvc.perform(MockMvcRequestBuilders.get("/rapps/{rapp_id}", rappId)).andExpect(status().isOk())
63 .andExpect(jsonPath("$.rappId").value(rappId.toString()))
64 .andExpect(jsonPath("$.state").value(RappState.COMMISSIONED.name()));
68 void testGetInvalidRapp() throws Exception {
69 mockMvc.perform(MockMvcRequestBuilders.get("/rapps/{rapp_id}", UUID.randomUUID()))
70 .andExpect(status().isBadRequest());
74 void testCreateRapp() throws Exception {
75 String rappCsarPath = validCsarFileLocation + File.separator + validRappFile;
76 MockMultipartFile multipartFile =
77 new MockMultipartFile("file", validRappFile, ContentType.MULTIPART_FORM_DATA.getMimeType(),
78 new FileInputStream(rappCsarPath));
79 mockMvc.perform(MockMvcRequestBuilders.multipart("/rapps/{rapp_id}", UUID.randomUUID()).file(multipartFile))
80 .andExpect(status().isAccepted());
84 void testCreateInvalidRapp() throws Exception {
85 String rappCsarPath = validCsarFileLocation + File.separator + invalidRappFile;
86 MockMultipartFile multipartFile =
87 new MockMultipartFile("file", invalidRappFile, ContentType.MULTIPART_FORM_DATA.getMimeType(),
88 new FileInputStream(rappCsarPath));
89 mockMvc.perform(MockMvcRequestBuilders.multipart("/rapps/{rapp_id}", UUID.randomUUID()).file(multipartFile))
90 .andExpect(status().isBadRequest());
94 void testPrimeRapp() throws Exception {
95 UUID rappId = UUID.randomUUID();
96 Rapp rapp = Rapp.builder().rappId(rappId).name(String.valueOf(rappId)).packageName(validRappFile)
97 .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build();
98 rappCacheService.putRapp(rapp);
99 when(acmDeployer.primeRapp(any())).thenReturn(true);
100 RappPrimeOrder rappPrimeOrder = new RappPrimeOrder();
101 rappPrimeOrder.setPrimeOrder(PrimeOrder.PRIME);
102 mockMvc.perform(MockMvcRequestBuilders.put("/rapps/{rapp_id}", rappId).contentType(MediaType.APPLICATION_JSON)
103 .content(objectMapper.writeValueAsString(rappPrimeOrder))).andExpect(status().isOk());
107 @EnumSource(value = PrimeOrder.class, names = {"PRIME", "DEPRIME"})
108 void testPrimeRappFailure(PrimeOrder primeOrder) throws Exception {
109 RappPrimeOrder rappPrimeOrder = new RappPrimeOrder();
110 rappPrimeOrder.setPrimeOrder(primeOrder);
111 mockMvc.perform(MockMvcRequestBuilders.put("/rapps/{rapp_id}", UUID.randomUUID())
112 .contentType(MediaType.APPLICATION_JSON)
113 .content(objectMapper.writeValueAsString(rappPrimeOrder)))
114 .andExpect(status().isNotFound());
118 void testDeprimeRapp() throws Exception {
119 UUID rappId = UUID.randomUUID();
120 Rapp rapp = Rapp.builder().rappId(rappId).name(String.valueOf(rappId)).packageName(validRappFile)
121 .packageLocation(validCsarFileLocation).state(RappState.PRIMED).build();
122 rappCacheService.putRapp(rapp);
123 when(acmDeployer.deprimeRapp(any())).thenReturn(true);
124 RappPrimeOrder rappPrimeOrder = new RappPrimeOrder();
125 rappPrimeOrder.setPrimeOrder(PrimeOrder.DEPRIME);
126 mockMvc.perform(MockMvcRequestBuilders.put("/rapps/{rapp_id}", rappId).contentType(MediaType.APPLICATION_JSON)
127 .content(objectMapper.writeValueAsString(rappPrimeOrder))).andExpect(status().isOk());
131 void testDeleteRapp() throws Exception {
132 UUID rappId = UUID.randomUUID();
133 Rapp rapp = Rapp.builder().rappId(rappId).name(String.valueOf(rappId)).packageName(validRappFile)
134 .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build();
135 rappCacheService.putRapp(rapp);
136 mockMvc.perform(MockMvcRequestBuilders.delete("/rapps/{rapp_id}", rappId)).andExpect(status().isOk());
140 void testDeleteRappFailure() throws Exception {
141 mockMvc.perform(MockMvcRequestBuilders.delete("/rapps/{rapp_id}", UUID.randomUUID()))
142 .andExpect(status().isNotFound());