From b2f6521de1b2323b4ca02466f816b659cf00b45a Mon Sep 17 00:00:00 2001 From: Slava Fomin Date: Tue, 13 Jun 2017 12:45:51 +0300 Subject: [PATCH 1/4] Adds custom status to bad request response composer --- .../proxy/BadGatewayFailureHttpResponseComposer.java | 7 ++++++- .../BadGatewayFailureHttpResponseComposerTest.java | 12 +++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposer.java b/src/main/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposer.java index f115332cb..7fe67f272 100644 --- a/src/main/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposer.java +++ b/src/main/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposer.java @@ -20,8 +20,9 @@ public class BadGatewayFailureHttpResponseComposer implements FailureHttpRespons @Override public FullHttpResponse compose(HttpRequest httpRequest, Throwable cause) { String body = provideCustomMessage(httpRequest, cause); + HttpResponseStatus status = provideCustomStatus(httpRequest, cause); - FullHttpResponse response = ProxyUtils.createFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.BAD_GATEWAY, body); + FullHttpResponse response = ProxyUtils.createFullHttpResponse(HttpVersion.HTTP_1_1, status, body); if (ProxyUtils.isHEAD(httpRequest)) { // don't allow any body content in response to a HEAD request @@ -39,4 +40,8 @@ public FullHttpResponse compose(HttpRequest httpRequest, Throwable cause) { protected String provideCustomMessage(HttpRequest httpRequest, Throwable cause) { return "Bad Gateway: " + httpRequest.getUri(); } + + protected HttpResponseStatus provideCustomStatus(HttpRequest httpRequest, Throwable cause) { + return HttpResponseStatus.BAD_GATEWAY; + } } diff --git a/src/test/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposerTest.java b/src/test/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposerTest.java index 8a7333e0c..d21e1cf06 100644 --- a/src/test/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposerTest.java +++ b/src/test/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposerTest.java @@ -3,6 +3,7 @@ import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.Test; import java.io.IOException; @@ -29,12 +30,17 @@ public void testDefault() throws IOException { } @Test - public void testCustomMessage() throws IOException { + public void testCustomMessageAndStatus() throws IOException { FailureHttpResponseComposer badGatewayResponseComposer = new BadGatewayFailureHttpResponseComposer() { @Override protected String provideCustomMessage(HttpRequest httpRequest, Throwable cause) { return "Invalid certificate: " + httpRequest.getUri(); } + + @Override + protected HttpResponseStatus provideCustomStatus(HttpRequest httpRequest, Throwable cause) { + return new HttpResponseStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR.code(), "Something is wrong"); + } }; HttpRequest initialRequest = mock(HttpRequest.class); @@ -42,8 +48,8 @@ protected String provideCustomMessage(HttpRequest httpRequest, Throwable cause) FullHttpResponse response = badGatewayResponseComposer.compose(initialRequest, new RuntimeException()); - assertEquals(502, response.getStatus().code()); - assertEquals("Bad Gateway", response.getStatus().reasonPhrase()); + assertEquals(500, response.getStatus().code()); + assertEquals("Something is wrong", response.getStatus().reasonPhrase()); assertEquals("Invalid certificate: " + REQUEST_URI, new String(response.content().array())); } From c85ae57b681cbc455bfa80a04d98a0cbac979344 Mon Sep 17 00:00:00 2001 From: Slava Fomin Date: Tue, 13 Jun 2017 12:47:31 +0300 Subject: [PATCH 2/4] bumps up version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e895f4e6c..69eb55325 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.littleshoot littleproxy jar - 1.1.3.2-VGS-SNAPSHOT + 1.1.3.3-VGS-SNAPSHOT LittleProxy LittleProxy is a high performance HTTP proxy written in Java and using the Netty networking framework. From 96b47c8bee9dc716811b7d1ed180df23cb1f8383 Mon Sep 17 00:00:00 2001 From: Slava Fomin Date: Wed, 14 Jun 2017 18:30:40 +0300 Subject: [PATCH 3/4] Renames BadGatewayFailureHttpResponseComposer --- ...poser.java => DefaultFailureHttpResponseComposer.java} | 2 +- .../org/littleshoot/proxy/HttpProxyServerBootstrap.java | 2 +- .../littleshoot/proxy/impl/ClientToProxyConnection.java | 4 ++-- .../littleshoot/proxy/impl/DefaultHttpProxyServer.java | 4 ++-- ...t.java => DefaultFailureHttpResponseComposerTest.java} | 8 ++++---- .../proxy/impl/DefaultHttpProxyServerTest.java | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) rename src/main/java/org/littleshoot/proxy/{BadGatewayFailureHttpResponseComposer.java => DefaultFailureHttpResponseComposer.java} (95%) rename src/test/java/org/littleshoot/proxy/{BadGatewayFailureHttpResponseComposerTest.java => DefaultFailureHttpResponseComposerTest.java} (93%) diff --git a/src/main/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposer.java b/src/main/java/org/littleshoot/proxy/DefaultFailureHttpResponseComposer.java similarity index 95% rename from src/main/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposer.java rename to src/main/java/org/littleshoot/proxy/DefaultFailureHttpResponseComposer.java index 7fe67f272..15b8c2572 100644 --- a/src/main/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposer.java +++ b/src/main/java/org/littleshoot/proxy/DefaultFailureHttpResponseComposer.java @@ -6,7 +6,7 @@ import io.netty.handler.codec.http.HttpVersion; import org.littleshoot.proxy.impl.ProxyUtils; -public class BadGatewayFailureHttpResponseComposer implements FailureHttpResponseComposer { +public class DefaultFailureHttpResponseComposer implements FailureHttpResponseComposer { /** * Tells the client that something went wrong trying to proxy its request. If the Bad Gateway is a response to diff --git a/src/main/java/org/littleshoot/proxy/HttpProxyServerBootstrap.java b/src/main/java/org/littleshoot/proxy/HttpProxyServerBootstrap.java index 118205a5e..7d9570500 100644 --- a/src/main/java/org/littleshoot/proxy/HttpProxyServerBootstrap.java +++ b/src/main/java/org/littleshoot/proxy/HttpProxyServerBootstrap.java @@ -204,7 +204,7 @@ HttpProxyServerBootstrap withFiltersSource( *

* *

- * Default = {@link BadGatewayFailureHttpResponseComposer} + * Default = {@link DefaultFailureHttpResponseComposer} *

* * @param unrecoverableFailureHttpResponseComposer custom response message composer diff --git a/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java b/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java index f5e6a908b..23df9e252 100644 --- a/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java +++ b/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java @@ -25,7 +25,7 @@ import io.netty.util.concurrent.GenericFutureListener; import org.apache.commons.lang3.StringUtils; import org.littleshoot.proxy.ActivityTracker; -import org.littleshoot.proxy.BadGatewayFailureHttpResponseComposer; +import org.littleshoot.proxy.DefaultFailureHttpResponseComposer; import org.littleshoot.proxy.FailureHttpResponseComposer; import org.littleshoot.proxy.FlowContext; import org.littleshoot.proxy.FullFlowContext; @@ -1208,7 +1208,7 @@ private void stripHopByHopHeaders(HttpHeaders headers) { * @return true if the connection will be kept open, or false if it will be disconnected */ private boolean writeBadGateway(HttpRequest httpRequest) { - FullHttpResponse badGatewayResponse = new BadGatewayFailureHttpResponseComposer().compose(httpRequest, null); + FullHttpResponse badGatewayResponse = new DefaultFailureHttpResponseComposer().compose(httpRequest, null); return respondWithShortCircuitResponse(badGatewayResponse); } diff --git a/src/main/java/org/littleshoot/proxy/impl/DefaultHttpProxyServer.java b/src/main/java/org/littleshoot/proxy/impl/DefaultHttpProxyServer.java index 64bb78cbe..fabc9dc74 100644 --- a/src/main/java/org/littleshoot/proxy/impl/DefaultHttpProxyServer.java +++ b/src/main/java/org/littleshoot/proxy/impl/DefaultHttpProxyServer.java @@ -17,7 +17,7 @@ import io.netty.handler.traffic.GlobalTrafficShapingHandler; import io.netty.util.concurrent.GlobalEventExecutor; import org.littleshoot.proxy.ActivityTracker; -import org.littleshoot.proxy.BadGatewayFailureHttpResponseComposer; +import org.littleshoot.proxy.DefaultFailureHttpResponseComposer; import org.littleshoot.proxy.ChainedProxyManager; import org.littleshoot.proxy.DefaultHostResolver; import org.littleshoot.proxy.DnsSecServerResolver; @@ -622,7 +622,7 @@ private static class DefaultHttpProxyServerBootstrap implements HttpProxyServerB private ChainedProxyManager chainProxyManager = null; private MitmManagerFactory mitmManagerFactory = null; private HttpFiltersSource filtersSource = new HttpFiltersSourceAdapter(); - private FailureHttpResponseComposer unrecoverableFailureHttpResponseComposer = new BadGatewayFailureHttpResponseComposer(); + private FailureHttpResponseComposer unrecoverableFailureHttpResponseComposer = new DefaultFailureHttpResponseComposer(); private boolean transparent = false; private int idleConnectionTimeout = 70; private Collection activityTrackers = new ConcurrentLinkedQueue(); diff --git a/src/test/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposerTest.java b/src/test/java/org/littleshoot/proxy/DefaultFailureHttpResponseComposerTest.java similarity index 93% rename from src/test/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposerTest.java rename to src/test/java/org/littleshoot/proxy/DefaultFailureHttpResponseComposerTest.java index d21e1cf06..1c8466c14 100644 --- a/src/test/java/org/littleshoot/proxy/BadGatewayFailureHttpResponseComposerTest.java +++ b/src/test/java/org/littleshoot/proxy/DefaultFailureHttpResponseComposerTest.java @@ -11,13 +11,13 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.*; -public class BadGatewayFailureHttpResponseComposerTest { +public class DefaultFailureHttpResponseComposerTest { private static final String REQUEST_URI = "https://localhost/hi"; @Test public void testDefault() throws IOException { - FailureHttpResponseComposer badGatewayResponseComposer = new BadGatewayFailureHttpResponseComposer(); + FailureHttpResponseComposer badGatewayResponseComposer = new DefaultFailureHttpResponseComposer(); HttpRequest initialRequest = mock(HttpRequest.class); when(initialRequest.getUri()).thenReturn(REQUEST_URI); @@ -31,7 +31,7 @@ public void testDefault() throws IOException { @Test public void testCustomMessageAndStatus() throws IOException { - FailureHttpResponseComposer badGatewayResponseComposer = new BadGatewayFailureHttpResponseComposer() { + FailureHttpResponseComposer badGatewayResponseComposer = new DefaultFailureHttpResponseComposer() { @Override protected String provideCustomMessage(HttpRequest httpRequest, Throwable cause) { return "Invalid certificate: " + httpRequest.getUri(); @@ -55,7 +55,7 @@ protected HttpResponseStatus provideCustomStatus(HttpRequest httpRequest, Throwa @Test public void testClearedContent() throws IOException { - FailureHttpResponseComposer badGatewayResponseComposer = new BadGatewayFailureHttpResponseComposer(); + FailureHttpResponseComposer badGatewayResponseComposer = new DefaultFailureHttpResponseComposer(); HttpRequest initialRequest = mock(HttpRequest.class); when(initialRequest.getUri()).thenReturn(REQUEST_URI); diff --git a/src/test/java/org/littleshoot/proxy/impl/DefaultHttpProxyServerTest.java b/src/test/java/org/littleshoot/proxy/impl/DefaultHttpProxyServerTest.java index eb370fc51..ba3148d26 100644 --- a/src/test/java/org/littleshoot/proxy/impl/DefaultHttpProxyServerTest.java +++ b/src/test/java/org/littleshoot/proxy/impl/DefaultHttpProxyServerTest.java @@ -3,7 +3,7 @@ import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpRequest; import org.junit.Test; -import org.littleshoot.proxy.BadGatewayFailureHttpResponseComposer; +import org.littleshoot.proxy.DefaultFailureHttpResponseComposer; import org.littleshoot.proxy.FailureHttpResponseComposer; import static org.junit.Assert.assertTrue; @@ -13,7 +13,7 @@ public class DefaultHttpProxyServerTest { @Test public void testDefaultUnrecoverableFailureHttpResponseComposer() { DefaultHttpProxyServer httpProxyServer = (DefaultHttpProxyServer) DefaultHttpProxyServer.bootstrap().start(); - assertTrue(httpProxyServer.getUnrecoverableFailureHttpResponseComposer() instanceof BadGatewayFailureHttpResponseComposer); + assertTrue(httpProxyServer.getUnrecoverableFailureHttpResponseComposer() instanceof DefaultFailureHttpResponseComposer); httpProxyServer.stop(); } From 048aa33ea430b31d69f645daed1ed95ab476badc Mon Sep 17 00:00:00 2001 From: Slava Fomin Date: Wed, 21 Jun 2017 22:07:46 +0300 Subject: [PATCH 4/4] Removes unused import --- .../java/org/littleshoot/proxy/impl/ClientToProxyConnection.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java b/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java index 2329f558a..dca696d4b 100644 --- a/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java +++ b/src/main/java/org/littleshoot/proxy/impl/ClientToProxyConnection.java @@ -26,7 +26,6 @@ import org.apache.commons.lang3.StringUtils; import org.littleshoot.proxy.ActivityTracker; import org.littleshoot.proxy.DefaultFailureHttpResponseComposer; -import org.littleshoot.proxy.BadGatewayFailureHttpResponseComposer; import org.littleshoot.proxy.ExceptionHandler; import org.littleshoot.proxy.FailureHttpResponseComposer; import org.littleshoot.proxy.FlowContext;