Merge "Adding/Replacing Plugins to format/validate code"
[logging-analytics.git] / reference / logging-filter / logging-filter-spring / src / test / java / org / onap / logging / filter / spring / SpringClientFilterTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - Logging
4  * ================================================================================
5  * Copyright (C) 2019 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.logging.filter.spring;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.mockito.Mockito.doReturn;
26 import static org.mockito.Mockito.when;
27 import java.io.IOException;
28 import java.net.URI;
29 import java.net.URISyntaxException;
30 import java.time.ZoneOffset;
31 import java.time.ZonedDateTime;
32 import java.time.format.DateTimeFormatter;
33 import org.junit.After;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 import org.mockito.InjectMocks;
37 import org.mockito.Mock;
38 import org.mockito.Spy;
39 import org.mockito.junit.MockitoJUnitRunner;
40 import org.onap.logging.filter.base.MDCSetup;
41 import org.onap.logging.filter.base.Constants;
42 import org.onap.logging.ref.slf4j.ONAPLogConstants;
43 import org.slf4j.MDC;
44 import org.springframework.http.HttpHeaders;
45 import org.springframework.http.HttpRequest;
46 import org.springframework.http.client.ClientHttpRequestExecution;
47 import org.springframework.http.client.ClientHttpResponse;
48
49 @RunWith(MockitoJUnitRunner.class)
50 public class SpringClientFilterTest extends SpringClientFilter {
51
52     @Mock
53     private MDCSetup mdcSetup;
54
55     @Mock
56     private ClientHttpResponse response;
57
58     @Mock
59     private HttpRequest clientRequest;
60
61     @Mock
62     private ClientHttpRequestExecution execution;
63
64     @Spy
65     @InjectMocks
66     private SpringClientFilter springClientFilter;
67
68     @After
69     public void tearDown() {
70         MDC.clear();
71     }
72
73     @Test
74     public void processResponseTest() throws IOException {
75         String partnerName = getPartnerName();
76         assertEquals("UNKNOWN", partnerName);
77     }
78
79     @Test
80     public void extractTargetEntityTest() {
81         HttpHeaders headers = new HttpHeaders();
82         headers.add(Constants.HttpHeaders.TARGET_ENTITY_HEADER, "SO");
83         when(clientRequest.getHeaders()).thenReturn(headers);
84
85         String targetEntity = springClientFilter.getTargetEntity(clientRequest);
86         assertEquals("SO", targetEntity);
87     }
88
89     @Test
90     public void extractTargetEntityMDCTest() {
91         MDC.put(ONAPLogConstants.MDCs.TARGET_ENTITY, "SO");
92         HttpHeaders headers = new HttpHeaders();
93         when(clientRequest.getHeaders()).thenReturn(headers);
94
95         String targetEntity = springClientFilter.getTargetEntity(clientRequest);
96         assertEquals("SO", targetEntity);
97     }
98
99     @Test
100     public void extractTargetEntityNoHeaderTest() {
101         HttpHeaders headers = new HttpHeaders();
102         when(clientRequest.getHeaders()).thenReturn(headers);
103
104         String targetEntity = springClientFilter.getTargetEntity(clientRequest);
105         assertEquals("Unknown-Target-Entity", targetEntity);
106     }
107
108     @Test
109     public void setupMDCTest() throws URISyntaxException {
110         URI uri = new URI("onap/so/serviceInstances");
111         when(clientRequest.getURI()).thenReturn(uri);
112         when(clientRequest.getHeaders()).thenReturn(new HttpHeaders());
113         setupMDC(clientRequest);
114         assertEquals("onap/so/serviceInstances", MDC.get(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME));
115         assertEquals("INPROGRESS", MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
116         assertNotNull(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE);
117         assertNotNull(ONAPLogConstants.MDCs.SERVICE_NAME);
118         assertNotNull(ONAPLogConstants.MDCs.SERVER_FQDN);
119     }
120
121     @Test
122     public void setupHeadersTest() {
123         MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, "8819bfb4-69d2-43fc-b0d6-81d2690533ea");
124         MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, "0a908a5d-e774-4558-96ff-6edcbba65483");
125
126         HttpHeaders headers = new HttpHeaders();
127         setupHeaders(clientRequest, headers);
128
129         assertEquals("0a908a5d-e774-4558-96ff-6edcbba65483", headers.getFirst(ONAPLogConstants.Headers.REQUEST_ID));
130         assertEquals("0a908a5d-e774-4558-96ff-6edcbba65483", headers.getFirst(Constants.HttpHeaders.HEADER_REQUEST_ID));
131         assertEquals("0a908a5d-e774-4558-96ff-6edcbba65483", headers.getFirst(Constants.HttpHeaders.TRANSACTION_ID));
132         assertEquals("0a908a5d-e774-4558-96ff-6edcbba65483", headers.getFirst(Constants.HttpHeaders.TRANSACTION_ID));
133         assertEquals("0a908a5d-e774-4558-96ff-6edcbba65483", headers.getFirst(Constants.HttpHeaders.ECOMP_REQUEST_ID));
134         assertEquals("8819bfb4-69d2-43fc-b0d6-81d2690533ea", headers.getFirst(ONAPLogConstants.Headers.INVOCATION_ID));
135         assertEquals("UNKNOWN", headers.getFirst(ONAPLogConstants.Headers.PARTNER_NAME));
136     }
137
138     @Test
139     public void extractRequestIDTest() {
140         MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, "0a908a5d-e774-4558-96ff-6edcbba65483");
141         String requestId = extractRequestID();
142         assertEquals("0a908a5d-e774-4558-96ff-6edcbba65483", requestId);
143     }
144
145     @Test
146     public void extractRequestIDNullTest() {
147         // NPE exception will occur when extractRequestID is called if INVOKE_TIMESTAMP is null
148         MDC.put(ONAPLogConstants.MDCs.INVOKE_TIMESTAMP,
149                 ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT));
150         String requestId = extractRequestID();
151         assertNotNull(requestId);
152         assertNotNull(ONAPLogConstants.MDCs.LOG_TIMESTAMP);
153         assertNotNull(ONAPLogConstants.MDCs.ELAPSED_TIME);
154     }
155
156     @Test
157     public void interceptTest() throws IOException {
158         byte[] body = new byte[3];
159         doReturn(response).when(execution).execute(clientRequest, body);
160         ClientHttpResponse httpResponse = springClientFilter.intercept(clientRequest, body, execution);
161         assertEquals(response, httpResponse);
162     }
163 }