From c6e04fab819ed34b53845d29ba89cdd8ac0c0318 Mon Sep 17 00:00:00 2001 From: Jeff Ching Date: Wed, 28 Aug 2019 09:53:04 -0700 Subject: [PATCH 1/4] fix: disable uri normalization in ApacheHttpRequest --- .../com/google/api/client/http/apache/v2/ApacheHttpRequest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpRequest.java b/google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpRequest.java index 447edae66..ba58c2ef0 100644 --- a/google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpRequest.java +++ b/google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpRequest.java @@ -40,6 +40,7 @@ final class ApacheHttpRequest extends LowLevelHttpRequest { // disable redirects as google-http-client handles redirects this.requestConfig = RequestConfig.custom() .setRedirectsEnabled(false) + .setNormalizeUri(false) // TODO(chingor): configure in HttpClientBuilder when available .setStaleConnectionCheckEnabled(false); } From 71dc9ea95e8b3ce9b762e455cc9f37a912e86a31 Mon Sep 17 00:00:00 2001 From: Jeff Ching Date: Thu, 29 Aug 2019 14:05:23 -0700 Subject: [PATCH 2/4] test: add in-memory, local webserver for testing requested url --- .../apache/v2/ApacheHttpTransportTest.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java b/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java index dabd9bf3d..f95c3bc89 100644 --- a/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java +++ b/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java @@ -22,10 +22,17 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import com.google.api.client.http.GenericUrl; import com.google.api.client.http.LowLevelHttpResponse; import com.google.api.client.util.ByteArrayStreamingContent; +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; import java.io.IOException; +import java.io.OutputStream; +import java.net.InetSocketAddress; import java.nio.charset.StandardCharsets; +import java.util.Random; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import org.apache.http.Header; @@ -175,4 +182,32 @@ public void process(HttpRequest request, HttpContext context) } assertTrue("Expected to have called our test interceptor", interceptorCalled.get()); } + + @Test + public void testNormalizedUrl() throws IOException { + int port = 8000 + new Random().nextInt(1000); + HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); + server.createContext( + "/", + new HttpHandler() { + @Override + public void handle(HttpExchange httpExchange) throws IOException { + byte[] response = httpExchange.getRequestURI().toString().getBytes(); + httpExchange.sendResponseHeaders(200, response.length); + OutputStream os = httpExchange.getResponseBody(); + os.write(response); + os.close(); + } + }); + server.start(); + + ApacheHttpTransport transport = new ApacheHttpTransport(); + com.google.api.client.http.HttpResponse response = + transport + .createRequestFactory() + .buildGetRequest(new GenericUrl("http://localhost:" + port + "/foo//bar")) + .execute(); + assertEquals(200, response.getStatusCode()); + assertEquals("/foo//bar", response.parseAsString()); + } } From e9eb5dd63d46787a6325c29a0dfd77087d182917 Mon Sep 17 00:00:00 2001 From: Jeff Ching Date: Fri, 30 Aug 2019 07:51:23 -0700 Subject: [PATCH 3/4] fix: use try-with-resources on OutputStream --- .../api/client/http/apache/v2/ApacheHttpTransportTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java b/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java index f95c3bc89..296091e2f 100644 --- a/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java +++ b/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java @@ -194,9 +194,9 @@ public void testNormalizedUrl() throws IOException { public void handle(HttpExchange httpExchange) throws IOException { byte[] response = httpExchange.getRequestURI().toString().getBytes(); httpExchange.sendResponseHeaders(200, response.length); - OutputStream os = httpExchange.getResponseBody(); - os.write(response); - os.close(); + try (OutputStream out = httpExchange.getResponseBody()) { + out.write(response); + } } }); server.start(); From ac8a7259ef1c1d40c29adb91972d8292d613a333 Mon Sep 17 00:00:00 2001 From: Jeff Ching Date: Fri, 30 Aug 2019 07:58:40 -0700 Subject: [PATCH 4/4] fix: provide port of 0 to let InetSocketAddress pick a port --- .../api/client/http/apache/v2/ApacheHttpTransportTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java b/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java index 296091e2f..8e61afba6 100644 --- a/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java +++ b/google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java @@ -185,8 +185,7 @@ public void process(HttpRequest request, HttpContext context) @Test public void testNormalizedUrl() throws IOException { - int port = 8000 + new Random().nextInt(1000); - HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); + HttpServer server = HttpServer.create(new InetSocketAddress(0), 0); server.createContext( "/", new HttpHandler() { @@ -202,10 +201,12 @@ public void handle(HttpExchange httpExchange) throws IOException { server.start(); ApacheHttpTransport transport = new ApacheHttpTransport(); + GenericUrl testUrl = new GenericUrl("http://localhost/foo//bar"); + testUrl.setPort(server.getAddress().getPort()); com.google.api.client.http.HttpResponse response = transport .createRequestFactory() - .buildGetRequest(new GenericUrl("http://localhost:" + port + "/foo//bar")) + .buildGetRequest(testUrl) .execute(); assertEquals(200, response.getStatusCode()); assertEquals("/foo//bar", response.parseAsString());