# HG changeset patch # User chegar # Date 1517404133 0 # Node ID e4877b1aa02f805aed83a97e53ea2f9af549484e # Parent cf81ddfb20a88d472a136b9b638d9dd577bbf5e6 http-client-branch: expand FlowAdapterSubscriberTest with mapping using convenience handlers diff -r cf81ddfb20a8 -r e4877b1aa02f test/jdk/java/net/httpclient/FlowAdapterSubscriberTest.java --- a/test/jdk/java/net/httpclient/FlowAdapterSubscriberTest.java Wed Jan 31 11:49:50 2018 +0000 +++ b/test/jdk/java/net/httpclient/FlowAdapterSubscriberTest.java Wed Jan 31 13:08:53 2018 +0000 @@ -31,6 +31,7 @@ import java.nio.ByteBuffer; import java.util.Collection; import java.util.List; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.Flow; import java.util.concurrent.Flow.Subscriber; import java.util.function.Function; @@ -53,6 +54,8 @@ import javax.net.ssl.SSLContext; import static java.nio.charset.StandardCharsets.UTF_8; import static jdk.incubator.http.HttpRequest.BodyPublisher.fromString; +import static jdk.incubator.http.HttpResponse.BodySubscriber.asByteArray; +import static jdk.incubator.http.HttpResponse.BodySubscriber.asInputStream; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertThrows; import static org.testng.Assert.assertTrue; @@ -362,6 +365,39 @@ assertTrue(text.length() != 0); // what else can be asserted! } + + // -- mapping using convenience handlers + + @Test(dataProvider = "uris") + void mappingFromByteArray(String url) throws Exception{ + HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build(); + HttpRequest request = HttpRequest.newBuilder(URI.create(url)) + .POST(fromString("We're sucking diesel now!")).build(); + + client.sendAsync(request, BodyHandler.fromSubscriber(asByteArray(), + bas -> new String(bas.getBody().toCompletableFuture().join(), UTF_8))) + .thenApply(FlowAdapterSubscriberTest::assert200ResponseCode) + .thenApply(HttpResponse::body) + .thenAccept(body -> assertEquals(body, "We're sucking diesel now!")) + .join(); + } + + @Test(dataProvider = "uris") + void mappingFromInputStream(String url) throws Exception{ + HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build(); + HttpRequest request = HttpRequest.newBuilder(URI.create(url)) + .POST(fromString("May the wind always be at your back.")).build(); + + client.sendAsync(request, BodyHandler.fromSubscriber(asInputStream(), + ins -> { + InputStream is = ins.getBody().toCompletableFuture().join(); + return new String(uncheckedReadAllBytes(is), UTF_8); } )) + .thenApply(FlowAdapterSubscriberTest::assert200ResponseCode) + .thenApply(HttpResponse::body) + .thenAccept(body -> assertEquals(body, "May the wind always be at your back.")) + .join(); + } + /** An abstract Subscriber that converts all received data into a String. */ static abstract class AbstractSubscriber implements Supplier { protected volatile Flow.Subscription subscription; @@ -434,6 +470,19 @@ } } + static byte[] uncheckedReadAllBytes(InputStream is) { + try { + return is.readAllBytes(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + static final HttpResponse assert200ResponseCode(HttpResponse response) { + assertEquals(response.statusCode(), 200); + return response; + } + @BeforeTest public void setup() throws Exception { sslContext = new SimpleSSLContext().get();