Removed MsoLogger class
[so.git] / mso-api-handlers / mso-api-handler-infra / src / test / java / org / onap / so / apihandlerinfra / ManualTasksTest.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 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
24 import static com.github.tomakehurst.wiremock.client.WireMock.post;
25 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
26 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
27 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
28 import static org.junit.Assert.assertEquals;
29 import static org.junit.Assert.assertNotNull;
30
31 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
32 import static org.onap.so.logger.MdcConstants.ECOMP_REQUEST_ID;
33 import static org.onap.so.logger.MdcConstants.ENDTIME;
34 import static org.onap.so.logger.MdcConstants.INVOCATION_ID;
35 import static org.onap.so.logger.MdcConstants.PARTNERNAME;
36 import static org.onap.so.logger.MdcConstants.RESPONSECODE;
37 import static org.onap.so.logger.MdcConstants.RESPONSEDESC;
38 import static org.onap.so.logger.MdcConstants.SERVICE_NAME;
39 import static org.onap.so.logger.MdcConstants.STATUSCODE;
40 import static org.onap.so.logger.MdcConstants.CLIENT_ID;
41
42 import java.io.IOException;
43 import java.util.Map;
44
45 import javax.ws.rs.core.MediaType;
46 import javax.ws.rs.core.Response;
47
48 import org.apache.http.HttpStatus;
49 import org.junit.Test;
50 import org.onap.logging.ref.slf4j.ONAPLogConstants;
51 import org.onap.so.apihandlerinfra.tasksbeans.RequestDetails;
52 import org.onap.so.apihandlerinfra.tasksbeans.RequestInfo;
53 import org.onap.so.apihandlerinfra.tasksbeans.TaskRequestReference;
54 import org.onap.so.apihandlerinfra.tasksbeans.TasksRequest;
55 import org.onap.so.apihandlerinfra.tasksbeans.ValidResponses;
56 import org.onap.so.serviceinstancebeans.RequestError;
57 import org.onap.so.serviceinstancebeans.ServiceException;
58 import org.springframework.http.HttpEntity;
59 import org.springframework.http.HttpHeaders;
60 import org.springframework.http.HttpMethod;
61 import org.springframework.http.ResponseEntity;
62 import org.springframework.web.util.UriComponentsBuilder;
63
64 import com.fasterxml.jackson.databind.DeserializationFeature;
65 import com.fasterxml.jackson.databind.ObjectMapper;
66 import com.github.tomakehurst.wiremock.http.Fault;
67
68 import ch.qos.logback.classic.spi.ILoggingEvent;
69
70
71 public class ManualTasksTest extends BaseTest{
72
73     private final String basePath = "/tasks/v1/";
74
75     @Test
76     public void testCreateOpEnvObjectMapperError() throws IOException {
77         TestAppender.events.clear();
78         stubFor(post(urlPathEqualTo("/sobpmnengine/task/55/complete"))
79                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK)));
80
81         String taskId = "55";
82         TasksRequest taskReq = new TasksRequest();
83         RequestDetails reqDetail = new RequestDetails();
84         RequestInfo reqInfo = new RequestInfo();
85         reqInfo.setRequestorId("testId");
86         reqInfo.setSource("testSource");        
87         reqInfo.setResponseValue(ValidResponses.skip);
88         reqDetail.setRequestInfo(reqInfo);
89         taskReq.setRequestDetails(reqDetail);
90
91         //expected response
92         TaskRequestReference expectedResponse = new TaskRequestReference();
93         expectedResponse.setTaskId(taskId);     
94         HttpHeaders headers = new HttpHeaders();
95         headers.set("Accept", MediaType.APPLICATION_JSON);
96         headers.set("Content-Type", MediaType.APPLICATION_JSON);
97         headers.set(ECOMP_REQUEST_ID, "987654321");
98         headers.set(CLIENT_ID, "VID");
99         HttpEntity<TasksRequest> entity = new HttpEntity<TasksRequest>(taskReq, headers);
100
101         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(basePath) + taskId + "/complete");           
102         ResponseEntity<String> response = restTemplate.exchange(
103                 builder.toUriString(),
104                 HttpMethod.POST, entity, String.class);
105
106
107         ObjectMapper mapper = new ObjectMapper();
108         mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
109         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
110
111         TaskRequestReference realResponse = mapper.readValue(response.getBody(), TaskRequestReference.class);
112
113
114         //then          
115         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());       
116         assertThat(realResponse, sameBeanAs(expectedResponse)); 
117         
118         for(ILoggingEvent logEvent : TestAppender.events)
119             if(logEvent.getLoggerName().equals("org.onap.so.logging.jaxrs.filter.jersey.JaxRsFilterLogging") &&
120                         logEvent.getMarker() != null && logEvent.getMarker().getName().equals("ENTRY")
121                     ){
122                 Map<String,String> mdc = logEvent.getMDCPropertyMap();
123                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP));
124                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.REQUEST_ID));
125                 assertNotNull(mdc.get(INVOCATION_ID));
126                 assertEquals("UNKNOWN",mdc.get(PARTNERNAME));
127                 assertEquals("tasks/v1/55/complete",mdc.get(SERVICE_NAME));
128                 assertEquals("INPROGRESS",mdc.get(STATUSCODE));
129             }else if(logEvent.getLoggerName().equals("org.onap.so.logging.jaxrs.filter.jersey.JaxRsFilterLogging") &&
130                         logEvent.getMarker() != null && logEvent.getMarker().getName().equals("EXIT")){
131                 Map<String,String> mdc = logEvent.getMDCPropertyMap();
132                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP));
133                 assertNotNull(mdc.get(ENDTIME));
134                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.REQUEST_ID));
135                 assertNotNull(mdc.get(INVOCATION_ID));
136                 assertEquals("202",mdc.get(RESPONSECODE));
137                 assertEquals("UNKNOWN",mdc.get(PARTNERNAME));
138                 assertEquals("tasks/v1/55/complete",mdc.get(SERVICE_NAME));
139                 assertEquals("COMPLETE",mdc.get(STATUSCODE));
140                 assertNotNull(mdc.get(RESPONSEDESC));
141                 assertEquals("application/json", response.getHeaders().get(HttpHeaders.CONTENT_TYPE).get(0));
142                 assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
143                 assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
144                 assertEquals("1.0.0", response.getHeaders().get("X-LatestVersion").get(0));
145             }
146     }
147     @Test
148     public void completeTaskMappingError() throws IOException {
149         String invalidRequest = "test";
150         RequestError expectedResponse = new RequestError();
151         ServiceException se = new ServiceException();
152         se.setMessageId("SVC0002");
153         se.setText("Mapping of request to JSON object failed: Unrecognized token \'test\': "
154                         + "was expecting \'null\', \'true\', \'false\' or NaN\n at [Source: (String)\"test\"; line: 1, column: 9]");
155         expectedResponse.setServiceException(se);
156         
157         HttpHeaders headers = new HttpHeaders();
158         headers.set("Accept", MediaType.APPLICATION_JSON);
159         headers.set("Content-Type", MediaType.APPLICATION_JSON);
160         headers.set(ECOMP_REQUEST_ID, "987654321");
161         headers.set(CLIENT_ID, "VID");
162         HttpEntity<String> entity = new HttpEntity<String>(invalidRequest, headers);
163
164         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(basePath) + "55" + "/complete");             
165         ResponseEntity<String> response = restTemplate.exchange(
166                 builder.toUriString(),
167                 HttpMethod.POST, entity, String.class);
168
169         ObjectMapper mapper = new ObjectMapper();
170         mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
171         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
172         
173         RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
174         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());    
175         assertThat(realResponse, sameBeanAs(expectedResponse));
176     }
177     @Test
178     public void completeTaskValidationError() throws IOException {
179         String taskId = "55";
180         TasksRequest taskReq = new TasksRequest();
181         RequestDetails reqDetail = new RequestDetails();
182         RequestInfo reqInfo = new RequestInfo();
183         reqInfo.setSource("testSource");        
184         reqInfo.setResponseValue(ValidResponses.skip);
185         reqDetail.setRequestInfo(reqInfo);
186         taskReq.setRequestDetails(reqDetail);
187
188         RequestError expectedResponse = new RequestError();
189         ServiceException se = new ServiceException();
190         se.setMessageId("SVC0002");
191         se.setText("Mapping of request to JSON Object failed. No valid requestorId is specified");
192         expectedResponse.setServiceException(se);
193         HttpHeaders headers = new HttpHeaders();
194         headers.set("Accept", MediaType.APPLICATION_JSON);
195         headers.set("Content-Type", MediaType.APPLICATION_JSON);
196         headers.set(ECOMP_REQUEST_ID, "987654321");
197         headers.set(CLIENT_ID, "VID");
198         HttpEntity<TasksRequest> entity = new HttpEntity<TasksRequest>(taskReq, headers);
199
200         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(basePath) + taskId + "/complete");           
201         ResponseEntity<String> response = restTemplate.exchange(
202                 builder.toUriString(),
203                 HttpMethod.POST, entity, String.class);
204
205         ObjectMapper mapper = new ObjectMapper();
206         mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
207         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
208
209         RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
210         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());    
211         assertThat(realResponse, sameBeanAs(expectedResponse));
212     }
213     @Test
214     public void completeTaskBpelResponseError() throws IOException {
215         stubFor(post(urlPathEqualTo("/sobpmnengine/task/55/complete"))
216                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withFault(Fault.EMPTY_RESPONSE)));
217
218         String taskId = "55";
219         TasksRequest taskReq = new TasksRequest();
220         RequestDetails reqDetail = new RequestDetails();
221         RequestInfo reqInfo = new RequestInfo();
222         reqInfo.setRequestorId("testId");
223         reqInfo.setSource("testSource");        
224         reqInfo.setResponseValue(ValidResponses.skip);
225         reqDetail.setRequestInfo(reqInfo);
226         taskReq.setRequestDetails(reqDetail);
227
228         RequestError expectedResponse = new RequestError();
229         ServiceException se = new ServiceException();
230         se.setMessageId("SVC1000");
231         se.setText("Request Failed due to BPEL error with HTTP Status = 502");
232         expectedResponse.setServiceException(se);
233         HttpHeaders headers = new HttpHeaders();
234         headers.set("Accept", MediaType.APPLICATION_JSON);
235         headers.set("Content-Type", MediaType.APPLICATION_JSON);
236         headers.set(ECOMP_REQUEST_ID, "987654321");
237         headers.set(CLIENT_ID, "VID");
238         HttpEntity<TasksRequest> entity = new HttpEntity<TasksRequest>(taskReq, headers);
239
240         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(basePath) + taskId + "/complete");           
241         ResponseEntity<String> response = restTemplate.exchange(
242                 builder.toUriString(),
243                 HttpMethod.POST, entity, String.class);
244
245
246         ObjectMapper mapper = new ObjectMapper();
247         mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
248         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
249
250         RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
251         assertEquals(Response.Status.BAD_GATEWAY.getStatusCode(), response.getStatusCode().value());    
252         assertThat(realResponse, sameBeanAs(expectedResponse));
253     }
254 }