[SO] Release so 1.13.0 image
[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.assertNotEquals;
31 import static org.junit.Assert.assertNull;
32 import static org.junit.Assert.assertTrue;
33 import static org.onap.logging.filter.base.Constants.HttpHeaders.ONAP_REQUEST_ID;
34 import static org.onap.so.logger.HttpHeadersConstants.REQUESTOR_ID;
35 import static org.onap.logging.filter.base.Constants.HttpHeaders.ONAP_PARTNER_NAME;
36 import static org.onap.logging.filter.base.Constants.HttpHeaders.TRANSACTION_ID;
37 import java.io.IOException;
38 import java.net.MalformedURLException;
39 import java.net.URL;
40 import java.nio.file.Files;
41 import java.nio.file.Paths;
42 import java.util.HashMap;
43 import java.util.List;
44 import javax.ws.rs.core.MediaType;
45 import org.apache.http.HttpStatus;
46 import org.junit.Before;
47 import org.junit.Test;
48 import org.onap.logging.ref.slf4j.ONAPLogConstants;
49 import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException;
50 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
51 import org.onap.so.db.catalog.beans.Service;
52 import org.onap.so.db.request.beans.InfraActiveRequests;
53 import org.onap.so.logger.HttpHeadersConstants;
54 import org.onap.so.serviceinstancebeans.ModelInfo;
55 import org.onap.so.serviceinstancebeans.ModelType;
56 import org.onap.so.serviceinstancebeans.RequestDetails;
57 import org.onap.so.serviceinstancebeans.RequestInfo;
58 import org.onap.so.serviceinstancebeans.RequestParameters;
59 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
60 import org.springframework.beans.factory.annotation.Autowired;
61 import org.springframework.beans.factory.annotation.Value;
62 import org.springframework.http.HttpEntity;
63 import org.springframework.http.HttpHeaders;
64 import org.springframework.http.HttpMethod;
65 import org.springframework.http.ResponseEntity;
66 import org.springframework.web.util.UriComponentsBuilder;
67 import com.fasterxml.jackson.annotation.JsonInclude.Include;
68 import com.fasterxml.jackson.core.JsonParseException;
69 import com.fasterxml.jackson.core.JsonProcessingException;
70 import com.fasterxml.jackson.databind.DeserializationFeature;
71 import com.fasterxml.jackson.databind.JsonMappingException;
72 import com.fasterxml.jackson.databind.ObjectMapper;
73
74 public class RequestHandlerUtilsTest extends BaseTest {
75
76     private final ObjectMapper mapper = new ObjectMapper();
77     private ObjectMapper errorMapper = new ObjectMapper();
78
79     @Autowired
80     private RequestHandlerUtils requestHandlerUtils;
81
82     @Autowired
83     private CamundaRequestHandler camundaRequestHandler;
84
85     @Value("${wiremock.server.port}")
86     private String wiremockPort;
87
88     private URL initialUrl;
89     private int initialPort;
90     private HttpHeaders headers;
91
92     @Before
93     public void beforeClass() {
94         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
95         errorMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
96         errorMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
97         // set headers
98         headers = new HttpHeaders();
99         headers.set(ONAPLogConstants.Headers.PARTNER_NAME, "test_name");
100         headers.set(TRANSACTION_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
101         headers.set(ONAP_REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
102         headers.set(ONAPLogConstants.MDCs.REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
103         headers.set(ONAP_PARTNER_NAME, "VID");
104         headers.set(REQUESTOR_ID, "xxxxxx");
105         try { // generate one-time port number to avoid RANDOM port number later.
106             initialUrl = new URL(createURLWithPort(Constants.ORCHESTRATION_REQUESTS_PATH));
107             initialPort = initialUrl.getPort();
108         } catch (MalformedURLException e) {
109             e.printStackTrace();
110         }
111         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests.*")).willReturn(aResponse()
112                 .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON).withStatus(HttpStatus.SC_OK)));
113     }
114
115     public String inputStream(String JsonInput) throws IOException {
116         JsonInput = "src/test/resources/ServiceInstanceTest" + JsonInput;
117         return new String(Files.readAllBytes(Paths.get(JsonInput)));
118     }
119
120     public ResponseEntity<String> sendRequest(String requestJson, String uriPath, HttpMethod reqMethod,
121             HttpHeaders headers) {
122
123         if (!headers.containsKey(HttpHeaders.ACCEPT)) {
124             headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
125         }
126         if (!headers.containsKey(HttpHeaders.CONTENT_TYPE)) {
127             headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
128         }
129
130         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(uriPath, initialPort));
131
132         HttpEntity<String> request = new HttpEntity<>(requestJson, headers);
133
134         return restTemplate.exchange(builder.toUriString(), reqMethod, request, String.class);
135     }
136
137     public ResponseEntity<String> sendRequest(String requestJson, String uriPath, HttpMethod reqMethod) {
138         return sendRequest(requestJson, uriPath, reqMethod, new HttpHeaders());
139     }
140
141     @Test
142     public void test_mapJSONtoMSOStyle() throws IOException {
143         ObjectMapper mapper = new ObjectMapper();
144         mapper.setSerializationInclusion(Include.NON_NULL);
145         String testRequest = inputStream("/ServiceInstanceDefault.json");
146         String resultString = requestHandlerUtils.mapJSONtoMSOStyle(testRequest, null, false, null);
147         ServiceInstancesRequest sir = mapper.readValue(resultString, ServiceInstancesRequest.class);
148         ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
149         assertEquals("f7ce78bb-423b-11e7-93f8-0050569a796", modelInfo.getModelCustomizationUuid());
150         assertEquals("modelInstanceName", modelInfo.getModelInstanceName());
151         assertEquals("f7ce78bb-423b-11e7-93f8-0050569a7965", modelInfo.getModelInvariantUuid());
152         assertEquals("10", modelInfo.getModelUuid());
153
154     }
155
156     @Test
157     public void test_mapJSONtoMSOStyleCustomWorkflowRequest() throws IOException {
158         ObjectMapper mapper = new ObjectMapper();
159         mapper.setSerializationInclusion(Include.NON_NULL);
160         String testRequest = inputStream("/CustomWorkflowRequest.json");
161         String resultString =
162                 requestHandlerUtils.mapJSONtoMSOStyle(testRequest, null, true, Action.inPlaceSoftwareUpdate);
163         ServiceInstancesRequest sir = mapper.readValue(resultString, ServiceInstancesRequest.class);
164         assertEquals(sir.getRequestDetails().getCloudConfiguration().getTenantId(), "88a6ca3ee0394ade9403f075db23167e");
165         assertNotEquals(sir.getRequestDetails().getRequestParameters().getUserParams().size(), 0);
166     }
167
168
169     @Test
170     public void test_mapJSONtoMSOStyleUsePreload() throws IOException {
171         ObjectMapper mapper = new ObjectMapper();
172         mapper.setSerializationInclusion(Include.NON_NULL);
173         String testRequest = inputStream("/ServiceInstanceDefault.json");
174         ServiceInstancesRequest sir = new ServiceInstancesRequest();
175         RequestDetails rd = new RequestDetails();
176         RequestParameters rp = new RequestParameters();
177         rp.setUsePreload(true);
178         rd.setRequestParameters(rp);
179         sir.setRequestDetails(rd);
180         String resultString = requestHandlerUtils.mapJSONtoMSOStyle(testRequest, sir, false, null);
181         ServiceInstancesRequest sir1 = mapper.readValue(resultString, ServiceInstancesRequest.class);
182         assertTrue(sir1.getRequestDetails().getRequestParameters().getUsePreload());
183     }
184
185     @Test
186     public void setServiceTypeTestALaCarte() throws JsonProcessingException {
187         String requestScope = ModelType.service.toString();
188         Boolean aLaCarteFlag = true;
189         ServiceInstancesRequest sir = new ServiceInstancesRequest();
190         RequestDetails requestDetails = new RequestDetails();
191         RequestInfo requestInfo = new RequestInfo();
192         requestInfo.setSource("VID");
193         requestDetails.setRequestInfo(requestInfo);
194         sir.setRequestDetails(requestDetails);
195         Service defaultService = new Service();
196         defaultService.setServiceType("testServiceTypeALaCarte");
197
198         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
199                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
200                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
201
202         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
203         assertEquals(serviceType, "testServiceTypeALaCarte");
204     }
205
206     @Test
207     public void setServiceTypeTest() throws JsonProcessingException {
208         String requestScope = ModelType.service.toString();
209         Boolean aLaCarteFlag = false;
210         ServiceInstancesRequest sir = new ServiceInstancesRequest();
211         RequestDetails requestDetails = new RequestDetails();
212         RequestInfo requestInfo = new RequestInfo();
213         ModelInfo modelInfo = new ModelInfo();
214         modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
215         requestInfo.setSource("VID");
216         requestDetails.setModelInfo(modelInfo);
217         requestDetails.setRequestInfo(requestInfo);
218         sir.setRequestDetails(requestDetails);
219         Service defaultService = new Service();
220         defaultService.setServiceType("testServiceType");
221
222         wireMockServer.stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
223                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
224                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
225
226         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
227         assertEquals(serviceType, "testServiceType");
228     }
229
230     @Test
231     public void setServiceTypeTestDefault() throws JsonProcessingException {
232         String requestScope = ModelType.service.toString();
233         Boolean aLaCarteFlag = false;
234         ServiceInstancesRequest sir = new ServiceInstancesRequest();
235         RequestDetails requestDetails = new RequestDetails();
236         RequestInfo requestInfo = new RequestInfo();
237         ModelInfo modelInfo = new ModelInfo();
238         modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
239         requestInfo.setSource("VID");
240         requestDetails.setModelInfo(modelInfo);
241         requestDetails.setRequestInfo(requestInfo);
242         sir.setRequestDetails(requestDetails);
243         Service defaultService = new Service();
244         defaultService.setServiceType("testServiceType");
245
246         wireMockServer.stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
247                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
248                         .withStatus(HttpStatus.SC_NOT_FOUND)));
249         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
250                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
251                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
252
253         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
254         assertEquals(serviceType, "testServiceType");
255     }
256
257     @Test
258     public void setServiceTypeTestNetwork() throws JsonProcessingException {
259         String requestScope = ModelType.network.toString();
260         Boolean aLaCarteFlag = null;
261         ServiceInstancesRequest sir = new ServiceInstancesRequest();
262         RequestDetails requestDetails = new RequestDetails();
263         RequestInfo requestInfo = new RequestInfo();
264         ModelInfo modelInfo = new ModelInfo();
265         modelInfo.setModelName("networkModelName");
266         requestInfo.setSource("VID");
267         requestDetails.setModelInfo(modelInfo);
268         requestDetails.setRequestInfo(requestInfo);
269         sir.setRequestDetails(requestDetails);
270
271         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
272         assertEquals(serviceType, "networkModelName");
273     }
274
275     @Test
276     public void setServiceInstanceIdInstanceGroupTest() throws JsonParseException, JsonMappingException, IOException {
277         String requestScope = "instanceGroup";
278         ServiceInstancesRequest sir =
279                 mapper.readValue(inputStream("/CreateInstanceGroup.json"), ServiceInstancesRequest.class);
280         assertEquals("ddcbbf3d-f2c1-4ca0-8852-76a807285efc",
281                 requestHandlerUtils.setServiceInstanceId(requestScope, sir));
282     }
283
284     @Test
285     public void setServiceInstanceIdTest() {
286         String requestScope = "vnf";
287         ServiceInstancesRequest sir = new ServiceInstancesRequest();
288         sir.setServiceInstanceId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
289         assertEquals("f0a35706-efc4-4e27-80ea-a995d7a2a40f",
290                 requestHandlerUtils.setServiceInstanceId(requestScope, sir));
291     }
292
293     @Test
294     public void setServiceInstanceIdReturnNullTest() {
295         String requestScope = "vnf";
296         ServiceInstancesRequest sir = new ServiceInstancesRequest();
297         assertNull(requestHandlerUtils.setServiceInstanceId(requestScope, sir));
298     }
299
300     @Test
301     public void camundaHistoryCheckTest() throws ContactCamundaException, RequestDbFailureException {
302         wireMockServer.stubFor(get(
303                 ("/sobpmnengine/history/process-instance?processInstanceBusinessKey=f0a35706-efc4-4e27-80ea-a995d7a2a40f&active=true&maxResults=1"))
304                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
305                                 .withBodyFile("Camunda/HistoryCheckResponse.json")
306                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
307
308         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
309         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
310         boolean inProgress = false;
311         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
312         assertTrue(inProgress);
313     }
314
315     @Test
316     public void camundaHistoryCheckNoneFoundTest() throws ContactCamundaException, RequestDbFailureException {
317         wireMockServer.stubFor(get(
318                 ("/sobpmnengine/history/process-instance?processInstanceBusinessKey=f0a35706-efc4-4e27-80ea-a995d7a2a40f&active=true&maxResults=1"))
319                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
320                                 .withBody("[]").withStatus(org.apache.http.HttpStatus.SC_OK)));
321
322         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
323         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
324         boolean inProgress = false;
325         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
326         assertFalse(inProgress);
327     }
328
329     @Test
330     public void setCamundaHeadersTest() throws ContactCamundaException, RequestDbFailureException {
331         String encryptedAuth = "015E7ACF706C6BBF85F2079378BDD2896E226E09D13DC2784BA309E27D59AB9FAD3A5E039DF0BB8408"; // user:password
332         String key = "07a7159d3bf51a0e53be7a8f89699be7";
333         HttpHeaders headers = camundaRequestHandler.setCamundaHeaders(encryptedAuth, key);
334         List<org.springframework.http.MediaType> acceptedType = headers.getAccept();
335         String expectedAcceptedType = "application/json";
336         assertEquals(expectedAcceptedType, acceptedType.get(0).toString());
337         String basicAuth = headers.getFirst(HttpHeaders.AUTHORIZATION);
338         String expectedBasicAuth = "Basic dXNlcjpwYXNzd29yZA==";
339         assertEquals(expectedBasicAuth, basicAuth);
340     }
341
342     @Test
343     public void getServiceInstanceIdForValidationErrorTest() {
344         ServiceInstancesRequest sir = new ServiceInstancesRequest();
345         String requestScope = "vnf";
346         HashMap<String, String> instanceIdMap = new HashMap<String, String>();
347         instanceIdMap.put("serviceInstanceId", "testServiceInstanceId");
348         String serviceInstanceId =
349                 requestHandlerUtils.getServiceInstanceIdForValidationError(sir, instanceIdMap, requestScope).get();
350         assertEquals("testServiceInstanceId", serviceInstanceId);
351     }
352
353     @Test
354     public void getServiceInstanceIdForValidationErrorInstanceGroupTest() throws Exception {
355         ServiceInstancesRequest sir =
356                 mapper.readValue(inputStream("/CreateInstanceGroup.json"), ServiceInstancesRequest.class);
357         String requestScope = "instanceGroup";
358         String serviceInstanceId =
359                 requestHandlerUtils.getServiceInstanceIdForValidationError(sir, null, requestScope).get();
360         assertEquals("ddcbbf3d-f2c1-4ca0-8852-76a807285efc", serviceInstanceId);
361     }
362
363     @Test
364     public void getServiceInstanceIdForInstanceGroupTest() throws Exception {
365         ServiceInstancesRequest sir =
366                 mapper.readValue(inputStream("/CreateInstanceGroup.json"), ServiceInstancesRequest.class);
367         String requestScope = "instanceGroup";
368         String serviceInstanceId = requestHandlerUtils.getServiceInstanceIdForInstanceGroup(requestScope, sir).get();
369         assertEquals("ddcbbf3d-f2c1-4ca0-8852-76a807285efc", serviceInstanceId);
370     }
371
372 }