package com.twitter.common.net.http; import java.util.logging.Level; import org.junit.Before; import org.junit.Test; import org.mortbay.jetty.HttpHeaders; import org.mortbay.jetty.HttpURI; import org.mortbay.jetty.Request; import org.mortbay.jetty.RequestLog; import org.mortbay.jetty.Response; import com.twitter.common.net.http.RequestLogger.LogSink; import com.twitter.common.quantity.Amount; import com.twitter.common.quantity.Time; import com.twitter.common.testing.easymock.EasyMockTest; import com.twitter.common.util.testing.FakeClock; import static org.easymock.EasyMock.expect; public class RequestLoggerTest extends EasyMockTest { private FakeClock clock; private LogSink sink; private Request request; private Response response; private RequestLog log; @Before public void setUp() throws Exception { clock = new FakeClock(); sink = createMock(LogSink.class); request = createMock(Request.class); response = createMock(Response.class); log = new RequestLogger(clock, sink); } @Test public void testFormat200() throws Exception { clock.advance(Amount.of(40L * 365, Time.DAYS)); expect(response.getStatus()).andReturn(200).atLeastOnce(); expect(request.getServerName()).andReturn("snoopy"); expect(request.getHeader(HttpHeaders.X_FORWARDED_FOR)).andReturn(null); expect(request.getMethod()).andReturn("GET"); expect(request.getUri()).andReturn(new HttpURI("/")); expect(request.getProtocol()).andReturn("http"); expect(response.getContentCount()).andReturn(256L); expect(request.getRemoteAddr()).andReturn("easymock-test"); expect(request.getHeader(HttpHeaders.REFERER)).andReturn(null); expect(request.getHeader(HttpHeaders.USER_AGENT)).andReturn("junit"); expect(request.getTimeStamp()).andReturn(clock.nowMillis()).atLeastOnce(); expect(sink.isLoggable(Level.FINE)).andReturn(true); sink.log(Level.FINE, "snoopy easymock-test [22/Dec/2009:00:00:00 +0000]" + " \"GET / http\" 200 256 \"-\" \"junit\" 110"); control.replay(); clock.advance(Amount.of(110L, Time.MILLISECONDS)); log.log(request, response); } @Test public void testFormat500() throws Exception { clock.advance(Amount.of(40L * 365, Time.DAYS)); expect(response.getStatus()).andReturn(500).atLeastOnce(); expect(request.getServerName()).andReturn("woodstock"); expect(request.getHeader(HttpHeaders.X_FORWARDED_FOR)).andReturn(null); expect(request.getMethod()).andReturn("POST"); expect(request.getUri()).andReturn(new HttpURI("/data")); expect(request.getProtocol()).andReturn("http"); expect(response.getContentCount()).andReturn(128L); expect(request.getRemoteAddr()).andReturn("easymock-test"); expect(request.getHeader(HttpHeaders.REFERER)).andReturn(null); expect(request.getHeader(HttpHeaders.USER_AGENT)).andReturn("junit"); expect(request.getTimeStamp()).andReturn(clock.nowMillis()).atLeastOnce(); expect(sink.isLoggable(Level.INFO)).andReturn(true); sink.log(Level.INFO, "woodstock easymock-test [22/Dec/2009:00:00:00 +0000]" + " \"POST /data http\" 500 128 \"-\" \"junit\" 500"); control.replay(); clock.advance(Amount.of(500L, Time.MILLISECONDS)); log.log(request, response); } }