aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/esper/testing/HttpClient.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/HttpClient.java')
-rwxr-xr-xsrc/main/java/io/trygvis/esper/testing/HttpClient.java82
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();
+ }
+ }
+}