a5f9514be22c9c496da7a3ad9371387cc572004b
[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
36 import java.io.IOException;
37 import java.net.MalformedURLException;
38 import java.net.URL;
39 import java.nio.file.Files;
40 import java.nio.file.Paths;
41 import java.util.List;
42
43 import javax.ws.rs.container.ContainerRequestContext;
44 import javax.ws.rs.core.MediaType;
45
46 import org.apache.http.HttpStatus;
47 import org.junit.Before;
48
49 import org.junit.Test;
50 import org.onap.logging.ref.slf4j.ONAPLogConstants;
51 import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException;
52 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
53 import org.onap.so.db.catalog.beans.Service;
54 import org.onap.so.db.request.beans.InfraActiveRequests;
55 import org.onap.so.logger.HttpHeadersConstants;
56 import org.onap.so.serviceinstancebeans.ModelInfo;
57 import org.onap.so.serviceinstancebeans.RequestDetails;
58 import org.onap.so.serviceinstancebeans.RequestInfo;
59 import org.onap.so.serviceinstancebeans.RequestParameters;
60 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
61 import org.springframework.beans.factory.annotation.Autowired;
62 import org.springframework.beans.factory.annotation.Value;
63 import org.springframework.http.HttpEntity;
64 import org.springframework.http.HttpHeaders;
65 import org.springframework.http.HttpMethod;
66 import org.springframework.http.ResponseEntity;
67 import org.springframework.web.util.UriComponentsBuilder;
68
69 import com.fasterxml.jackson.annotation.JsonInclude.Include;
70 import com.fasterxml.jackson.core.JsonParseException;
71 import com.fasterxml.jackson.core.JsonProcessingException;
72 import com.fasterxml.jackson.databind.DeserializationFeature;
73 import com.fasterxml.jackson.databind.JsonMappingException;
74 import com.fasterxml.jackson.databind.ObjectMapper;
75
76 public class RequestHandlerUtilsTest extends BaseTest{
77
78         private final ObjectMapper mapper = new ObjectMapper();
79         private ObjectMapper errorMapper = new ObjectMapper();
80         
81     @Autowired
82     private RequestHandlerUtils requestHandlerUtils;
83
84         @Value("${wiremock.server.port}")
85         private String wiremockPort;
86     
87     private URL initialUrl;
88     private int initialPort;
89     private HttpHeaders headers;
90
91         @Before
92         public  void beforeClass() {
93                 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
94                 errorMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
95                 errorMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
96         // set headers
97                 headers = new HttpHeaders();
98         headers.set(ONAPLogConstants.Headers.PARTNER_NAME, "test_name");        
99                 headers.set(HttpHeadersConstants.TRANSACTION_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
100         headers.set(ONAP_REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
101         headers.set(ONAPLogConstants.MDCs.REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
102         headers.set(CLIENT_ID, "VID");
103         headers.set(REQUESTOR_ID, "xxxxxx");
104                 try {  // generate one-time port number to avoid RANDOM port number later.
105                         initialUrl = new URL(createURLWithPort(Constants.ORCHESTRATION_REQUESTS_PATH));
106                         initialPort = initialUrl.getPort();
107                 } catch (MalformedURLException e) {
108                         e.printStackTrace();
109                 } 
110                 wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests.*"))
111                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
112                                                 .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, HttpHeaders headers){
121                 
122                 if (!headers.containsKey(HttpHeaders.ACCEPT)) {
123                         headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
124                 }
125                 if (!headers.containsKey(HttpHeaders.CONTENT_TYPE)) {
126                         headers.set(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON);
127                 }
128
129         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(uriPath, initialPort));
130
131         HttpEntity<String> request = new HttpEntity<>(requestJson, headers);
132
133         return restTemplate.exchange(builder.toUriString(),
134                 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     
157     @Test
158     public void test_mapJSONtoMSOStyleUsePreload() throws IOException{
159         ObjectMapper mapper = new ObjectMapper();
160         mapper.setSerializationInclusion(Include.NON_NULL);
161         String testRequest= inputStream("/ServiceInstanceDefault.json");
162         ServiceInstancesRequest sir = new ServiceInstancesRequest();
163         RequestDetails rd = new RequestDetails();
164         RequestParameters rp = new RequestParameters();
165         rp.setUsePreload(true);
166         rd.setRequestParameters(rp);
167         sir.setRequestDetails(rd);
168         String resultString = requestHandlerUtils.mapJSONtoMSOStyle(testRequest, sir, false, null);
169         ServiceInstancesRequest sir1 = mapper.readValue(resultString, ServiceInstancesRequest.class);
170         assertTrue(sir1.getRequestDetails().getRequestParameters().getUsePreload());
171     }   
172   
173     @Test
174     public void setServiceTypeTestALaCarte() throws JsonProcessingException{
175         String requestScope = ModelType.service.toString();
176         Boolean aLaCarteFlag = true;
177         ServiceInstancesRequest sir = new ServiceInstancesRequest();
178         RequestDetails requestDetails = new RequestDetails();
179         RequestInfo requestInfo = new RequestInfo();
180         requestInfo.setSource("VID");
181         requestDetails.setRequestInfo(requestInfo);
182         sir.setRequestDetails(requestDetails);
183                 Service defaultService = new Service();
184                 defaultService.setServiceType("testServiceTypeALaCarte");
185         
186                 wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
187                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
188                         .withBody(mapper.writeValueAsString(defaultService))
189                         .withStatus(HttpStatus.SC_OK)));
190         
191         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
192         assertEquals(serviceType, "testServiceTypeALaCarte");
193     }
194     @Test
195     public void setServiceTypeTest() throws JsonProcessingException{
196         String requestScope = ModelType.service.toString();
197         Boolean aLaCarteFlag = false;
198         ServiceInstancesRequest sir = new ServiceInstancesRequest();
199         RequestDetails requestDetails = new RequestDetails();
200         RequestInfo requestInfo = new RequestInfo();
201         ModelInfo modelInfo = new ModelInfo();
202         modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
203         requestInfo.setSource("VID");
204         requestDetails.setModelInfo(modelInfo);
205         requestDetails.setRequestInfo(requestInfo);
206         sir.setRequestDetails(requestDetails);
207                 Service defaultService = new Service();
208                 defaultService.setServiceType("testServiceType");
209         
210                 wireMockServer.stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
211                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
212                         .withBody(mapper.writeValueAsString(defaultService))
213                         .withStatus(HttpStatus.SC_OK)));
214         
215         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
216         assertEquals(serviceType, "testServiceType");
217     }
218     @Test
219     public void setServiceTypeTestDefault() throws JsonProcessingException{
220         String requestScope = ModelType.service.toString();
221         Boolean aLaCarteFlag = false;
222         ServiceInstancesRequest sir = new ServiceInstancesRequest();
223         RequestDetails requestDetails = new RequestDetails();
224         RequestInfo requestInfo = new RequestInfo();
225         ModelInfo modelInfo = new ModelInfo();
226         modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
227         requestInfo.setSource("VID");
228         requestDetails.setModelInfo(modelInfo);
229         requestDetails.setRequestInfo(requestInfo);
230         sir.setRequestDetails(requestDetails);
231                 Service defaultService = new Service();
232                 defaultService.setServiceType("testServiceType");
233         
234                 wireMockServer.stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
235                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
236                         .withStatus(HttpStatus.SC_NOT_FOUND)));
237                 wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
238                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
239                         .withBody(mapper.writeValueAsString(defaultService))
240                         .withStatus(HttpStatus.SC_OK)));
241         
242         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
243         assertEquals(serviceType, "testServiceType");
244     }
245     @Test
246     public void setServiceTypeTestNetwork() throws JsonProcessingException{
247         String requestScope = ModelType.network.toString();
248         Boolean aLaCarteFlag = null;
249         ServiceInstancesRequest sir = new ServiceInstancesRequest();
250         RequestDetails requestDetails = new RequestDetails();
251         RequestInfo requestInfo = new RequestInfo();
252         ModelInfo modelInfo = new ModelInfo();
253         modelInfo.setModelName("networkModelName");
254         requestInfo.setSource("VID");
255         requestDetails.setModelInfo(modelInfo);
256         requestDetails.setRequestInfo(requestInfo);
257         sir.setRequestDetails(requestDetails);
258         
259         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
260         assertEquals(serviceType, "networkModelName");
261     }
262     @Test
263     public void setServiceInstanceIdInstanceGroupTest() throws JsonParseException, JsonMappingException, IOException{
264         String requestScope = "instanceGroup";
265         ServiceInstancesRequest sir = mapper.readValue(inputStream("/CreateInstanceGroup.json"), ServiceInstancesRequest.class);
266         assertEquals("ddcbbf3d-f2c1-4ca0-8852-76a807285efc", requestHandlerUtils.setServiceInstanceId(requestScope, sir));
267     }
268     @Test
269     public void setServiceInstanceIdTest(){
270         String requestScope = "vnf";
271         ServiceInstancesRequest sir = new ServiceInstancesRequest();
272         sir.setServiceInstanceId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
273         assertEquals("f0a35706-efc4-4e27-80ea-a995d7a2a40f", requestHandlerUtils.setServiceInstanceId(requestScope, sir));
274     }
275     @Test
276     public void setServiceInstanceIdReturnNullTest(){
277         String requestScope = "vnf";
278         ServiceInstancesRequest sir = new ServiceInstancesRequest();
279         assertNull(requestHandlerUtils.setServiceInstanceId(requestScope, sir));
280     }
281     @Test
282     public void camundaHistoryCheckTest() throws ContactCamundaException, RequestDbFailureException{
283         wireMockServer.stubFor(get(("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
284                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
285                         .withBodyFile("Camunda/HistoryCheckResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
286         
287         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
288         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
289         boolean inProgress = false;
290         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
291         assertTrue(inProgress);
292     }
293     @Test
294     public void camundaHistoryCheckNoneFoundTest() throws ContactCamundaException, RequestDbFailureException{
295         wireMockServer.stubFor(get(("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
296                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
297                         .withBody("[]").withStatus(org.apache.http.HttpStatus.SC_OK)));
298         
299         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
300         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
301         boolean inProgress = false;
302         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
303         assertFalse(inProgress);
304     }
305     @Test
306     public void camundaHistoryCheckNotInProgressTest()throws ContactCamundaException, RequestDbFailureException{
307         wireMockServer.stubFor(get(("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
308                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
309                         .withBodyFile("Camunda/HistoryCheckResponseCompleted.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
310         
311         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
312         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
313         boolean inProgress = false;
314         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
315         assertFalse(inProgress);
316     }
317     @Test
318     public void setCamundaHeadersTest()throws ContactCamundaException, RequestDbFailureException{
319         String encryptedAuth   = "015E7ACF706C6BBF85F2079378BDD2896E226E09D13DC2784BA309E27D59AB9FAD3A5E039DF0BB8408"; // user:password
320         String key = "07a7159d3bf51a0e53be7a8f89699be7";
321         HttpHeaders headers = requestHandlerUtils.setCamundaHeaders(encryptedAuth, key);
322         List<org.springframework.http.MediaType> acceptedType = headers.getAccept();
323         String expectedAcceptedType = "application/json";
324         assertEquals(expectedAcceptedType, acceptedType.get(0).toString());
325         String basicAuth = headers.getFirst(HttpHeaders.AUTHORIZATION);
326         String expectedBasicAuth = "Basic dXNlcjpwYXNzd29yZA==";        
327         assertEquals(expectedBasicAuth, basicAuth);
328     }    
329     
330 }