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.junit.After;
36 import org.junit.Rule;
37 import org.junit.Test;
38 import org.junit.rules.TestName;
39 import org.junit.runner.RunWith;
40 import org.openecomp.sdc.logging.api.ContextData;
41 import org.openecomp.sdc.logging.api.LoggingContext;
42 import org.powermock.api.easymock.PowerMock;
43 import org.powermock.core.classloader.annotations.PrepareForTest;
44 import org.powermock.modules.junit4.PowerMockRunner;
47 * Unit-tests logging filter for initialization and data retrieval.
52 @RunWith(PowerMockRunner.class)
53 @PrepareForTest(LoggingContext.class)
54 public class LoggingFilterTest {
56 private static final String RANDOM_REQUEST_URI = UUID.randomUUID().toString();
57 private static final String RANDOM_REQUEST_ID = UUID.randomUUID().toString();
58 private static final String RANDOM_PARTNER_NAME = UUID.randomUUID().toString();
61 public TestName testName = new TestName();
64 * Verify all mocks after each test.
67 public void verifyMocks() {
70 PowerMock.verifyAll();
71 } catch (AssertionError e) {
72 throw new AssertionError("Expectations failed in " + testName.getMethodName() + "()", e);
78 public void filterPopulatesValuesWhenNoInitParamsAndNoHeaders() throws IOException, ServletException {
81 LoggingFilter loggingFilter = new LoggingFilter();
82 loggingFilter.init(mockFilterConfig(null, null));
83 loggingFilter.doFilter(new MockRequestBuilder().build(), mockResponse(), mockChain());
87 public void filterPopulatesValuesWhenNoInitParamsAndExistingHeaders() throws IOException, ServletException {
91 LoggingFilter loggingFilter = new LoggingFilter();
92 loggingFilter.init(mockFilterConfig(null, null));
94 HttpServletRequest mockRequest = new MockRequestBuilder().partnerName(RANDOM_PARTNER_NAME)
95 .requestId(RANDOM_REQUEST_ID).build();
96 loggingFilter.doFilter(mockRequest, mockResponse(), mockChain());
100 public void filterPopulatesValuesWhenCustomInitParamsAndNoHeaders() throws IOException, ServletException {
102 mockLoggingContext();
104 final String requestIdHeader = "x-request";
105 final String partnerNameHeader = "x-partner";
107 LoggingFilter loggingFilter = new LoggingFilter();
108 FilterConfig mockConfig = mockFilterConfig(requestIdHeader, partnerNameHeader);
109 loggingFilter.init(mockConfig);
111 HttpServletRequest mockRequest = new MockRequestBuilder().requestIdHeader(requestIdHeader)
112 .partnerNameHeader(partnerNameHeader).build();
113 loggingFilter.doFilter(mockRequest, mockResponse(), mockChain());
117 public void filterPopulatesValuesWhenCustomInitParamsAndExistingHeaders() throws IOException, ServletException {
119 mockLoggingContext();
121 final String requestIdHeader = "x-request-id";
122 final String partnerNameHeader = "x-partner-name";
124 LoggingFilter loggingFilter = new LoggingFilter();
125 FilterConfig mockConfig = mockFilterConfig(requestIdHeader, partnerNameHeader);
126 loggingFilter.init(mockConfig);
128 HttpServletRequest mockRequest = new MockRequestBuilder()
129 .partnerNameHeader(partnerNameHeader).partnerName(RANDOM_PARTNER_NAME)
130 .requestIdHeader(requestIdHeader).requestId(RANDOM_REQUEST_ID).build();
131 loggingFilter.doFilter(mockRequest, mockResponse(), mockChain());
134 private FilterConfig mockFilterConfig(String requestIdHeader, String partnerNameHeader) {
135 FilterConfig config = EasyMock.mock(FilterConfig.class);
136 EasyMock.expect(config.getInitParameter(REQUEST_ID_HEADERS_PARAM)).andReturn(requestIdHeader);
137 EasyMock.expect(config.getInitParameter(PARTNER_NAME_HEADERS_PARAM)).andReturn(partnerNameHeader);
138 EasyMock.replay(config);
142 private FilterChain mockChain() throws IOException, ServletException {
143 FilterChain chain = EasyMock.mock(FilterChain.class);
144 chain.doFilter(anyObject(ServletRequest.class), anyObject(ServletResponse.class));
145 EasyMock.expectLastCall().once();
146 EasyMock.replay(chain);
150 private ServletResponse mockResponse() {
151 HttpServletResponse servletResponse = EasyMock.mock(HttpServletResponse.class);
152 EasyMock.replay(servletResponse);
153 return servletResponse;
156 private void mockLoggingContext() {
158 PowerMock.mockStatic(LoggingContext.class);
160 LoggingContext.clear();
161 EasyMock.expectLastCall().times(2);
163 LoggingContext.put(anyObject(ContextData.class));
164 EasyMock.expectLastCall().once();
166 PowerMock.replay(LoggingContext.class);
169 private static class MockRequestBuilder {
171 private String requestIdHeader = DEFAULT_REQUEST_ID_HEADER;
172 private String partnerNameHeader = DEFAULT_PARTNER_NAME_HEADER;
173 private String requestId = null;
174 private String partnerName = null;
176 MockRequestBuilder requestIdHeader(String h) {
177 this.requestIdHeader = h;
181 MockRequestBuilder requestId(String id) {
186 MockRequestBuilder partnerNameHeader(String h) {
187 this.partnerNameHeader = h;
191 MockRequestBuilder partnerName(String name) {
192 this.partnerName = name;
196 HttpServletRequest build() {
197 HttpServletRequest mockRequest = EasyMock.mock(HttpServletRequest.class);
198 EasyMock.expect(mockRequest.getRequestURI()).andReturn(RANDOM_REQUEST_URI);
199 EasyMock.expect(mockRequest.getHeader(requestIdHeader)).andReturn(requestId);
200 EasyMock.expect(mockRequest.getHeader(partnerNameHeader)).andReturn(partnerName);
201 EasyMock.replay(mockRequest);