@Override protected Map<String, Object> toJsonMap(IAccessEvent event) { return new MapBuilder(timestampFormatter, customFieldNames, additionalFields, includes.size()) .addNumber("port", isIncluded(AccessAttribute.LOCAL_PORT), event::getLocalPort) .addNumber("contentLength", isIncluded(AccessAttribute.CONTENT_LENGTH), event::getContentLength) .addTimestamp("timestamp", isIncluded(AccessAttribute.TIMESTAMP), event.getTimeStamp()) .add("method", isIncluded(AccessAttribute.METHOD), event::getMethod) .add("protocol", isIncluded(AccessAttribute.PROTOCOL), event::getProtocol) .add("requestContent", isIncluded(AccessAttribute.REQUEST_CONTENT), event::getRequestContent) .add("remoteAddress", isIncluded(AccessAttribute.REMOTE_ADDRESS), event::getRemoteAddr) .add("remoteUser", isIncluded(AccessAttribute.REMOTE_USER), event::getRemoteUser) .addMap("headers", !requestHeaders.isEmpty(), () -> filterHeaders(event.getRequestHeaderMap(), requestHeaders)) .addMap("params", isIncluded(AccessAttribute.REQUEST_PARAMETERS), event::getRequestParameterMap) .addNumber("requestTime", isIncluded(AccessAttribute.REQUEST_TIME), event::getElapsedTime) .add("uri", isIncluded(AccessAttribute.REQUEST_URI), event::getRequestURI) .add("url", isIncluded(AccessAttribute.REQUEST_URL), event::getRequestURL) .add("pathQuery", isIncluded(AccessAttribute.PATH_QUERY), () -> event.getRequestURI() + event.getQueryString()) .add("remoteHost", isIncluded(AccessAttribute.REMOTE_HOST), event::getRemoteHost) .add("responseContent", isIncluded(AccessAttribute.RESPONSE_CONTENT), event::getResponseContent) .addMap("responseHeaders", !responseHeaders.isEmpty(), () -> filterHeaders(event.getResponseHeaderMap(), responseHeaders)) .add("serverName", isIncluded(AccessAttribute.SERVER_NAME), event::getServerName) .addNumber("status", isIncluded(AccessAttribute.STATUS_CODE), event::getStatusCode) .add("userAgent", isIncluded(AccessAttribute.USER_AGENT), () -> event.getRequestHeader(USER_AGENT)) .add("version", jsonProtocolVersion != null, jsonProtocolVersion) .build(); }
@Override public void writeTo(JsonGenerator generator, IAccessEvent event) throws IOException { Map<String, String> headers; if (filter == null) { headers = event.getResponseHeaderMap(); } else { headers = new HashMap<>(event.getResponseHeaderMap().size()); for (Map.Entry<String, String> header : event.getResponseHeaderMap().entrySet()) { if (filter.includeHeader(header.getKey(), header.getValue())) { headers.put(header.getKey(), header.getValue()); } } } JsonWritingUtils.writeMapStringFields(generator, getFieldName(), headers, lowerCaseHeaderNames); }
/** * Verifies that the response header map does not have contain the given one. * * @param name the response header name. * @return this instance. * @see IAccessEvent#getResponseHeaderMap() */ public S doesNotHaveResponseHeaderInMap(String name) { Map<String, String> actualResponseHeaders = actual.getResponseHeaderMap(); Assertions.assertThat(actualResponseHeaders).doesNotContainKey(name); return myself; }
/** * Verifies that the response header map contains the given one. * * @param name the response header name. * @param value the response header value. * @return this instance. * @see IAccessEvent#getResponseHeaderMap() */ public S hasResponseHeaderInMap(String name, String value) { Map<String, String> actualResponseHeaders = actual.getResponseHeaderMap(); Assertions.assertThat(actualResponseHeaders).containsEntry(name, value); return myself; }
@Test public void testSerialization() throws IOException, ClassNotFoundException { Object o = buildSerializedAccessEvent(); assertNotNull(o); IAccessEvent aeBack = (IAccessEvent) o; assertEquals(DummyResponse.DUMMY_DEFAULT_HDEADER_MAP, aeBack.getResponseHeaderMap()); assertEquals(DummyResponse.DUMMY_DEFAULT_HDEADER_MAP.get("x"), aeBack.getResponseHeader("x")); assertEquals(DummyResponse.DUMMY_DEFAULT_HDEADER_MAP.get("headerName1"), aeBack.getResponseHeader("headerName1")); assertEquals(DummyResponse.DUMMY_DEFAULT_HDEADER_MAP.size(), aeBack.getResponseHeaderNameList().size()); assertEquals(DummyResponse.DUMMY_DEFAULT_CONTENT_COUNT, aeBack.getContentLength()); assertEquals(DummyResponse.DUMMY_DEFAULT_STATUS, aeBack.getStatusCode()); assertEquals(DummyRequest.DUMMY_CONTENT_STRING, aeBack.getRequestContent()); assertEquals(DummyRequest.DUMMY_RESPONSE_CONTENT_STRING, aeBack.getResponseContent()); assertEquals(DummyRequest.DUMMY_DEFAULT_ATTR_MAP.get("testKey"), aeBack.getAttribute("testKey")); }