diff options
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/HttpClient.java')
-rwxr-xr-x | src/main/java/io/trygvis/esper/testing/HttpClient.java | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/HttpClient.java b/src/main/java/io/trygvis/esper/testing/HttpClient.java new file mode 100755 index 0000000..d9adc8d --- /dev/null +++ b/src/main/java/io/trygvis/esper/testing/HttpClient.java @@ -0,0 +1,82 @@ +package io.trygvis.esper.testing; + +import static java.lang.System.*; +import org.codehaus.httpcache4j.*; +import org.codehaus.httpcache4j.cache.*; +import org.codehaus.httpcache4j.client.*; +import org.codehaus.httpcache4j.resolver.*; + +import java.io.*; + +public class HttpClient { + + public static HTTPCache createHttpClient(Config config) { + return new HTTPCache(new MemoryCacheStorage(), createResponseResolver(config)); + } + + private static ResponseResolver createResponseResolver(final Config config) { + ResponseResolver responseResolver = HTTPClientResponseResolver.createMultithreadedInstance(); + + if (config.gitoriousSessionValue.isSome()) { + responseResolver = new GitoriousResponseResolver(config.gitoriousSessionValue.some(), responseResolver); + } + + responseResolver = new TimingResponseResolver(responseResolver); + + return responseResolver; + } + + private static class TimingResponseResolver implements ResponseResolver { + private final ResponseResolver r; + + private TimingResponseResolver(ResponseResolver r) { + this.r = r; + } + + public HTTPResponse resolve(HTTPRequest request) throws IOException { + System.out.println(request.getRequestURI() + ": Executing"); + long start = currentTimeMillis(); + Status status = null; + try { + HTTPResponse response = r.resolve(request); + status = response.getStatus(); + return response; + } finally { + long end = currentTimeMillis(); + + String s = request.getRequestURI() + ": Executed in " + (end - start) + "ms, "; + + if (status != null) { + s += "response: " + status.getCode() + " " + status.getName(); + } else { + s += "with exception"; + } + + System.out.println(s); + } + } + + public void shutdown() { + r.shutdown(); + } + } + + private static class GitoriousResponseResolver implements ResponseResolver { + private final String gitoriousSessionValue; + private final ResponseResolver responseResolver; + + public GitoriousResponseResolver(String gitoriousSessionValue, ResponseResolver responseResolver) { + this.gitoriousSessionValue = gitoriousSessionValue; + this.responseResolver = responseResolver; + } + + public HTTPResponse resolve(HTTPRequest request) throws IOException { + request = request.addHeader("Cookie", "_gitorious_sess=" + gitoriousSessionValue); + return responseResolver.resolve(request); + } + + public void shutdown() { + responseResolver.shutdown(); + } + } +} |