896eef3d3dfe698426ee0cc9692952f3ef644cee
[nonrtric/plt/rappmanager.git] / rapp-manager-application / src / test / java / com / oransc / rappmanager / rest / RappControllerTest.java
1 package com.oransc.rappmanager.rest;
2
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;
7
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;
15 import java.io.File;
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;
30
31 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
32 @AutoConfigureMockMvc
33 public class RappControllerTest {
34
35     @Autowired
36     private MockMvc mockMvc;
37
38     @Autowired
39     private RappCacheService rappCacheService;
40
41     @MockBean
42     AcmDeployer acmDeployer;
43
44     private final String validRappFile = "valid-rapp-package.csar";
45
46     private final String invalidRappFile = "invalid-rapp-package.csar";
47     private final String validCsarFileLocation = "src/test/resources/";
48
49     private final ObjectMapper objectMapper = new ObjectMapper();
50
51     @Test
52     void testGetRapps() throws Exception {
53         mockMvc.perform(MockMvcRequestBuilders.get("/rapps")).andExpect(status().isOk());
54     }
55
56     @Test
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()));
65     }
66
67     @Test
68     void testGetInvalidRapp() throws Exception {
69         mockMvc.perform(MockMvcRequestBuilders.get("/rapps/{rapp_id}", UUID.randomUUID()))
70                 .andExpect(status().isBadRequest());
71     }
72
73     @Test
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());
81     }
82
83     @Test
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());
91     }
92
93     @Test
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());
104     }
105
106     @ParameterizedTest
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());
115     }
116
117     @Test
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());
128     }
129
130     @Test
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());
137     }
138
139     @Test
140     void testDeleteRappFailure() throws Exception {
141         mockMvc.perform(MockMvcRequestBuilders.delete("/rapps/{rapp_id}", UUID.randomUUID()))
142                 .andExpect(status().isNotFound());
143     }
144 }