|
3 | 3 | import com.google.common.base.Function;
|
4 | 4 | import com.google.common.base.Predicate;
|
5 | 5 | import com.google.common.collect.EvictingQueue;
|
6 |
| -import com.google.common.collect.Lists; |
7 | 6 | import com.google.common.collect.Queues;
|
8 | 7 | import org.mockserver.client.serialization.HttpRequestSerializer;
|
9 | 8 | import org.mockserver.log.model.*;
|
|
18 | 17 | import java.util.*;
|
19 | 18 |
|
20 | 19 | import static org.mockserver.character.Character.NEW_LINE;
|
21 |
| -import static org.mockserver.model.HttpRequest.request; |
22 | 20 |
|
23 | 21 | /**
|
24 | 22 | * @author jamesdbloom
|
25 | 23 | */
|
26 | 24 | public class LogFilter {
|
27 | 25 |
|
28 |
| - public final static List<Class<? extends LogEntry>> REQUEST_LOG_TYPES = Arrays.asList( |
| 26 | + private final static List<Class<? extends LogEntry>> MESSAGE_LOG_TYPES = Collections.<Class<? extends LogEntry>>singletonList( |
| 27 | + MessageLogEntry.class |
| 28 | + ); |
| 29 | + private final static List<Class<? extends LogEntry>> REQUEST_LOG_TYPES = Arrays.asList( |
29 | 30 | RequestLogEntry.class,
|
30 | 31 | RequestResponseLogEntry.class,
|
31 | 32 | ExpectationMatchLogEntry.class
|
32 | 33 | );
|
33 |
| - public final static List<Class<? extends LogEntry>> EXPECTATION_LOG_TYPES = Arrays.<Class<? extends LogEntry>>asList( |
| 34 | + private final static List<Class<? extends LogEntry>> EXPECTATION_LOG_TYPES = Arrays.<Class<? extends LogEntry>>asList( |
34 | 35 | RequestResponseLogEntry.class,
|
35 | 36 | ExpectationMatchLogEntry.class
|
36 | 37 | );
|
37 |
| - private final LoggingFormatter logFormatter; |
38 |
| - private Queue<LogEntry> requestLog = Queues.synchronizedQueue(EvictingQueue.<LogEntry>create(100)); |
39 |
| - private MatcherBuilder matcherBuilder; |
40 |
| - private HttpRequestSerializer httpRequestSerializer = new HttpRequestSerializer(); |
41 |
| - |
42 |
| - private Function<LogEntry, HttpRequest> logEntryToHttpRequestFunction = new Function<LogEntry, HttpRequest>() { |
| 38 | + static Predicate<LogEntry> messageLogPredicate = new Predicate<LogEntry>() { |
| 39 | + public boolean apply(LogEntry input) { |
| 40 | + return MESSAGE_LOG_TYPES.contains(input.getClass()); |
| 41 | + } |
| 42 | + }; |
| 43 | + private static Function<LogEntry, HttpRequest> logEntryToRequest = new Function<LogEntry, HttpRequest>() { |
43 | 44 | public HttpRequest apply(LogEntry logEntry) {
|
44 | 45 | return logEntry.getHttpRequest();
|
45 | 46 | }
|
46 | 47 | };
|
47 |
| - |
48 |
| - private Predicate<LogEntry> notMessageLogEntryPredicate = new Predicate<LogEntry>() { |
| 48 | + static Predicate<LogEntry> requestLogPredicate = new Predicate<LogEntry>() { |
| 49 | + public boolean apply(LogEntry input) { |
| 50 | + return REQUEST_LOG_TYPES.contains(input.getClass()); |
| 51 | + } |
| 52 | + }; |
| 53 | + private static Function<LogEntry, Expectation> logEntryToExpectation = new Function<LogEntry, Expectation>() { |
| 54 | + public Expectation apply(LogEntry logEntry) { |
| 55 | + return ((ExpectationLogEntry) logEntry).getExpectation(); |
| 56 | + } |
| 57 | + }; |
| 58 | + static Predicate<LogEntry> expectationLogPredicate = new Predicate<LogEntry>() { |
| 59 | + public boolean apply(LogEntry input) { |
| 60 | + return EXPECTATION_LOG_TYPES.contains(input.getClass()); |
| 61 | + } |
| 62 | + }; |
| 63 | + public static Predicate<LogEntry> notMessageLogEntryPredicate = new Predicate<LogEntry>() { |
49 | 64 | public boolean apply(LogEntry logEntry) {
|
50 | 65 | return !(logEntry instanceof MessageLogEntry);
|
51 | 66 | }
|
52 | 67 | };
|
| 68 | + private final LoggingFormatter logFormatter; |
| 69 | + private Queue<LogEntry> requestLog = Queues.synchronizedQueue(EvictingQueue.<LogEntry>create(100)); |
| 70 | + private MatcherBuilder matcherBuilder; |
| 71 | + private HttpRequestSerializer httpRequestSerializer = new HttpRequestSerializer(); |
| 72 | + private Function<LogEntry, String> logEntryToMessage = new Function<LogEntry, String>() { |
| 73 | + public String apply(LogEntry logEntry) { |
| 74 | + return ((MessageLogEntry) logEntry).getMessage(); |
| 75 | + } |
| 76 | + }; |
53 | 77 |
|
54 | 78 | public LogFilter(LoggingFormatter logFormatter) {
|
55 | 79 | this.logFormatter = logFormatter;
|
@@ -77,34 +101,24 @@ public void clear(HttpRequest request) {
|
77 | 101 | }
|
78 | 102 | }
|
79 | 103 |
|
80 |
| - public List<HttpRequest> retrieveRequests(HttpRequest httpRequest) { |
81 |
| - return Lists.transform( |
82 |
| - retrieveLogEntries(httpRequest, REQUEST_LOG_TYPES), |
83 |
| - logEntryToHttpRequestFunction |
84 |
| - ); |
| 104 | + public List<String> retrieveMessages(HttpRequest httpRequest) { |
| 105 | + return retrieveLogEntries(httpRequest, messageLogPredicate, logEntryToMessage); |
85 | 106 | }
|
86 | 107 |
|
87 |
| - public List<Expectation> retrieveExpectations(HttpRequest httpRequest) { |
88 |
| - List<Expectation> matchingExpectations = new ArrayList<>(); |
89 |
| - List<LogEntry> logEntries = retrieveLogEntries(httpRequest, EXPECTATION_LOG_TYPES); |
90 |
| - for (LogEntry logEntry : logEntries) { |
91 |
| - matchingExpectations.add(((ExpectationLogEntry) logEntry).getExpectation()); |
92 |
| - } |
93 |
| - return matchingExpectations; |
| 108 | + public List<HttpRequest> retrieveRequests(HttpRequest httpRequest) { |
| 109 | + return retrieveLogEntries(httpRequest, requestLogPredicate, logEntryToRequest); |
94 | 110 | }
|
95 | 111 |
|
96 |
| - public List<LogEntry> retrieveLogEntries(HttpRequest httpRequest) { |
97 |
| - return retrieveLogEntries(httpRequest, Collections.<Class<? extends LogEntry>>emptyList()); |
| 112 | + public List<Expectation> retrieveExpectations(HttpRequest httpRequest) { |
| 113 | + return retrieveLogEntries(httpRequest, expectationLogPredicate, logEntryToExpectation); |
98 | 114 | }
|
99 | 115 |
|
100 |
| - public List<LogEntry> retrieveLogEntries(HttpRequest httpRequest, List<Class<? extends LogEntry>> types) { |
101 |
| - List<LogEntry> requestLog = new LinkedList<>(this.requestLog); |
102 |
| - |
103 |
| - List<LogEntry> matchingLogEntries = new ArrayList<>(); |
| 116 | + <T> List<T> retrieveLogEntries(HttpRequest httpRequest, Predicate<LogEntry> logEntryPredicate, Function<LogEntry, T> logEntryToTypeFunction) { |
| 117 | + List<T> matchingLogEntries = new ArrayList<>(); |
104 | 118 | HttpRequestMatcher httpRequestMatcher = matcherBuilder.transformsToMatcher(httpRequest);
|
105 |
| - for (LogEntry logEntry : requestLog) { |
106 |
| - if ((types.isEmpty() || types.contains(logEntry.getClass())) && httpRequestMatcher.matches(logEntry.getHttpRequest(), true)) { |
107 |
| - matchingLogEntries.add(logEntry); |
| 119 | + for (LogEntry logEntry : new LinkedList<>(this.requestLog)) { |
| 120 | + if (logEntryPredicate.apply(logEntry) && httpRequestMatcher.matches(logEntry.getHttpRequest(), false)) { |
| 121 | + matchingLogEntries.add(logEntryToTypeFunction.apply(logEntry)); |
108 | 122 | }
|
109 | 123 | }
|
110 | 124 | return matchingLogEntries;
|
@@ -155,7 +169,7 @@ public String verify(VerificationSequence verificationSequence) {
|
155 | 169 | boolean foundRequest = false;
|
156 | 170 | for (; !foundRequest && requestLogCounter < requestLog.size(); requestLogCounter++) {
|
157 | 171 | LogEntry logEntry = requestLog.get(requestLogCounter);
|
158 |
| - if (!(logEntry instanceof MessageLogEntry) && httpRequestMatcher.matches(logEntry.getHttpRequest(), true)) { |
| 172 | + if (!(logEntry instanceof MessageLogEntry) && httpRequestMatcher.matches(logEntry.getHttpRequest(), false)) { |
159 | 173 | // move on to next request
|
160 | 174 | foundRequest = true;
|
161 | 175 | }
|
|
0 commit comments