2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.so.apihandlerinfra;
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;
38 import java.nio.file.Files;
39 import java.nio.file.Paths;
40 import java.util.List;
41 import javax.ws.rs.core.MediaType;
42 import org.apache.http.HttpStatus;
43 import org.junit.Before;
44 import org.junit.Test;
45 import org.onap.logging.ref.slf4j.ONAPLogConstants;
46 import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException;
47 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
48 import org.onap.so.db.catalog.beans.Service;
49 import org.onap.so.db.request.beans.InfraActiveRequests;
50 import org.onap.so.logger.HttpHeadersConstants;
51 import org.onap.so.serviceinstancebeans.ModelInfo;
52 import org.onap.so.serviceinstancebeans.ModelType;
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;
71 public class RequestHandlerUtilsTest extends BaseTest {
73 private final ObjectMapper mapper = new ObjectMapper();
74 private ObjectMapper errorMapper = new ObjectMapper();
77 private RequestHandlerUtils requestHandlerUtils;
80 private CamundaRequestHandler camundaRequestHandler;
82 @Value("${wiremock.server.port}")
83 private String wiremockPort;
85 private URL initialUrl;
86 private int initialPort;
87 private HttpHeaders headers;
90 public void beforeClass() {
91 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
92 errorMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
93 errorMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
95 headers = new HttpHeaders();
96 headers.set(ONAPLogConstants.Headers.PARTNER_NAME, "test_name");
97 headers.set(HttpHeadersConstants.TRANSACTION_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
98 headers.set(ONAP_REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
99 headers.set(ONAPLogConstants.MDCs.REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
100 headers.set(CLIENT_ID, "VID");
101 headers.set(REQUESTOR_ID, "xxxxxx");
102 try { // generate one-time port number to avoid RANDOM port number later.
103 initialUrl = new URL(createURLWithPort(Constants.ORCHESTRATION_REQUESTS_PATH));
104 initialPort = initialUrl.getPort();
105 } catch (MalformedURLException e) {
108 wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests.*")).willReturn(aResponse()
109 .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON).withStatus(HttpStatus.SC_OK)));
112 public String inputStream(String JsonInput) throws IOException {
113 JsonInput = "src/test/resources/ServiceInstanceTest" + JsonInput;
114 return new String(Files.readAllBytes(Paths.get(JsonInput)));
117 public ResponseEntity<String> sendRequest(String requestJson, String uriPath, HttpMethod reqMethod,
118 HttpHeaders headers) {
120 if (!headers.containsKey(HttpHeaders.ACCEPT)) {
121 headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
123 if (!headers.containsKey(HttpHeaders.CONTENT_TYPE)) {
124 headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
127 UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(uriPath, initialPort));
129 HttpEntity<String> request = new HttpEntity<>(requestJson, headers);
131 return restTemplate.exchange(builder.toUriString(), reqMethod, request, String.class);
134 public ResponseEntity<String> sendRequest(String requestJson, String uriPath, HttpMethod reqMethod) {
135 return sendRequest(requestJson, uriPath, reqMethod, new HttpHeaders());
139 public void test_mapJSONtoMSOStyle() throws IOException {
140 ObjectMapper mapper = new ObjectMapper();
141 mapper.setSerializationInclusion(Include.NON_NULL);
142 String testRequest = inputStream("/ServiceInstanceDefault.json");
143 String resultString = requestHandlerUtils.mapJSONtoMSOStyle(testRequest, null, false, null);
144 ServiceInstancesRequest sir = mapper.readValue(resultString, ServiceInstancesRequest.class);
145 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
146 assertEquals("f7ce78bb-423b-11e7-93f8-0050569a796", modelInfo.getModelCustomizationUuid());
147 assertEquals("modelInstanceName", modelInfo.getModelInstanceName());
148 assertEquals("f7ce78bb-423b-11e7-93f8-0050569a7965", modelInfo.getModelInvariantUuid());
149 assertEquals("10", modelInfo.getModelUuid());
155 public void test_mapJSONtoMSOStyleUsePreload() throws IOException {
156 ObjectMapper mapper = new ObjectMapper();
157 mapper.setSerializationInclusion(Include.NON_NULL);
158 String testRequest = inputStream("/ServiceInstanceDefault.json");
159 ServiceInstancesRequest sir = new ServiceInstancesRequest();
160 RequestDetails rd = new RequestDetails();
161 RequestParameters rp = new RequestParameters();
162 rp.setUsePreload(true);
163 rd.setRequestParameters(rp);
164 sir.setRequestDetails(rd);
165 String resultString = requestHandlerUtils.mapJSONtoMSOStyle(testRequest, sir, false, null);
166 ServiceInstancesRequest sir1 = mapper.readValue(resultString, ServiceInstancesRequest.class);
167 assertTrue(sir1.getRequestDetails().getRequestParameters().getUsePreload());
171 public void setServiceTypeTestALaCarte() throws JsonProcessingException {
172 String requestScope = ModelType.service.toString();
173 Boolean aLaCarteFlag = true;
174 ServiceInstancesRequest sir = new ServiceInstancesRequest();
175 RequestDetails requestDetails = new RequestDetails();
176 RequestInfo requestInfo = new RequestInfo();
177 requestInfo.setSource("VID");
178 requestDetails.setRequestInfo(requestInfo);
179 sir.setRequestDetails(requestDetails);
180 Service defaultService = new Service();
181 defaultService.setServiceType("testServiceTypeALaCarte");
183 wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
184 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
185 .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
187 String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
188 assertEquals(serviceType, "testServiceTypeALaCarte");
192 public void setServiceTypeTest() throws JsonProcessingException {
193 String requestScope = ModelType.service.toString();
194 Boolean aLaCarteFlag = false;
195 ServiceInstancesRequest sir = new ServiceInstancesRequest();
196 RequestDetails requestDetails = new RequestDetails();
197 RequestInfo requestInfo = new RequestInfo();
198 ModelInfo modelInfo = new ModelInfo();
199 modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
200 requestInfo.setSource("VID");
201 requestDetails.setModelInfo(modelInfo);
202 requestDetails.setRequestInfo(requestInfo);
203 sir.setRequestDetails(requestDetails);
204 Service defaultService = new Service();
205 defaultService.setServiceType("testServiceType");
207 wireMockServer.stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
208 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
209 .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
211 String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
212 assertEquals(serviceType, "testServiceType");
216 public void setServiceTypeTestDefault() throws JsonProcessingException {
217 String requestScope = ModelType.service.toString();
218 Boolean aLaCarteFlag = false;
219 ServiceInstancesRequest sir = new ServiceInstancesRequest();
220 RequestDetails requestDetails = new RequestDetails();
221 RequestInfo requestInfo = new RequestInfo();
222 ModelInfo modelInfo = new ModelInfo();
223 modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
224 requestInfo.setSource("VID");
225 requestDetails.setModelInfo(modelInfo);
226 requestDetails.setRequestInfo(requestInfo);
227 sir.setRequestDetails(requestDetails);
228 Service defaultService = new Service();
229 defaultService.setServiceType("testServiceType");
231 wireMockServer.stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
232 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
233 .withStatus(HttpStatus.SC_NOT_FOUND)));
234 wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
235 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
236 .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
238 String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
239 assertEquals(serviceType, "testServiceType");
243 public void setServiceTypeTestNetwork() throws JsonProcessingException {
244 String requestScope = ModelType.network.toString();
245 Boolean aLaCarteFlag = null;
246 ServiceInstancesRequest sir = new ServiceInstancesRequest();
247 RequestDetails requestDetails = new RequestDetails();
248 RequestInfo requestInfo = new RequestInfo();
249 ModelInfo modelInfo = new ModelInfo();
250 modelInfo.setModelName("networkModelName");
251 requestInfo.setSource("VID");
252 requestDetails.setModelInfo(modelInfo);
253 requestDetails.setRequestInfo(requestInfo);
254 sir.setRequestDetails(requestDetails);
256 String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
257 assertEquals(serviceType, "networkModelName");
261 public void setServiceInstanceIdInstanceGroupTest() throws JsonParseException, JsonMappingException, IOException {
262 String requestScope = "instanceGroup";
263 ServiceInstancesRequest sir =
264 mapper.readValue(inputStream("/CreateInstanceGroup.json"), ServiceInstancesRequest.class);
265 assertEquals("ddcbbf3d-f2c1-4ca0-8852-76a807285efc",
266 requestHandlerUtils.setServiceInstanceId(requestScope, sir));
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",
275 requestHandlerUtils.setServiceInstanceId(requestScope, sir));
279 public void setServiceInstanceIdReturnNullTest() {
280 String requestScope = "vnf";
281 ServiceInstancesRequest sir = new ServiceInstancesRequest();
282 assertNull(requestHandlerUtils.setServiceInstanceId(requestScope, sir));
286 public void camundaHistoryCheckTest() throws ContactCamundaException, RequestDbFailureException {
287 wireMockServer.stubFor(get(
288 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
289 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
290 .withBodyFile("Camunda/HistoryCheckResponse.json")
291 .withStatus(org.apache.http.HttpStatus.SC_OK)));
293 InfraActiveRequests duplicateRecord = new InfraActiveRequests();
294 duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
295 boolean inProgress = false;
296 inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
297 assertTrue(inProgress);
301 public void camundaHistoryCheckNoneFoundTest() throws ContactCamundaException, RequestDbFailureException {
302 wireMockServer.stubFor(get(
303 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
304 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
305 .withBody("[]").withStatus(org.apache.http.HttpStatus.SC_OK)));
307 InfraActiveRequests duplicateRecord = new InfraActiveRequests();
308 duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
309 boolean inProgress = false;
310 inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
311 assertFalse(inProgress);
315 public void camundaHistoryCheckNotInProgressTest() throws ContactCamundaException, RequestDbFailureException {
316 wireMockServer.stubFor(get(
317 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
318 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
319 .withBodyFile("Camunda/HistoryCheckResponseCompleted.json")
320 .withStatus(org.apache.http.HttpStatus.SC_OK)));
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);
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);