diff --git a/services/git-bridge/pom.xml b/services/git-bridge/pom.xml index 07db011f45..74eaefe50d 100644 --- a/services/git-bridge/pom.xml +++ b/services/git-bridge/pom.xml @@ -12,18 +12,20 @@ + maven-compiler-plugin - 3.2 + 3.7.0 1.8 1.8 + maven-assembly-plugin - 2.5.2 + 3.1.0 package @@ -46,123 +48,141 @@ + junit junit 4.12 test + org.jmock jmock-junit4 - 2.8.2 + 2.8.4 test + org.eclipse.jetty jetty-servlet - 9.3.9.v20160517 + 9.4.8.v20171121 + org.eclipse.jetty jetty-server - 9.3.9.v20160517 + 9.4.8.v20171121 + com.google.code.gson gson - 2.6.2 + 2.8.2 + - com.ning + org.asynchttpclient async-http-client - 1.9.38 + 2.3.0 + org.eclipse.jgit org.eclipse.jgit - 4.4.1.201607150455-r + 4.10.0.201712302008-r + org.eclipse.jgit org.eclipse.jgit.http.server - 4.4.1.201607150455-r + 4.10.0.201712302008-r + org.xerial sqlite-jdbc - 3.8.11.2 + 3.21.0.1 + joda-time joda-time - 2.9.4 + 2.9.9 + com.google.oauth-client google-oauth-client - 1.22.0 + 1.23.0 + com.google.http-client google-http-client - 1.22.0 + 1.23.0 + com.google.http-client google-http-client-gson - 1.22.0 + 1.23.0 + - commons-lang - commons-lang - 2.6 + org.apache.commons + commons-lang3 + 3.7 + ch.qos.logback logback-classic - 1.1.7 + 1.2.3 + com.google.guava guava - 19.0 + 24.0-jre + org.mock-server mockserver-netty - 3.10.4 + 5.3.0 test org.mockito mockito-core - 1.10.19 + 2.13.0 + test com.amazonaws aws-java-sdk - 1.11.28 + 1.11.274 org.apache.httpcomponents httpclient - 4.5.2 + 4.5.5 commons-io commons-io - 2.5 + 2.6 org.apache.commons commons-compress - 1.12 + 1.15 diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCache.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCache.java index 9a2c72a548..e3c7911b6e 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCache.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCache.java @@ -1,6 +1,6 @@ package uk.ac.ic.wlgitbridge.bridge.resource; -import com.ning.http.client.AsyncHttpClient; +import static org.asynchttpclient.Dsl.*; import uk.ac.ic.wlgitbridge.bridge.db.DBStore; import uk.ac.ic.wlgitbridge.data.filestore.RawFile; import uk.ac.ic.wlgitbridge.data.filestore.RepositoryFile; @@ -31,7 +31,7 @@ public class UrlResourceCache implements ResourceCache { } public UrlResourceCache(DBStore dbStore) { - this(dbStore, new NingHttpClient(new AsyncHttpClient())); + this(dbStore, new NingHttpClient(asyncHttpClient())); } @Override @@ -82,8 +82,7 @@ public class UrlResourceCache implements ResourceCache { Log.info("GET -> " + url); try { contents = http.get(url, hs -> { - List contentLengths - = hs.getHeaders().get("Content-Length"); + List contentLengths = hs.getAll("Content-Length"); if (!maxFileSize.isPresent()) { return true; } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/swap/store/S3SwapStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/swap/store/S3SwapStore.java index ed1e379a7b..44d823aa8c 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/swap/store/S3SwapStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/bridge/swap/store/S3SwapStore.java @@ -1,8 +1,9 @@ package uk.ac.ic.wlgitbridge.bridge.swap.store; +import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3; -import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import java.io.InputStream; @@ -29,7 +30,7 @@ public class S3SwapStore implements SwapStore { String secret, String bucketName ) { - s3 = new AmazonS3Client(new BasicAWSCredentials(accessKey, secret)); + s3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secret))).build(); this.bucketName = bucketName; } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClient.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClient.java index b9f3d215ff..41c4bc73f3 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClient.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClient.java @@ -1,6 +1,7 @@ package uk.ac.ic.wlgitbridge.io.http.ning; -import com.ning.http.client.*; +import io.netty.handler.codec.http.HttpHeaders; +import org.asynchttpclient.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import uk.ac.ic.wlgitbridge.util.FunctionT; @@ -23,7 +24,7 @@ public class NingHttpClient implements NingHttpClientFacade { @Override public byte[] get( String url, - FunctionT handler + FunctionT handler ) throws ExecutionException { try { return http @@ -33,19 +34,19 @@ public class NingHttpClient implements NingHttpClientFacade { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); @Override - public STATE onHeadersReceived( - HttpResponseHeaders headers + public State onHeadersReceived( + HttpHeaders headers ) throws E { return handler.apply(headers) - ? STATE.CONTINUE : STATE.ABORT; + ? State.CONTINUE : State.ABORT; } @Override - public STATE onBodyPartReceived( + public State onBodyPartReceived( HttpResponseBodyPart content ) throws IOException { bytes.write(content.getBodyPartBytes()); - return STATE.CONTINUE; + return State.CONTINUE; } @Override diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClientFacade.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClientFacade.java index f0bf4c3770..2d1e0b3744 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClientFacade.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClientFacade.java @@ -1,6 +1,6 @@ package uk.ac.ic.wlgitbridge.io.http.ning; -import com.ning.http.client.HttpResponseHeaders; +import io.netty.handler.codec.http.HttpHeaders; import uk.ac.ic.wlgitbridge.util.FunctionT; import java.util.concurrent.ExecutionException; @@ -16,7 +16,7 @@ public interface NingHttpClientFacade { */ byte[] get( String url, - FunctionT handler + FunctionT handler ) throws ExecutionException; } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpHeaders.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpHeaders.java deleted file mode 100644 index 69093f37c4..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpHeaders.java +++ /dev/null @@ -1,46 +0,0 @@ -package uk.ac.ic.wlgitbridge.io.http.ning; - -import com.ning.http.client.FluentCaseInsensitiveStringsMap; -import com.ning.http.client.HttpResponseHeaders; - -import java.util.*; - -public class NingHttpHeaders extends HttpResponseHeaders { - - private final FluentCaseInsensitiveStringsMap map; - - private NingHttpHeaders(FluentCaseInsensitiveStringsMap map) { - this.map = map; - } - - public static NingHttpHeadersBuilder builder() { - return new NingHttpHeadersBuilder(); - } - - @Override - public FluentCaseInsensitiveStringsMap getHeaders() { - return map; - } - - public static class NingHttpHeadersBuilder { - - private final Map> map; - - private NingHttpHeadersBuilder() { - map = new HashMap<>(); - } - - public NingHttpHeadersBuilder addHeader(String key, String... values) { - map.computeIfAbsent(key, __ -> new ArrayList<>()) - .addAll(Arrays.asList(values)); - return this; - } - - public NingHttpHeaders build() { - return new NingHttpHeaders( - new FluentCaseInsensitiveStringsMap(map)); - } - - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java index 9316eb667b..34fabb794e 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/Request.java @@ -3,7 +3,8 @@ package uk.ac.ic.wlgitbridge.snapshot.base; import com.google.api.client.http.*; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.ning.http.client.AsyncHttpClient; +import org.asynchttpclient.AsyncHttpClient; +import static org.asynchttpclient.Dsl.*; import uk.ac.ic.wlgitbridge.snapshot.exception.FailedConnectionException; import uk.ac.ic.wlgitbridge.util.Instance; import uk.ac.ic.wlgitbridge.util.Log; @@ -17,7 +18,7 @@ import java.util.concurrent.*; */ public abstract class Request { - public static final AsyncHttpClient httpClient = new AsyncHttpClient(); + public static final AsyncHttpClient httpClient = asyncHttpClient(); private static final Executor executor = Executors.newCachedThreadPool(); diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/server/PostbackThread.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/server/PostbackThread.java index a20bfd6ecf..c3559552ed 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/server/PostbackThread.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/snapshot/servermock/server/PostbackThread.java @@ -2,7 +2,7 @@ package uk.ac.ic.wlgitbridge.snapshot.servermock.server; import com.google.gson.Gson; import com.google.gson.JsonObject; -import com.ning.http.client.AsyncHttpClient; +import static org.asynchttpclient.Dsl.*; import uk.ac.ic.wlgitbridge.util.Log; import java.io.IOException; @@ -30,17 +30,9 @@ public class PostbackThread extends Thread { @Override public void run() { try { - new AsyncHttpClient().preparePost( + asyncHttpClient().preparePost( url ).setBody(postback).execute().get().getResponseBody(); - } catch (IOException e) { - Log.warn( - "IOException on postback, url: " + - url + - ", postback: " + - postback, - e - ); } catch (InterruptedException e) { Log.warn( "Interrupted on postback, url: " + diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java index cd103fca5b..dba7989362 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/WLGitBridgeIntegrationTest.java @@ -1,9 +1,9 @@ package uk.ac.ic.wlgitbridge.application; -import com.ning.http.client.AsyncHttpClient; -import com.ning.http.client.Response; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; +import static org.asynchttpclient.Dsl.*; +import org.asynchttpclient.*; import org.eclipse.jgit.api.errors.GitAPIException; import org.junit.Before; import org.junit.Rule; @@ -613,22 +613,22 @@ public class WLGitBridgeIntegrationTest { // With no key, we should get a 404. String url = "http://127.0.0.1:" + gitBridgePort + "/api/testproj/push.tex"; - Response response = new AsyncHttpClient().prepareGet(url).execute().get(); + Response response = asyncHttpClient().prepareGet(url).execute().get(); assertEquals(404, response.getStatusCode()); // With an invalid project and no key, we should get a 404. url = "http://127.0.0.1:" + gitBridgePort + "/api/notavalidproject/push.tex"; - response = new AsyncHttpClient().prepareGet(url).execute().get(); + response = asyncHttpClient().prepareGet(url).execute().get(); assertEquals(404, response.getStatusCode()); // With a bad key for a valid project, we should get a 404. url = "http://127.0.0.1:" + gitBridgePort + "/api/testproj/push.tex?key=notavalidkey"; - response = new AsyncHttpClient().prepareGet(url).execute().get(); + response = asyncHttpClient().prepareGet(url).execute().get(); assertEquals(404, response.getStatusCode()); // With a bad key for an invalid project, we should get a 404. url = "http://127.0.0.1:" + gitBridgePort + "/api/notavalidproject/push.tex?key=notavalidkey"; - response = new AsyncHttpClient().prepareGet(url).execute().get(); + response = asyncHttpClient().prepareGet(url).execute().get(); assertEquals(404, response.getStatusCode()); wlgb.stop(); @@ -719,14 +719,14 @@ public class WLGitBridgeIntegrationTest { // With an invalid project and no key, we should get a 404, // which is rendered by our custom error handler. String url = "http://127.0.0.1:" + gitBridgePort + "/api/notavalidproject/main.tex"; - Response response = new AsyncHttpClient().prepareGet(url).execute().get(); + Response response = asyncHttpClient().prepareGet(url).execute().get(); assertEquals(404, response.getStatusCode()); assertEquals("{\"message\":\"HTTP error 404\"}", response.getResponseBody()); // With an unsupported URL outside the api, we should get a 500, // which is rendered by our custom error handler. url = "http://127.0.0.1:" + gitBridgePort + "/foo"; - response = new AsyncHttpClient().prepareGet(url).execute().get(); + response = asyncHttpClient().prepareGet(url).execute().get(); assertEquals(500, response.getStatusCode()); assertEquals("{\"message\":\"HTTP error 500\"}", response.getResponseBody()); diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java index c58165c3ea..e6a93d8a30 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java @@ -1,12 +1,12 @@ package uk.ac.ic.wlgitbridge.bridge.resource; -import com.ning.http.client.HttpResponseHeaders; +import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.DefaultHttpHeaders; import org.junit.Test; import uk.ac.ic.wlgitbridge.bridge.db.noop.NoopDbStore; import uk.ac.ic.wlgitbridge.bridge.util.CastUtil; import uk.ac.ic.wlgitbridge.git.exception.SizeLimitExceededException; import uk.ac.ic.wlgitbridge.io.http.ning.NingHttpClientFacade; -import uk.ac.ic.wlgitbridge.io.http.ning.NingHttpHeaders; import uk.ac.ic.wlgitbridge.util.FunctionT; import java.io.IOException; @@ -31,11 +31,8 @@ public class UrlResourceCacheTest { private final UrlResourceCache cache = new UrlResourceCache(new NoopDbStore(), http); - private static HttpResponseHeaders withContentLength(long cl) { - return NingHttpHeaders - .builder() - .addHeader("Content-Length", String.valueOf(cl)) - .build(); + private static HttpHeaders withContentLength(long cl) { + return new DefaultHttpHeaders().add("Content-Length", String.valueOf(cl)); } private void respondWithContentLength(long cl, long actual) @@ -44,7 +41,7 @@ public class UrlResourceCacheTest { Object[] args = invoc.getArguments(); //noinspection unchecked ((FunctionT< - HttpResponseHeaders, Boolean, SizeLimitExceededException + HttpHeaders, Boolean, SizeLimitExceededException >) args[1]).apply(withContentLength(cl)); return new byte[CastUtil.assumeInt(actual)]; });