2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.logging.servlet;
19 import static org.easymock.EasyMock.anyObject;
20 import static org.openecomp.sdc.logging.LoggingConstants.DEFAULT_PARTNER_NAME_HEADER;
21 import static org.openecomp.sdc.logging.LoggingConstants.DEFAULT_REQUEST_ID_HEADER;
22 import static org.openecomp.sdc.logging.servlet.LoggingFilter.PARTNER_NAME_HEADERS_PARAM;
23 import static org.openecomp.sdc.logging.servlet.LoggingFilter.REQUEST_ID_HEADERS_PARAM;
25 import java.io.IOException;
26 import java.util.UUID;
27 import javax.servlet.FilterChain;
28 import javax.servlet.FilterConfig;
29 import javax.servlet.ServletException;
30 import javax.servlet.ServletRequest;
31 import javax.servlet.ServletResponse;
32 import javax.servlet.http.HttpServletRequest;
33 import javax.servlet.http.HttpServletResponse;
34 import org.easymock.EasyMock;
35 import org.openecomp.sdc.logging.api.ContextData;
36 import org.openecomp.sdc.logging.api.LoggingContext;
37 import org.powermock.api.easymock.PowerMock;
38 import org.powermock.core.classloader.annotations.PrepareForTest;
39 import org.powermock.modules.testng.PowerMockTestCase;
40 import org.testng.ITestResult;
41 import org.testng.annotations.AfterMethod;
42 import org.testng.annotations.Test;
45 * Unit-tests logging filter for initialization and data retrieval.
50 @PrepareForTest(LoggingContext.class)
51 public class LoggingFilterTest extends PowerMockTestCase {
53 private static final String RANDOM_REQUEST_URI = UUID.randomUUID().toString();
54 private static final String RANDOM_REQUEST_ID = UUID.randomUUID().toString();
55 private static final String RANDOM_PARTNER_NAME = UUID.randomUUID().toString();
58 * Verify all mocks after each test.
61 public void verifyMocks(ITestResult result) {
64 PowerMock.verifyAll();
65 } catch (AssertionError e) {
66 throw new AssertionError("Expectations failed in: " + result.getMethod().getMethodName(), e);
72 public void filterPopulatesValuesWhenNoInitParamsAndNoHeaders() throws Exception {
75 LoggingFilter loggingFilter = new LoggingFilter();
76 loggingFilter.init(mockFilterConfig(null, null));
77 loggingFilter.doFilter(new MockRequestBuilder().build(), mockResponse(), mockChain());
81 public void filterPopulatesValuesWhenNoInitParamsAndExistingHeaders() throws Exception {
85 LoggingFilter loggingFilter = new LoggingFilter();
86 loggingFilter.init(mockFilterConfig(null, null));
88 HttpServletRequest mockRequest = new MockRequestBuilder().partnerName(RANDOM_PARTNER_NAME)
89 .requestId(RANDOM_REQUEST_ID).build();
90 loggingFilter.doFilter(mockRequest, mockResponse(), mockChain());
94 public void filterPopulatesValuesWhenCustomInitParamsAndNoHeaders() throws Exception {
98 final String requestIdHeader = "x-request";
99 final String partnerNameHeader = "x-partner";
101 LoggingFilter loggingFilter = new LoggingFilter();
102 FilterConfig mockConfig = mockFilterConfig(requestIdHeader, partnerNameHeader);
103 loggingFilter.init(mockConfig);
105 HttpServletRequest mockRequest = new MockRequestBuilder().requestIdHeader(requestIdHeader)
106 .partnerNameHeader(partnerNameHeader).build();
107 loggingFilter.doFilter(mockRequest, mockResponse(), mockChain());
111 public void filterPopulatesValuesWhenCustomInitParamsAndExistingHeaders() throws Exception {
113 mockLoggingContext();
115 final String requestIdHeader = "x-request-id";
116 final String partnerNameHeader = "x-partner-name";
118 LoggingFilter loggingFilter = new LoggingFilter();
119 FilterConfig mockConfig = mockFilterConfig(requestIdHeader, partnerNameHeader);
120 loggingFilter.init(mockConfig);
122 HttpServletRequest mockRequest = new MockRequestBuilder()
123 .partnerNameHeader(partnerNameHeader).partnerName(RANDOM_PARTNER_NAME)
124 .requestIdHeader(requestIdHeader).requestId(RANDOM_REQUEST_ID).build();
125 loggingFilter.doFilter(mockRequest, mockResponse(), mockChain());
128 private FilterConfig mockFilterConfig(String requestIdHeader, String partnerNameHeader) {
129 FilterConfig config = EasyMock.mock(FilterConfig.class);
130 EasyMock.expect(config.getInitParameter(REQUEST_ID_HEADERS_PARAM)).andReturn(requestIdHeader);
131 EasyMock.expect(config.getInitParameter(PARTNER_NAME_HEADERS_PARAM)).andReturn(partnerNameHeader);
132 EasyMock.replay(config);
136 private FilterChain mockChain() throws IOException, ServletException {
137 FilterChain chain = EasyMock.mock(FilterChain.class);
138 chain.doFilter(anyObject(ServletRequest.class), anyObject(ServletResponse.class));
139 EasyMock.expectLastCall().once();
140 EasyMock.replay(chain);
144 private ServletResponse mockResponse() {
145 HttpServletResponse servletResponse = EasyMock.mock(HttpServletResponse.class);
146 EasyMock.replay(servletResponse);
147 return servletResponse;
150 private void mockLoggingContext() {
152 PowerMock.mockStatic(LoggingContext.class);
154 LoggingContext.clear();
155 EasyMock.expectLastCall().times(2);
157 LoggingContext.put(anyObject(ContextData.class));
158 EasyMock.expectLastCall().once();
160 PowerMock.replay(LoggingContext.class);
163 private static class MockRequestBuilder {
165 private String requestIdHeader = DEFAULT_REQUEST_ID_HEADER;
166 private String partnerNameHeader = DEFAULT_PARTNER_NAME_HEADER;
167 private String requestId = null;
168 private String partnerName = null;
170 MockRequestBuilder requestIdHeader(String h) {
171 this.requestIdHeader = h;
175 MockRequestBuilder requestId(String id) {
180 MockRequestBuilder partnerNameHeader(String h) {
181 this.partnerNameHeader = h;
185 MockRequestBuilder partnerName(String name) {
186 this.partnerName = name;
190 HttpServletRequest build() {
191 HttpServletRequest mockRequest = EasyMock.mock(HttpServletRequest.class);
192 EasyMock.expect(mockRequest.getRequestURI()).andReturn(RANDOM_REQUEST_URI);
193 EasyMock.expect(mockRequest.getHeader(requestIdHeader)).andReturn(requestId);
194 EasyMock.expect(mockRequest.getHeader(partnerNameHeader)).andReturn(partnerName);
195 EasyMock.replay(mockRequest);