Replaced all tabs with spaces in java and pom.xml
[so.git] / mso-api-handlers / mso-api-handler-infra / src / test / java / org / onap / so / apihandlerinfra / RequestHandlerUtilsTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.apihandlerinfra;
22
23
24 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
25 import static com.github.tomakehurst.wiremock.client.WireMock.get;
26 import static com.github.tomakehurst.wiremock.client.WireMock.post;
27 import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
28 import static org.junit.Assert.assertEquals;
29 import static org.junit.Assert.assertFalse;
30 import static org.junit.Assert.assertNull;
31 import static org.junit.Assert.assertTrue;
32 import static org.onap.so.logger.HttpHeadersConstants.ONAP_REQUEST_ID;
33 import static org.onap.so.logger.HttpHeadersConstants.REQUESTOR_ID;
34 import static org.onap.so.logger.MdcConstants.CLIENT_ID;
35 import java.io.IOException;
36 import java.net.MalformedURLException;
37 import java.net.URL;
38 import java.nio.file.Files;
39 import java.nio.file.Paths;
40 import java.util.List;
41 import javax.ws.rs.container.ContainerRequestContext;
42 import javax.ws.rs.core.MediaType;
43 import org.apache.http.HttpStatus;
44 import org.junit.Before;
45 import org.junit.Test;
46 import org.onap.logging.ref.slf4j.ONAPLogConstants;
47 import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException;
48 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
49 import org.onap.so.db.catalog.beans.Service;
50 import org.onap.so.db.request.beans.InfraActiveRequests;
51 import org.onap.so.logger.HttpHeadersConstants;
52 import org.onap.so.serviceinstancebeans.ModelInfo;
53 import org.onap.so.serviceinstancebeans.RequestDetails;
54 import org.onap.so.serviceinstancebeans.RequestInfo;
55 import org.onap.so.serviceinstancebeans.RequestParameters;
56 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
57 import org.springframework.beans.factory.annotation.Autowired;
58 import org.springframework.beans.factory.annotation.Value;
59 import org.springframework.http.HttpEntity;
60 import org.springframework.http.HttpHeaders;
61 import org.springframework.http.HttpMethod;
62 import org.springframework.http.ResponseEntity;
63 import org.springframework.web.util.UriComponentsBuilder;
64 import com.fasterxml.jackson.annotation.JsonInclude.Include;
65 import com.fasterxml.jackson.core.JsonParseException;
66 import com.fasterxml.jackson.core.JsonProcessingException;
67 import com.fasterxml.jackson.databind.DeserializationFeature;
68 import com.fasterxml.jackson.databind.JsonMappingException;
69 import com.fasterxml.jackson.databind.ObjectMapper;
70
71 public class RequestHandlerUtilsTest extends BaseTest {
72
73     private final ObjectMapper mapper = new ObjectMapper();
74     private ObjectMapper errorMapper = new ObjectMapper();
75
76     @Autowired
77     private RequestHandlerUtils requestHandlerUtils;
78
79     @Value("${wiremock.server.port}")
80     private String wiremockPort;
81
82     private URL initialUrl;
83     private int initialPort;
84     private HttpHeaders headers;
85
86     @Before
87     public void beforeClass() {
88         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
89         errorMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
90         errorMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
91         // set headers
92         headers = new HttpHeaders();
93         headers.set(ONAPLogConstants.Headers.PARTNER_NAME, "test_name");
94         headers.set(HttpHeadersConstants.TRANSACTION_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
95         headers.set(ONAP_REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
96         headers.set(ONAPLogConstants.MDCs.REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
97         headers.set(CLIENT_ID, "VID");
98         headers.set(REQUESTOR_ID, "xxxxxx");
99         try { // generate one-time port number to avoid RANDOM port number later.
100             initialUrl = new URL(createURLWithPort(Constants.ORCHESTRATION_REQUESTS_PATH));
101             initialPort = initialUrl.getPort();
102         } catch (MalformedURLException e) {
103             e.printStackTrace();
104         }
105         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests.*")).willReturn(aResponse()
106                 .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON).withStatus(HttpStatus.SC_OK)));
107     }
108
109     public String inputStream(String JsonInput) throws IOException {
110         JsonInput = "src/test/resources/ServiceInstanceTest" + JsonInput;
111         return new String(Files.readAllBytes(Paths.get(JsonInput)));
112     }
113
114     public ResponseEntity<String> sendRequest(String requestJson, String uriPath, HttpMethod reqMethod,
115             HttpHeaders headers) {
116
117         if (!headers.containsKey(HttpHeaders.ACCEPT)) {
118             headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
119         }
120         if (!headers.containsKey(HttpHeaders.CONTENT_TYPE)) {
121             headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
122         }
123
124         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(uriPath, initialPort));
125
126         HttpEntity<String> request = new HttpEntity<>(requestJson, headers);
127
128         return restTemplate.exchange(builder.toUriString(), reqMethod, request, String.class);
129     }
130
131     public ResponseEntity<String> sendRequest(String requestJson, String uriPath, HttpMethod reqMethod) {
132         return sendRequest(requestJson, uriPath, reqMethod, new HttpHeaders());
133     }
134
135     @Test
136     public void test_mapJSONtoMSOStyle() throws IOException {
137         ObjectMapper mapper = new ObjectMapper();
138         mapper.setSerializationInclusion(Include.NON_NULL);
139         String testRequest = inputStream("/ServiceInstanceDefault.json");
140         String resultString = requestHandlerUtils.mapJSONtoMSOStyle(testRequest, null, false, null);
141         ServiceInstancesRequest sir = mapper.readValue(resultString, ServiceInstancesRequest.class);
142         ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
143         assertEquals("f7ce78bb-423b-11e7-93f8-0050569a796", modelInfo.getModelCustomizationUuid());
144         assertEquals("modelInstanceName", modelInfo.getModelInstanceName());
145         assertEquals("f7ce78bb-423b-11e7-93f8-0050569a7965", modelInfo.getModelInvariantUuid());
146         assertEquals("10", modelInfo.getModelUuid());
147
148     }
149
150
151     @Test
152     public void test_mapJSONtoMSOStyleUsePreload() throws IOException {
153         ObjectMapper mapper = new ObjectMapper();
154         mapper.setSerializationInclusion(Include.NON_NULL);
155         String testRequest = inputStream("/ServiceInstanceDefault.json");
156         ServiceInstancesRequest sir = new ServiceInstancesRequest();
157         RequestDetails rd = new RequestDetails();
158         RequestParameters rp = new RequestParameters();
159         rp.setUsePreload(true);
160         rd.setRequestParameters(rp);
161         sir.setRequestDetails(rd);
162         String resultString = requestHandlerUtils.mapJSONtoMSOStyle(testRequest, sir, false, null);
163         ServiceInstancesRequest sir1 = mapper.readValue(resultString, ServiceInstancesRequest.class);
164         assertTrue(sir1.getRequestDetails().getRequestParameters().getUsePreload());
165     }
166
167     @Test
168     public void setServiceTypeTestALaCarte() throws JsonProcessingException {
169         String requestScope = ModelType.service.toString();
170         Boolean aLaCarteFlag = true;
171         ServiceInstancesRequest sir = new ServiceInstancesRequest();
172         RequestDetails requestDetails = new RequestDetails();
173         RequestInfo requestInfo = new RequestInfo();
174         requestInfo.setSource("VID");
175         requestDetails.setRequestInfo(requestInfo);
176         sir.setRequestDetails(requestDetails);
177         Service defaultService = new Service();
178         defaultService.setServiceType("testServiceTypeALaCarte");
179
180         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
181                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
182                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
183
184         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
185         assertEquals(serviceType, "testServiceTypeALaCarte");
186     }
187
188     @Test
189     public void setServiceTypeTest() throws JsonProcessingException {
190         String requestScope = ModelType.service.toString();
191         Boolean aLaCarteFlag = false;
192         ServiceInstancesRequest sir = new ServiceInstancesRequest();
193         RequestDetails requestDetails = new RequestDetails();
194         RequestInfo requestInfo = new RequestInfo();
195         ModelInfo modelInfo = new ModelInfo();
196         modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
197         requestInfo.setSource("VID");
198         requestDetails.setModelInfo(modelInfo);
199         requestDetails.setRequestInfo(requestInfo);
200         sir.setRequestDetails(requestDetails);
201         Service defaultService = new Service();
202         defaultService.setServiceType("testServiceType");
203
204         wireMockServer.stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
205                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
206                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
207
208         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
209         assertEquals(serviceType, "testServiceType");
210     }
211
212     @Test
213     public void setServiceTypeTestDefault() throws JsonProcessingException {
214         String requestScope = ModelType.service.toString();
215         Boolean aLaCarteFlag = false;
216         ServiceInstancesRequest sir = new ServiceInstancesRequest();
217         RequestDetails requestDetails = new RequestDetails();
218         RequestInfo requestInfo = new RequestInfo();
219         ModelInfo modelInfo = new ModelInfo();
220         modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
221         requestInfo.setSource("VID");
222         requestDetails.setModelInfo(modelInfo);
223         requestDetails.setRequestInfo(requestInfo);
224         sir.setRequestDetails(requestDetails);
225         Service defaultService = new Service();
226         defaultService.setServiceType("testServiceType");
227
228         wireMockServer.stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
229                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
230                         .withStatus(HttpStatus.SC_NOT_FOUND)));
231         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
232                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
233                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
234
235         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
236         assertEquals(serviceType, "testServiceType");
237     }
238
239     @Test
240     public void setServiceTypeTestNetwork() throws JsonProcessingException {
241         String requestScope = ModelType.network.toString();
242         Boolean aLaCarteFlag = null;
243         ServiceInstancesRequest sir = new ServiceInstancesRequest();
244         RequestDetails requestDetails = new RequestDetails();
245         RequestInfo requestInfo = new RequestInfo();
246         ModelInfo modelInfo = new ModelInfo();
247         modelInfo.setModelName("networkModelName");
248         requestInfo.setSource("VID");
249         requestDetails.setModelInfo(modelInfo);
250         requestDetails.setRequestInfo(requestInfo);
251         sir.setRequestDetails(requestDetails);
252
253         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
254         assertEquals(serviceType, "networkModelName");
255     }
256
257     @Test
258     public void setServiceInstanceIdInstanceGroupTest() throws JsonParseException, JsonMappingException, IOException {
259         String requestScope = "instanceGroup";
260         ServiceInstancesRequest sir =
261                 mapper.readValue(inputStream("/CreateInstanceGroup.json"), ServiceInstancesRequest.class);
262         assertEquals("ddcbbf3d-f2c1-4ca0-8852-76a807285efc",
263                 requestHandlerUtils.setServiceInstanceId(requestScope, sir));
264     }
265
266     @Test
267     public void setServiceInstanceIdTest() {
268         String requestScope = "vnf";
269         ServiceInstancesRequest sir = new ServiceInstancesRequest();
270         sir.setServiceInstanceId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
271         assertEquals("f0a35706-efc4-4e27-80ea-a995d7a2a40f",
272                 requestHandlerUtils.setServiceInstanceId(requestScope, sir));
273     }
274
275     @Test
276     public void setServiceInstanceIdReturnNullTest() {
277         String requestScope = "vnf";
278         ServiceInstancesRequest sir = new ServiceInstancesRequest();
279         assertNull(requestHandlerUtils.setServiceInstanceId(requestScope, sir));
280     }
281
282     @Test
283     public void camundaHistoryCheckTest() throws ContactCamundaException, RequestDbFailureException {
284         wireMockServer.stubFor(get(
285                 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
286                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
287                                 .withBodyFile("Camunda/HistoryCheckResponse.json")
288                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
289
290         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
291         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
292         boolean inProgress = false;
293         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
294         assertTrue(inProgress);
295     }
296
297     @Test
298     public void camundaHistoryCheckNoneFoundTest() throws ContactCamundaException, RequestDbFailureException {
299         wireMockServer.stubFor(get(
300                 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
301                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
302                                 .withBody("[]").withStatus(org.apache.http.HttpStatus.SC_OK)));
303
304         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
305         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
306         boolean inProgress = false;
307         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
308         assertFalse(inProgress);
309     }
310
311     @Test
312     public void camundaHistoryCheckNotInProgressTest() throws ContactCamundaException, RequestDbFailureException {
313         wireMockServer.stubFor(get(
314                 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
315                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
316                                 .withBodyFile("Camunda/HistoryCheckResponseCompleted.json")
317                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
318
319         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
320         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
321         boolean inProgress = false;
322         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
323         assertFalse(inProgress);
324     }
325
326     @Test
327     public void setCamundaHeadersTest() throws ContactCamundaException, RequestDbFailureException {
328         String encryptedAuth = "015E7ACF706C6BBF85F2079378BDD2896E226E09D13DC2784BA309E27D59AB9FAD3A5E039DF0BB8408"; // user:password
329         String key = "07a7159d3bf51a0e53be7a8f89699be7";
330         HttpHeaders headers = requestHandlerUtils.setCamundaHeaders(encryptedAuth, key);
331         List<org.springframework.http.MediaType> acceptedType = headers.getAccept();
332         String expectedAcceptedType = "application/json";
333         assertEquals(expectedAcceptedType, acceptedType.get(0).toString());
334         String basicAuth = headers.getFirst(HttpHeaders.AUTHORIZATION);
335         String expectedBasicAuth = "Basic dXNlcjpwYXNzd29yZA==";
336         assertEquals(expectedBasicAuth, basicAuth);
337     }
338
339 }