1bd13a9dfd7a1ba6e3e22a2ebfeddd8d4b54d6e2
[sdc.git] /
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.openecomp.sdc.logging.servlet;
18
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;
26
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;
33
34 /**
35  * Test initialization and of audit tracker and log invocation.
36  *
37  * @author evitaliy
38  * @since 01 Aug 2018
39  */
40 public class AuditTrackerTest {
41
42     @Test(expected = NullPointerException.class)
43     public void throwExceptionWhenLoggerNull() {
44         new AuditTracker((Logger) null);
45     }
46
47     @Test(expected = NullPointerException.class)
48     public void throwExceptionWhenResourceTypeNull() {
49         new AuditTracker((Class<?>) null);
50     }
51
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);
58     }
59
60     @Test(expected = IllegalStateException.class)
61     public void throwExceptionWhenRreRequestNeverCalled() {
62         AuditTracker tracker = new AuditTracker(mock(Logger.class));
63         tracker.postRequest(mock(RequestProcessingResult.class));
64     }
65
66     @Test
67     public void nothingHappensWhenAuditDisabled() {
68
69         Logger logger = mock(Logger.class);
70         when(logger.isAuditEnabled()).thenReturn(false);
71
72         AuditTracker tracker = new AuditTracker(logger);
73         tracker.preRequest(mock(HttpServletRequest.class));
74         tracker.postRequest(mock(RequestProcessingResult.class));
75
76         verify(logger, never()).audit(any(AuditData.class));
77     }
78
79     @Test
80     public void reportedTimePositive() {
81
82         Logger logger = mock(Logger.class);
83         when(logger.isAuditEnabled()).thenReturn(true);
84
85         AuditTracker tracker = new AuditTracker(logger);
86         tracker.preRequest(mock(HttpServletRequest.class));
87         tracker.postRequest(mock(RequestProcessingResult.class));
88
89         ArgumentCaptor<AuditData> auditDataCaptor = ArgumentCaptor.forClass(AuditData.class);
90         verify(logger).audit(auditDataCaptor.capture());
91         assertTrue(auditDataCaptor.getValue().getEndTime() > 0);
92     }
93
94     @Test
95     public void interpretedRequestResultsPassedDownToAudit() {
96
97         Logger logger = mock(Logger.class);
98         when(logger.isAuditEnabled()).thenReturn(true);
99
100         AuditTracker tracker = new AuditTracker(logger);
101         tracker.preRequest(mock(HttpServletRequest.class));
102
103         final StubRequestProcessingResult result = new StubRequestProcessingResult();
104         tracker.postRequest(result);
105
106         ArgumentCaptor<AuditData> auditDataCaptor = ArgumentCaptor.forClass(AuditData.class);
107         verify(logger).audit(auditDataCaptor.capture());
108
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());
113     }
114
115     @Test
116     public void clientIpAddressPassedDownToAudit() {
117
118         Logger logger = mock(Logger.class);
119         when(logger.isAuditEnabled()).thenReturn(true);
120
121         final String address = "196.50.30.122";
122         HttpServletRequest request = mock(HttpServletRequest.class);
123         when(request.getRemoteAddr()).thenReturn(address);
124
125         AuditTracker tracker = new AuditTracker(logger);
126         tracker.preRequest(request);
127         tracker.postRequest(mock(RequestProcessingResult.class));
128
129         ArgumentCaptor<AuditData> auditDataCaptor = ArgumentCaptor.forClass(AuditData.class);
130         verify(logger).audit(auditDataCaptor.capture());
131
132         AuditData capturedAuditData = auditDataCaptor.getValue();
133         assertEquals(address, capturedAuditData.getClientIpAddress());
134     }
135
136     private static class StubRequestProcessingResult implements RequestProcessingResult {
137
138         @Override
139         public int getStatus() {
140             return 505;
141         }
142
143         @Override
144         public StatusCode getStatusCode() {
145             return StatusCode.ERROR;
146         }
147
148         @Override
149         public String getStatusPhrase() {
150             return "Test request failed";
151         }
152     }
153 }