aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/esper/testing/util/HttpClient.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/util/HttpClient.java')
-rwxr-xr-xsrc/main/java/io/trygvis/esper/testing/util/HttpClient.java123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/util/HttpClient.java b/src/main/java/io/trygvis/esper/testing/util/HttpClient.java
new file mode 100755
index 0000000..ef6f2a9
--- /dev/null
+++ b/src/main/java/io/trygvis/esper/testing/util/HttpClient.java
@@ -0,0 +1,123 @@
+package io.trygvis.esper.testing.util;
+
+import fj.*;
+import fj.data.*;
+import io.trygvis.esper.testing.*;
+import static java.lang.System.*;
+
+import org.apache.http.conn.scheme.*;
+import org.apache.http.impl.client.*;
+import org.apache.http.impl.conn.tsccm.*;
+import org.apache.http.params.*;
+import org.codehaus.httpcache4j.*;
+import org.codehaus.httpcache4j.cache.*;
+import org.codehaus.httpcache4j.resolver.*;
+import org.jdom2.*;
+
+import java.io.*;
+import java.net.*;
+import javax.xml.stream.*;
+
+public class HttpClient<A> {
+
+ private final HTTPCache http;
+ private final F<InputStream, Option<A>> f;
+
+ public HttpClient(HTTPCache http, F<InputStream, Option<A>> f) {
+ this.http = http;
+ this.f = f;
+ }
+
+ public Option<A> fetch(URI uri) throws IOException {
+ HTTPResponse response = null;
+
+ try {
+ response = http.execute(new HTTPRequest(uri));
+
+ if (response.getStatus().getCode() != 200) {
+ throw new IOException("Did not get 200 back, got " + response.getStatus().getCode());
+ }
+
+// return getDocument(response.getPayload().getInputStream());
+ return f.f(response.getPayload().getInputStream());
+ } catch (HTTPException e) {
+ throw new IOException(e);
+ } finally {
+ if (response != null) {
+ response.consume();
+ }
+ }
+ }
+
+
+ public static HTTPCache createHttpCache(Config config) {
+ SchemeRegistry schemeRegistry = new SchemeRegistry();
+ schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
+ schemeRegistry.register(new Scheme("https", new EasySSLSocketFactory(), 443));
+ BasicHttpParams params = new BasicHttpParams();
+ ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
+ ResponseResolver responseResolver = new HTTPClientResponseResolver(new DefaultHttpClient(cm, new BasicHttpParams()));
+
+ if (config.gitorious.sessionValue.isSome()) {
+ responseResolver = new GitoriousResponseResolver(config.gitorious.sessionValue.some(), responseResolver);
+ }
+
+ responseResolver = new TimingResponseResolver(responseResolver);
+
+ return new HTTPCache(new MemoryCacheStorage(), 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();
+ }
+ }
+}