package com.vtence.molecule.middlewares; import com.vtence.molecule.Request; import com.vtence.molecule.Response; import com.vtence.molecule.support.LoggingSupport.LogRecordingHandler; import org.junit.Test; import java.time.*; import java.util.Locale; import static com.vtence.molecule.http.HttpMethod.*; import static com.vtence.molecule.http.HttpStatus.NO_CONTENT; import static com.vtence.molecule.http.HttpStatus.OK; import static com.vtence.molecule.support.LoggingSupport.anonymousLogger; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsString; public class ApacheCommonLoggerTest { LogRecordingHandler logRecords = new LogRecordingHandler(); Instant currentTime = LocalDateTime.of(2012, 6, 27, 12, 4, 0).toInstant(ZoneOffset.of("-05:00")); ApacheCommonLogger logger = new ApacheCommonLogger(anonymousLogger(logRecords), Clock.fixed(currentTime, ZoneId.of("GMT+01:00")), Locale.US); Request request = new Request().protocol("HTTP/1.1").remoteIp("192.168.0.1"); Response response = new Response(); @Test public void logsRequestsServedInApacheCommonLogFormat() throws Exception { request.method(GET).uri("/products?keyword=dogs"); logger.handle(request, response); response.status(OK).body("a response with a size of 28").done(); response.await(); logRecords.assertEntries(contains("192.168.0.1 - - [27/Jun/2012:18:04:00 +0100] \"GET /products?keyword=dogs HTTP/1.1\" 200 28")); } @Test public void replacesContentSizeWithHyphenForEmptyOrChunkedResponses() throws Exception { request.remoteIp("192.168.0.1").method(DELETE).uri("/logout"); logger.handle(request, response); response.status(NO_CONTENT).body("").done(); response.await(); logRecords.assertEntries(contains(containsString("\"DELETE /logout HTTP/1.1\" 204 -"))); } @Test public void usesOriginalRequestValues() throws Exception { request.remoteIp("192.168.0.1").method(DELETE).uri("/logout"); logger.connectTo((request, response) -> { request.uri("/changed").method(POST).remoteIp("100.100.100.1").protocol("HTTPS"); response.status(NO_CONTENT).done(); }); logger.handle(request, response); logRecords.assertEntries(contains(containsString("\"DELETE /logout HTTP/1.1\" 204 -"))); } }