b1a6e9f8269637a786790cd564f2b2ed29e3bb50
[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.stubFor;
28 import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
29 import static org.junit.Assert.assertEquals;
30 import static org.junit.Assert.assertFalse;
31 import static org.junit.Assert.assertNull;
32 import static org.junit.Assert.assertTrue;
33 import static org.onap.so.logger.HttpHeadersConstants.ONAP_REQUEST_ID;
34 import static org.onap.so.logger.HttpHeadersConstants.REQUESTOR_ID;
35 import static org.onap.so.logger.MdcConstants.CLIENT_ID;
36
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.List;
43
44 import javax.ws.rs.container.ContainerRequestContext;
45 import javax.ws.rs.core.MediaType;
46
47 import org.apache.http.HttpStatus;
48 import org.junit.Before;
49
50 import org.junit.Test;
51 import org.onap.logging.ref.slf4j.ONAPLogConstants;
52 import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException;
53 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
54 import org.onap.so.db.catalog.beans.Service;
55 import org.onap.so.db.request.beans.InfraActiveRequests;
56 import org.onap.so.logger.HttpHeadersConstants;
57 import org.onap.so.serviceinstancebeans.ModelInfo;
58 import org.onap.so.serviceinstancebeans.RequestDetails;
59 import org.onap.so.serviceinstancebeans.RequestInfo;
60 import org.onap.so.serviceinstancebeans.RequestParameters;
61 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
62 import org.springframework.beans.factory.annotation.Autowired;
63 import org.springframework.beans.factory.annotation.Value;
64 import org.springframework.http.HttpEntity;
65 import org.springframework.http.HttpHeaders;
66 import org.springframework.http.HttpMethod;
67 import org.springframework.http.ResponseEntity;
68 import org.springframework.web.util.UriComponentsBuilder;
69
70 import com.fasterxml.jackson.annotation.JsonInclude.Include;
71 import com.fasterxml.jackson.core.JsonParseException;
72 import com.fasterxml.jackson.core.JsonProcessingException;
73 import com.fasterxml.jackson.databind.DeserializationFeature;
74 import com.fasterxml.jackson.databind.JsonMappingException;
75 import com.fasterxml.jackson.databind.ObjectMapper;
76
77 public class RequestHandlerUtilsTest extends BaseTest{
78
79         private final ObjectMapper mapper = new ObjectMapper();
80         private ObjectMapper errorMapper = new ObjectMapper();
81         
82     @Autowired
83     private RequestHandlerUtils requestHandlerUtils;
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(HttpHeadersConstants.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(CLIENT_ID, "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                 stubFor(post(urlMatching(".*/infraActiveRequests.*"))
112                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
113                                                 .withStatus(HttpStatus.SC_OK)));
114         }
115         
116     public String inputStream(String JsonInput)throws IOException{
117         JsonInput = "src/test/resources/ServiceInstanceTest" + JsonInput;
118         return new String(Files.readAllBytes(Paths.get(JsonInput)));
119     }
120     
121         public ResponseEntity<String> sendRequest(String requestJson, String uriPath, HttpMethod reqMethod, 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(),
135                 reqMethod, request, String.class);
136     }
137         
138     public ResponseEntity<String> sendRequest(String requestJson, String uriPath, HttpMethod reqMethod){
139         return sendRequest(requestJson, uriPath, reqMethod, new HttpHeaders());
140     }
141
142     @Test
143     public void test_mapJSONtoMSOStyle() throws IOException{
144         ObjectMapper mapper = new ObjectMapper();
145         mapper.setSerializationInclusion(Include.NON_NULL);
146         String testRequest= inputStream("/ServiceInstanceDefault.json");
147         String resultString = requestHandlerUtils.mapJSONtoMSOStyle(testRequest, null, false, null);
148         ServiceInstancesRequest sir = mapper.readValue(resultString, ServiceInstancesRequest.class);
149         ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
150         assertEquals("f7ce78bb-423b-11e7-93f8-0050569a796",modelInfo.getModelCustomizationUuid());
151         assertEquals("modelInstanceName",modelInfo.getModelInstanceName());
152         assertEquals("f7ce78bb-423b-11e7-93f8-0050569a7965",modelInfo.getModelInvariantUuid());
153         assertEquals("10",modelInfo.getModelUuid());
154
155     }
156     
157     
158     @Test
159     public void test_mapJSONtoMSOStyleUsePreload() throws IOException{
160         ObjectMapper mapper = new ObjectMapper();
161         mapper.setSerializationInclusion(Include.NON_NULL);
162         String testRequest= inputStream("/ServiceInstanceDefault.json");
163         ServiceInstancesRequest sir = new ServiceInstancesRequest();
164         RequestDetails rd = new RequestDetails();
165         RequestParameters rp = new RequestParameters();
166         rp.setUsePreload(true);
167         rd.setRequestParameters(rp);
168         sir.setRequestDetails(rd);
169         String resultString = requestHandlerUtils.mapJSONtoMSOStyle(testRequest, sir, false, null);
170         ServiceInstancesRequest sir1 = mapper.readValue(resultString, ServiceInstancesRequest.class);
171         assertTrue(sir1.getRequestDetails().getRequestParameters().getUsePreload());
172     }   
173   
174     @Test
175     public void setServiceTypeTestALaCarte() throws JsonProcessingException{
176         String requestScope = ModelType.service.toString();
177         Boolean aLaCarteFlag = true;
178         ServiceInstancesRequest sir = new ServiceInstancesRequest();
179         RequestDetails requestDetails = new RequestDetails();
180         RequestInfo requestInfo = new RequestInfo();
181         requestInfo.setSource("VID");
182         requestDetails.setRequestInfo(requestInfo);
183         sir.setRequestDetails(requestDetails);
184                 Service defaultService = new Service();
185                 defaultService.setServiceType("testServiceTypeALaCarte");
186         
187         stubFor(get(urlMatching(".*/service/search/.*"))
188                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
189                         .withBody(mapper.writeValueAsString(defaultService))
190                         .withStatus(HttpStatus.SC_OK)));
191         
192         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
193         assertEquals(serviceType, "testServiceTypeALaCarte");
194     }
195     @Test
196     public void setServiceTypeTest() throws JsonProcessingException{
197         String requestScope = ModelType.service.toString();
198         Boolean aLaCarteFlag = false;
199         ServiceInstancesRequest sir = new ServiceInstancesRequest();
200         RequestDetails requestDetails = new RequestDetails();
201         RequestInfo requestInfo = new RequestInfo();
202         ModelInfo modelInfo = new ModelInfo();
203         modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
204         requestInfo.setSource("VID");
205         requestDetails.setModelInfo(modelInfo);
206         requestDetails.setRequestInfo(requestInfo);
207         sir.setRequestDetails(requestDetails);
208                 Service defaultService = new Service();
209                 defaultService.setServiceType("testServiceType");
210         
211         stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
212                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
213                         .withBody(mapper.writeValueAsString(defaultService))
214                         .withStatus(HttpStatus.SC_OK)));
215         
216         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
217         assertEquals(serviceType, "testServiceType");
218     }
219     @Test
220     public void setServiceTypeTestDefault() throws JsonProcessingException{
221         String requestScope = ModelType.service.toString();
222         Boolean aLaCarteFlag = false;
223         ServiceInstancesRequest sir = new ServiceInstancesRequest();
224         RequestDetails requestDetails = new RequestDetails();
225         RequestInfo requestInfo = new RequestInfo();
226         ModelInfo modelInfo = new ModelInfo();
227         modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
228         requestInfo.setSource("VID");
229         requestDetails.setModelInfo(modelInfo);
230         requestDetails.setRequestInfo(requestInfo);
231         sir.setRequestDetails(requestDetails);
232                 Service defaultService = new Service();
233                 defaultService.setServiceType("testServiceType");
234         
235         stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
236                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
237                         .withStatus(HttpStatus.SC_NOT_FOUND)));
238         stubFor(get(urlMatching(".*/service/search/.*"))
239                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
240                         .withBody(mapper.writeValueAsString(defaultService))
241                         .withStatus(HttpStatus.SC_OK)));
242         
243         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
244         assertEquals(serviceType, "testServiceType");
245     }
246     @Test
247     public void setServiceTypeTestNetwork() throws JsonProcessingException{
248         String requestScope = ModelType.network.toString();
249         Boolean aLaCarteFlag = null;
250         ServiceInstancesRequest sir = new ServiceInstancesRequest();
251         RequestDetails requestDetails = new RequestDetails();
252         RequestInfo requestInfo = new RequestInfo();
253         ModelInfo modelInfo = new ModelInfo();
254         modelInfo.setModelName("networkModelName");
255         requestInfo.setSource("VID");
256         requestDetails.setModelInfo(modelInfo);
257         requestDetails.setRequestInfo(requestInfo);
258         sir.setRequestDetails(requestDetails);
259         
260         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
261         assertEquals(serviceType, "networkModelName");
262     }
263     @Test
264     public void setServiceInstanceIdInstanceGroupTest() throws JsonParseException, JsonMappingException, IOException{
265         String requestScope = "instanceGroup";
266         ServiceInstancesRequest sir = mapper.readValue(inputStream("/CreateInstanceGroup.json"), ServiceInstancesRequest.class);
267         assertEquals("ddcbbf3d-f2c1-4ca0-8852-76a807285efc", requestHandlerUtils.setServiceInstanceId(requestScope, sir));
268     }
269     @Test
270     public void setServiceInstanceIdTest(){
271         String requestScope = "vnf";
272         ServiceInstancesRequest sir = new ServiceInstancesRequest();
273         sir.setServiceInstanceId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
274         assertEquals("f0a35706-efc4-4e27-80ea-a995d7a2a40f", requestHandlerUtils.setServiceInstanceId(requestScope, sir));
275     }
276     @Test
277     public void setServiceInstanceIdReturnNullTest(){
278         String requestScope = "vnf";
279         ServiceInstancesRequest sir = new ServiceInstancesRequest();
280         assertNull(requestHandlerUtils.setServiceInstanceId(requestScope, sir));
281     }
282     @Test
283     public void camundaHistoryCheckTest() throws ContactCamundaException, RequestDbFailureException{
284         stubFor(get(("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
285                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
286                         .withBodyFile("Camunda/HistoryCheckResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
287         
288         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
289         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
290         boolean inProgress = false;
291         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
292         assertTrue(inProgress);
293     }
294     @Test
295     public void camundaHistoryCheckNoneFoundTest() throws ContactCamundaException, RequestDbFailureException{
296         stubFor(get(("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
297                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
298                         .withBody("[]").withStatus(org.apache.http.HttpStatus.SC_OK)));
299         
300         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
301         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
302         boolean inProgress = false;
303         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
304         assertFalse(inProgress);
305     }
306     @Test
307     public void camundaHistoryCheckNotInProgressTest()throws ContactCamundaException, RequestDbFailureException{
308         stubFor(get(("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
309                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
310                         .withBodyFile("Camunda/HistoryCheckResponseCompleted.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
311         
312         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
313         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
314         boolean inProgress = false;
315         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
316         assertFalse(inProgress);
317     }
318     @Test
319     public void setCamundaHeadersTest()throws ContactCamundaException, RequestDbFailureException{
320         String encryptedAuth   = "015E7ACF706C6BBF85F2079378BDD2896E226E09D13DC2784BA309E27D59AB9FAD3A5E039DF0BB8408"; // user:password
321         String key = "07a7159d3bf51a0e53be7a8f89699be7";
322         HttpHeaders headers = requestHandlerUtils.setCamundaHeaders(encryptedAuth, key);
323         List<org.springframework.http.MediaType> acceptedType = headers.getAccept();
324         String expectedAcceptedType = "application/json";
325         assertEquals(expectedAcceptedType, acceptedType.get(0).toString());
326         String basicAuth = headers.getFirst(HttpHeaders.AUTHORIZATION);
327         String expectedBasicAuth = "Basic dXNlcjpwYXNzd29yZA==";        
328         assertEquals(expectedBasicAuth, basicAuth);
329     }    
330     
331 }