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 junit.framework.TestCase.assertEquals;
20 import static junit.framework.TestCase.assertTrue;
21 import static org.mockito.ArgumentMatchers.any;
22 import static org.mockito.Mockito.mock;
23 import static org.mockito.Mockito.never;
24 import static org.mockito.Mockito.verify;
25 import static org.mockito.Mockito.when;
27 import javax.servlet.http.HttpServletRequest;
28 import org.junit.Test;
29 import org.mockito.ArgumentCaptor;
30 import org.openecomp.sdc.logging.api.AuditData;
31 import org.openecomp.sdc.logging.api.Logger;
32 import org.openecomp.sdc.logging.api.StatusCode;
35 * Test initialization and of audit tracker and log invocation.
40 public class AuditTrackerTest {
42 @Test(expected = NullPointerException.class)
43 public void throwExceptionWhenLoggerNull() {
44 new AuditTracker((Logger) null);
47 @Test(expected = NullPointerException.class)
48 public void throwExceptionWhenResourceTypeNull() {
49 new AuditTracker((Class<?>) null);
52 @Test(expected = IllegalStateException.class)
53 public void throwExceptionWhenPreRequestCalledMoreThanOnce() {
54 AuditTracker tracker = new AuditTracker(mock(Logger.class));
55 HttpServletRequest request = mock(HttpServletRequest.class);
56 tracker.preRequest(request);
57 tracker.preRequest(request);
60 @Test(expected = IllegalStateException.class)
61 public void throwExceptionWhenRreRequestNeverCalled() {
62 AuditTracker tracker = new AuditTracker(mock(Logger.class));
63 tracker.postRequest(mock(RequestProcessingResult.class));
67 public void nothingHappensWhenAuditDisabled() {
69 Logger logger = mock(Logger.class);
70 when(logger.isAuditEnabled()).thenReturn(false);
72 AuditTracker tracker = new AuditTracker(logger);
73 tracker.preRequest(mock(HttpServletRequest.class));
74 tracker.postRequest(mock(RequestProcessingResult.class));
76 verify(logger, never()).audit(any(AuditData.class));
80 public void reportedTimePositive() {
82 Logger logger = mock(Logger.class);
83 when(logger.isAuditEnabled()).thenReturn(true);
85 AuditTracker tracker = new AuditTracker(logger);
86 tracker.preRequest(mock(HttpServletRequest.class));
87 tracker.postRequest(mock(RequestProcessingResult.class));
89 ArgumentCaptor<AuditData> auditDataCaptor = ArgumentCaptor.forClass(AuditData.class);
90 verify(logger).audit(auditDataCaptor.capture());
91 assertTrue(auditDataCaptor.getValue().getEndTime() > 0);
95 public void interpretedRequestResultsPassedDownToAudit() {
97 Logger logger = mock(Logger.class);
98 when(logger.isAuditEnabled()).thenReturn(true);
100 AuditTracker tracker = new AuditTracker(logger);
101 tracker.preRequest(mock(HttpServletRequest.class));
103 final StubRequestProcessingResult result = new StubRequestProcessingResult();
104 tracker.postRequest(result);
106 ArgumentCaptor<AuditData> auditDataCaptor = ArgumentCaptor.forClass(AuditData.class);
107 verify(logger).audit(auditDataCaptor.capture());
109 AuditData capturedAuditData = auditDataCaptor.getValue();
110 assertEquals(Integer.toString(result.getStatus()), capturedAuditData.getResponseCode());
111 assertEquals(result.getStatusCode(), capturedAuditData.getStatusCode());
112 assertEquals(result.getStatusPhrase(), capturedAuditData.getResponseDescription());
116 public void clientIpAddressPassedDownToAudit() {
118 Logger logger = mock(Logger.class);
119 when(logger.isAuditEnabled()).thenReturn(true);
121 final String address = "196.50.30.122";
122 HttpServletRequest request = mock(HttpServletRequest.class);
123 when(request.getRemoteAddr()).thenReturn(address);
125 AuditTracker tracker = new AuditTracker(logger);
126 tracker.preRequest(request);
127 tracker.postRequest(mock(RequestProcessingResult.class));
129 ArgumentCaptor<AuditData> auditDataCaptor = ArgumentCaptor.forClass(AuditData.class);
130 verify(logger).audit(auditDataCaptor.capture());
132 AuditData capturedAuditData = auditDataCaptor.getValue();
133 assertEquals(address, capturedAuditData.getClientIpAddress());
136 private static class StubRequestProcessingResult implements RequestProcessingResult {
139 public int getStatus() {
144 public StatusCode getStatusCode() {
145 return StatusCode.ERROR;
149 public String getStatusPhrase() {
150 return "Test request failed";