From 5127c41673162f8ef75535719438ce8f78d1029c Mon Sep 17 00:00:00 2001 From: John Gardiner Myers Date: Sat, 22 Feb 2025 12:02:19 -0800 Subject: [PATCH] Declare BodySource a sealed interface --- .../main/java/com/proofpoint/http/client/BodySource.java | 3 ++- .../com/proofpoint/http/client/DynamicBodySource.java | 3 ++- .../com/proofpoint/http/client/InputStreamBodySource.java | 2 +- .../com/proofpoint/http/client/StaticBodyGenerator.java | 2 +- .../test/java/com/proofpoint/http/client/TestRequest.java | 8 +++++++- .../com/proofpoint/http/client/TestRequestBuilder.java | 5 +++-- .../client/balancing/AbstractTestBalancingHttpClient.java | 3 ++- .../http/client/balancing/TestBalancingHttpClient.java | 8 ++++---- 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/http-client/src/main/java/com/proofpoint/http/client/BodySource.java b/http-client/src/main/java/com/proofpoint/http/client/BodySource.java index 9b930a6f08..b0301c7908 100644 --- a/http-client/src/main/java/com/proofpoint/http/client/BodySource.java +++ b/http-client/src/main/java/com/proofpoint/http/client/BodySource.java @@ -15,7 +15,8 @@ */ package com.proofpoint.http.client; -public interface BodySource +public sealed interface BodySource + permits DynamicBodySource, InputStreamBodySource, StaticBodyGenerator { /** * @return the content length, if known, or -1 if the content length is unknown diff --git a/http-client/src/main/java/com/proofpoint/http/client/DynamicBodySource.java b/http-client/src/main/java/com/proofpoint/http/client/DynamicBodySource.java index 9e38386493..5f8fbc8515 100644 --- a/http-client/src/main/java/com/proofpoint/http/client/DynamicBodySource.java +++ b/http-client/src/main/java/com/proofpoint/http/client/DynamicBodySource.java @@ -17,7 +17,8 @@ import java.io.OutputStream; -public interface DynamicBodySource extends BodySource +public non-sealed interface DynamicBodySource + extends BodySource { /** * Start writing the request body. diff --git a/http-client/src/main/java/com/proofpoint/http/client/InputStreamBodySource.java b/http-client/src/main/java/com/proofpoint/http/client/InputStreamBodySource.java index be143e7734..d35906b0d6 100644 --- a/http-client/src/main/java/com/proofpoint/http/client/InputStreamBodySource.java +++ b/http-client/src/main/java/com/proofpoint/http/client/InputStreamBodySource.java @@ -21,7 +21,7 @@ import static com.google.common.base.Preconditions.checkState; -public class InputStreamBodySource +public non-sealed class InputStreamBodySource implements BodySource, LimitedRetryable { private final InputStream inputStream; diff --git a/http-client/src/main/java/com/proofpoint/http/client/StaticBodyGenerator.java b/http-client/src/main/java/com/proofpoint/http/client/StaticBodyGenerator.java index f1e3334bcf..83a0a87763 100644 --- a/http-client/src/main/java/com/proofpoint/http/client/StaticBodyGenerator.java +++ b/http-client/src/main/java/com/proofpoint/http/client/StaticBodyGenerator.java @@ -19,7 +19,7 @@ import java.nio.charset.Charset; -public class StaticBodyGenerator implements BodySource +public non-sealed class StaticBodyGenerator implements BodySource { public static StaticBodyGenerator createStaticBodyGenerator(String body, Charset charset) { diff --git a/http-client/src/test/java/com/proofpoint/http/client/TestRequest.java b/http-client/src/test/java/com/proofpoint/http/client/TestRequest.java index 777409e95e..fc8104b83e 100644 --- a/http-client/src/test/java/com/proofpoint/http/client/TestRequest.java +++ b/http-client/src/test/java/com/proofpoint/http/client/TestRequest.java @@ -19,6 +19,7 @@ import com.google.common.collect.ListMultimap; import org.testng.annotations.Test; +import java.io.OutputStream; import java.net.URI; import static com.proofpoint.http.client.Request.Builder.prepareGet; @@ -115,8 +116,13 @@ private static ListMultimap createHeadersB() public static BodySource createBodySource() { - return new BodySource() + return new DynamicBodySource() { + @Override + public Writer start(OutputStream out) throws Exception + { + throw new UnsupportedOperationException(); + } }; } } diff --git a/http-client/src/test/java/com/proofpoint/http/client/TestRequestBuilder.java b/http-client/src/test/java/com/proofpoint/http/client/TestRequestBuilder.java index ec462c1ba9..cdfde70a31 100644 --- a/http-client/src/test/java/com/proofpoint/http/client/TestRequestBuilder.java +++ b/http-client/src/test/java/com/proofpoint/http/client/TestRequestBuilder.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableListMultimap; import org.testng.annotations.Test; +import java.io.OutputStream; import java.net.URI; import static com.proofpoint.http.client.Request.Builder.fromRequest; @@ -30,8 +31,8 @@ public class TestRequestBuilder { - public static final BodySource NULL_BODY_SOURCE = new BodySource() - { + public static final BodySource NULL_BODY_SOURCE = (DynamicBodySource) out -> { + throw new UnsupportedOperationException(); }; @Test diff --git a/http-client/src/test/java/com/proofpoint/http/client/balancing/AbstractTestBalancingHttpClient.java b/http-client/src/test/java/com/proofpoint/http/client/balancing/AbstractTestBalancingHttpClient.java index 7d64608215..328232265b 100644 --- a/http-client/src/test/java/com/proofpoint/http/client/balancing/AbstractTestBalancingHttpClient.java +++ b/http-client/src/test/java/com/proofpoint/http/client/balancing/AbstractTestBalancingHttpClient.java @@ -16,6 +16,7 @@ package com.proofpoint.http.client.balancing; import com.proofpoint.http.client.BodySource; +import com.proofpoint.http.client.DynamicBodySource; import com.proofpoint.http.client.HttpClient; import com.proofpoint.http.client.LimitedRetryable; import com.proofpoint.http.client.Request; @@ -108,7 +109,7 @@ protected void setUp() .setMinBackoff(new Duration(1, TimeUnit.MILLISECONDS)) .setMaxBackoff(new Duration(2, TimeUnit.MILLISECONDS)); balancingHttpClient = createBalancingHttpClient(); - bodySource = mock(BodySource.class); + bodySource = mock(DynamicBodySource.class); request = preparePut().setUri(URI.create("v1/service")).setBodySource(bodySource).build(); requestArgumentCaptor = ArgumentCaptor.forClass(Request.class); response = mock(Response.class); diff --git a/http-client/src/test/java/com/proofpoint/http/client/balancing/TestBalancingHttpClient.java b/http-client/src/test/java/com/proofpoint/http/client/balancing/TestBalancingHttpClient.java index f71032a4c6..aa7e852cc0 100644 --- a/http-client/src/test/java/com/proofpoint/http/client/balancing/TestBalancingHttpClient.java +++ b/http-client/src/test/java/com/proofpoint/http/client/balancing/TestBalancingHttpClient.java @@ -100,7 +100,7 @@ class TestingHttpClient private String method; private List uris = new ArrayList<>(); private List responses = new ArrayList<>(); - private boolean skipBodyGenerator = false; + private boolean skipBodySource = false; TestingHttpClient(String method) { @@ -130,7 +130,7 @@ private TestingHttpClient expectCall(URI uri, Object response) @Override public TestingClient firstCallNoBodyGenerator() { - skipBodyGenerator = true; + skipBodySource = true; return this; } @@ -155,8 +155,8 @@ public T execute(Request request, ResponseHandler assertEquals(request.getUri(), uris.remove(0), "request uri"); assertEquals(request.getBodySource(), bodySource, "request body generator"); - if (skipBodyGenerator) { - skipBodyGenerator = false; + if (skipBodySource) { + skipBodySource = false; } else if (bodySource instanceof LimitedRetryable) { try {