package com.tddinaction.time.logging; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.text.DateFormat; import javax.servlet.http.HttpServletRequest; import org.junit.After; import org.junit.Test; import com.tddinaction.time.abstraction.SystemTime; import com.tddinaction.time.abstraction.TimeSource; public class TestHttpRequestLogFormatter { @After public void resetSystemTime() { SystemTime.reset(); } @Test public void testCommonLogFormat() throws Exception { final long time = SystemTime.asMillis(); SystemTime.setTimeSource(new TimeSource() { public long millis() { return time; } }); DateFormat dateFormat = HttpRequestLogFormatter.dateFormat; String timestamp = dateFormat.format(SystemTime.asDate()); String expected = "1.2.3.4 - bob [" + timestamp + "] \"GET /ctx/path/resource HTTP/1.1\" 200 2326"; HttpServletRequest request = createMock(HttpServletRequest.class); expect(request.getRemoteAddr()).andReturn("1.2.3.4"); expect(request.getRemoteUser()).andReturn("bob"); expect(request.getMethod()).andReturn("GET"); expect(request.getRequestURI()).andReturn( "/ctx/path/resource"); expect(request.getProtocol()).andReturn("HTTP/1.1"); replay(request); HttpRequestLogFormatter formatter = new HttpRequestLogFormatter(); assertEquals(expected, formatter.format(request, 200, 2326)); } @Test public void testTimestampFormat() throws Exception { String date = "\\d{2}/\\w{3}/\\d{4}"; String time = "\\d{2}:\\d{2}:\\d{2}"; String timezone = "(-|\\+)\\d{4}"; String regex = date + ":" + time + " " + timezone; DateFormat dateFormat = HttpRequestLogFormatter.dateFormat; String timestamp = dateFormat.format(SystemTime.asDate()); assertTrue("DateFormat should be \"dd/mon/yyyy:HH:mm:ss Z\"", timestamp.matches(regex)); } }