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