test/jdk/java/net/httpclient/LineBodyHandlerTest.java
author chegar
Wed, 07 Feb 2018 14:17:24 +0000
branchhttp-client-branch
changeset 56089 42208b2f224e
parent 56076 9a2855e0a796
child 56092 fd85b2bf2b0d
permissions -rw-r--r--
http-client-branch: move to standard package and module name
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
     1
/*
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
     4
 *
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
     7
 * published by the Free Software Foundation.
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
     8
 *
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    13
 * accompanied this code).
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    14
 *
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    18
 *
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    21
 * questions.
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    22
 */
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    23
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    24
import com.sun.net.httpserver.HttpExchange;
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    25
import com.sun.net.httpserver.HttpHandler;
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    26
import com.sun.net.httpserver.HttpServer;
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    27
import com.sun.net.httpserver.HttpsConfigurator;
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    28
import com.sun.net.httpserver.HttpsServer;
56089
42208b2f224e http-client-branch: move to standard package and module name
chegar
parents: 56076
diff changeset
    29
import java.net.http.HttpClient;
42208b2f224e http-client-branch: move to standard package and module name
chegar
parents: 56076
diff changeset
    30
import java.net.http.HttpRequest;
42208b2f224e http-client-branch: move to standard package and module name
chegar
parents: 56076
diff changeset
    31
import java.net.http.HttpResponse;
42208b2f224e http-client-branch: move to standard package and module name
chegar
parents: 56076
diff changeset
    32
import java.net.http.HttpResponse.BodyHandler;
42208b2f224e http-client-branch: move to standard package and module name
chegar
parents: 56076
diff changeset
    33
import java.net.http.HttpResponse.BodySubscriber;
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    34
import jdk.testlibrary.SimpleSSLContext;
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    35
import org.testng.annotations.AfterTest;
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    36
import org.testng.annotations.BeforeTest;
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    37
import org.testng.annotations.DataProvider;
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    38
import org.testng.annotations.Test;
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    39
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    40
import javax.net.ssl.SSLContext;
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    41
import java.io.BufferedReader;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    42
import java.io.ByteArrayOutputStream;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    43
import java.io.IOException;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    44
import java.io.InputStream;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    45
import java.io.OutputStream;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    46
import java.io.PrintStream;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    47
import java.io.StringReader;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    48
import java.io.UncheckedIOException;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    49
import java.math.BigInteger;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    50
import java.net.InetSocketAddress;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    51
import java.net.URI;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    52
import java.nio.charset.Charset;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    53
import java.nio.charset.StandardCharsets;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    54
import java.util.ArrayList;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    55
import java.util.List;
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    56
import java.util.concurrent.CompletableFuture;
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    57
import java.util.concurrent.CopyOnWriteArrayList;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    58
import java.util.concurrent.Flow;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    59
import java.util.function.Function;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    60
import java.util.function.Supplier;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    61
import java.util.stream.Collectors;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    62
import java.util.stream.Stream;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    63
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    64
import static java.nio.charset.StandardCharsets.UTF_16;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    65
import static java.nio.charset.StandardCharsets.UTF_8;
56089
42208b2f224e http-client-branch: move to standard package and module name
chegar
parents: 56076
diff changeset
    66
import static java.net.http.HttpRequest.BodyPublisher.fromString;
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    67
import static org.testng.Assert.assertEquals;
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
    68
import static org.testng.Assert.assertNotNull;
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    69
import static org.testng.Assert.assertThrows;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    70
import static org.testng.Assert.assertTrue;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    71
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    72
/*
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    73
 * @test
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    74
 * @summary Basic tests for line adapter subscribers as created by
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    75
 *          the BodyHandlers returned by BodyHandler::fromLineSubscriber
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    76
 *          and BodyHandler::asLines
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    77
 * @modules java.base/sun.net.www.http
56089
42208b2f224e http-client-branch: move to standard package and module name
chegar
parents: 56076
diff changeset
    78
 *          java.net.http/java.net.http.internal.common
42208b2f224e http-client-branch: move to standard package and module name
chegar
parents: 56076
diff changeset
    79
 *          java.net.http/java.net.http.internal.frame
42208b2f224e http-client-branch: move to standard package and module name
chegar
parents: 56076
diff changeset
    80
 *          java.net.http/java.net.http.internal.hpack
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    81
 *          java.logging
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    82
 *          jdk.httpserver
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    83
 * @library /lib/testlibrary http2/server
56070
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
    84
 * @build Http2TestServer LineBodyHandlerTest HttpServerAdapters
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    85
 * @build jdk.testlibrary.SimpleSSLContext
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    86
 * @run testng/othervm LineBodyHandlerTest
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    87
 */
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    88
56070
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
    89
public class LineBodyHandlerTest implements HttpServerAdapters {
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    90
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    91
    SSLContext sslContext;
56070
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
    92
    HttpTestServer httpTestServer;    // HTTP/1.1    [ 4 servers ]
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
    93
    HttpTestServer httpsTestServer;   // HTTPS/1.1
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
    94
    HttpTestServer http2TestServer;   // HTTP/2 ( h2c )
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
    95
    HttpTestServer https2TestServer;  // HTTP/2 ( h2  )
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    96
    String httpURI;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    97
    String httpsURI;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    98
    String http2URI;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
    99
    String https2URI;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   100
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   101
    @DataProvider(name = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   102
    public Object[][] variants() {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   103
        return new Object[][]{
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   104
                { httpURI   },
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   105
                { httpsURI  },
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   106
                { http2URI  },
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   107
                { https2URI },
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   108
        };
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   109
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   110
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   111
    static final Class<NullPointerException> NPE = NullPointerException.class;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   112
    static final Class<IllegalArgumentException> IAE = IllegalArgumentException.class;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   113
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   114
    @Test
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   115
    public void testNull() {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   116
        assertThrows(NPE, () -> BodyHandler.fromLineSubscriber(null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   117
        assertNotNull(BodyHandler.fromLineSubscriber(new StringSubscriber()));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   118
        assertThrows(NPE, () -> BodyHandler.fromLineSubscriber(null, Function.identity(), "\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   119
        assertThrows(NPE, () -> BodyHandler.fromLineSubscriber(new StringSubscriber(), null, "\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   120
        assertNotNull(BodyHandler.fromLineSubscriber(new StringSubscriber(), Function.identity(), null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   121
        assertThrows(NPE, () -> BodyHandler.fromLineSubscriber(null, null, "\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   122
        assertThrows(NPE, () -> BodyHandler.fromLineSubscriber(null, Function.identity(), null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   123
        assertThrows(NPE, () -> BodyHandler.fromLineSubscriber(new StringSubscriber(), null, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   124
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   125
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   126
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(null, Function.identity(),
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   127
                Charset.defaultCharset(), System.lineSeparator()));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   128
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(new StringSubscriber(), null,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   129
                Charset.defaultCharset(), System.lineSeparator()));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   130
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(new StringSubscriber(), Function.identity(),
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   131
                null, System.lineSeparator()));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   132
        assertNotNull(BodySubscriber.fromLineSubscriber(new StringSubscriber(), Function.identity(),
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   133
                Charset.defaultCharset(), null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   134
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(null, null,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   135
                Charset.defaultCharset(), System.lineSeparator()));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   136
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(null, Function.identity(),
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   137
                null, System.lineSeparator()));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   138
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(null, Function.identity(),
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   139
                Charset.defaultCharset(), null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   140
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(new StringSubscriber(), null,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   141
                null, System.lineSeparator()));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   142
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(new StringSubscriber(), null,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   143
                Charset.defaultCharset(), null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   144
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(new StringSubscriber(), Function.identity(),
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   145
                null, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   146
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(new StringSubscriber(), null, null, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   147
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(null, Function.identity(),
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   148
                null, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   149
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(null, null,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   150
                Charset.defaultCharset(), null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   151
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(null, null,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   152
                null, System.lineSeparator()));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   153
        assertThrows(NPE, () -> BodySubscriber.fromLineSubscriber(null, null, null, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   154
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   155
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   156
    @Test
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   157
    public void testIAE() {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   158
        assertThrows(IAE, () -> BodyHandler.fromLineSubscriber(new StringSubscriber(), Function.identity(),""));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   159
        assertThrows(IAE, () -> BodyHandler.fromLineSubscriber(new CharSequenceSubscriber(), Function.identity(),""));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   160
        assertThrows(IAE, () -> BodyHandler.fromLineSubscriber(new ObjectSubscriber(), Function.identity(), ""));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   161
        assertThrows(IAE, () -> BodySubscriber.fromLineSubscriber(new StringSubscriber(), Function.identity(),
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   162
                    StandardCharsets.UTF_8, ""));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   163
        assertThrows(IAE, () -> BodySubscriber.fromLineSubscriber(new CharSequenceSubscriber(), Function.identity(),
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   164
                    StandardCharsets.UTF_16, ""));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   165
        assertThrows(IAE, () -> BodySubscriber.fromLineSubscriber(new ObjectSubscriber(), Function.identity(),
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   166
                    StandardCharsets.US_ASCII, ""));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   167
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   168
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   169
    private static final List<String> lines(String text, String eol) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   170
        if (eol == null) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   171
            return new BufferedReader(new StringReader(text)).lines().collect(Collectors.toList());
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   172
        } else {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   173
            String replaced = text.replace(eol, "|");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   174
            int i=0;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   175
            while(replaced.endsWith("||")) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   176
                replaced = replaced.substring(0,replaced.length()-1);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   177
                i++;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   178
            }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   179
            List<String> res = List.of(replaced.split("\\|"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   180
            if (i > 0) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   181
                res = new ArrayList<>(res);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   182
                for (int j=0; j<i; j++) res.add("");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   183
            }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   184
            return res;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   185
        }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   186
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   187
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   188
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   189
    void testStringWithFinisher(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   190
        String body = "May the luck of the Irish be with you!";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   191
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext)
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   192
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   193
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   194
                .POST(fromString(body))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   195
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   196
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   197
        StringSubscriber subscriber = new StringSubscriber();
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   198
        CompletableFuture<HttpResponse<String>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   199
                = client.sendAsync(request, BodyHandler.fromLineSubscriber(
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   200
                        subscriber, Supplier::get, "\n"));
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   201
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   202
        HttpResponse<String> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   203
        String text = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   204
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   205
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   206
        assertEquals(text, body);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   207
        assertEquals(subscriber.list, lines(body, "\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   208
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   209
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   210
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   211
    void testAsStream(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   212
        String body = "May the luck of the Irish be with you!";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   213
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext)
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   214
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   215
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   216
                .POST(fromString(body))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   217
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   218
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   219
        CompletableFuture<HttpResponse<Stream<String>>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   220
                = client.sendAsync(request, BodyHandler.asLines());
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   221
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   222
        HttpResponse<Stream<String>> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   223
        Stream<String> stream = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   224
        List<String> list = stream.collect(Collectors.toList());
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   225
        String text = list.stream().collect(Collectors.joining("|"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   226
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   227
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   228
        assertEquals(text, body);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   229
        assertEquals(list, List.of(body));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   230
        assertEquals(list, lines(body, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   231
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   232
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   233
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   234
    void testStringWithFinisher2(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   235
        String body = "May the luck\r\n\r\n of the Irish be with you!";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   236
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   237
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   238
                .POST(fromString(body))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   239
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   240
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   241
        StringSubscriber subscriber = new StringSubscriber();
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   242
        CompletableFuture<HttpResponse<Void>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   243
                = client.sendAsync(request,
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   244
                                   BodyHandler.fromLineSubscriber(subscriber));
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   245
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   246
        HttpResponse<Void> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   247
        String text = subscriber.get();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   248
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   249
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   250
        assertEquals(text, body.replace("\r\n", "\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   251
        assertEquals(subscriber.list, lines(body, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   252
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   253
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   254
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   255
    void testAsStreamWithCRLF(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   256
        String body = "May the luck\r\n\r\n of the Irish be with you!";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   257
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   258
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   259
                .POST(fromString(body))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   260
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   261
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   262
        CompletableFuture<HttpResponse<Stream<String>>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   263
                = client.sendAsync(request, BodyHandler.asLines());
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   264
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   265
        HttpResponse<Stream<String>> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   266
        Stream<String> stream = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   267
        List<String> list = stream.collect(Collectors.toList());
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   268
        String text = list.stream().collect(Collectors.joining("|"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   269
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   270
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   271
        assertEquals(text, "May the luck|| of the Irish be with you!");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   272
        assertEquals(list, List.of("May the luck",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   273
                                   "",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   274
                                   " of the Irish be with you!"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   275
        assertEquals(list, lines(body, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   276
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   277
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   278
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   279
    void testStringWithFinisherBlocking(String url) throws Exception {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   280
        String body = "May the luck of the Irish be with you!";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   281
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   282
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   283
                .POST(fromString(body)).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   284
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   285
        StringSubscriber subscriber = new StringSubscriber();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   286
        HttpResponse<String> response = client.send(request,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   287
                BodyHandler.fromLineSubscriber(subscriber, Supplier::get, "\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   288
        String text = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   289
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   290
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   291
        assertEquals(text, "May the luck of the Irish be with you!");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   292
        assertEquals(subscriber.list, lines(body, "\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   293
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   294
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   295
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   296
    void testStringWithoutFinisherBlocking(String url) throws Exception {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   297
        String body = "May the luck of the Irish be with you!";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   298
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   299
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   300
                .POST(fromString(body)).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   301
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   302
        StringSubscriber subscriber = new StringSubscriber();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   303
        HttpResponse<Void> response = client.send(request,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   304
                BodyHandler.fromLineSubscriber(subscriber));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   305
        String text = subscriber.get();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   306
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   307
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   308
        assertEquals(text, "May the luck of the Irish be with you!");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   309
        assertEquals(subscriber.list, lines(body, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   310
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   311
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   312
    // Subscriber<Object>
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   313
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   314
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   315
    void testAsStreamWithMixedCRLF(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   316
        String body = "May\r\n the wind\r\n always be\rat your back.\r\r";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   317
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   318
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   319
                .POST(fromString(body))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   320
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   321
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   322
        CompletableFuture<HttpResponse<Stream<String>>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   323
                = client.sendAsync(request, BodyHandler.asLines());
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   324
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   325
        HttpResponse<Stream<String>> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   326
        Stream<String> stream = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   327
        List<String> list = stream.collect(Collectors.toList());
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   328
        String text = list.stream().collect(Collectors.joining("|"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   329
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   330
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   331
        assertTrue(text.length() != 0);  // what else can be asserted!
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   332
        assertEquals(text, "May| the wind| always be|at your back.|");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   333
        assertEquals(list, List.of("May",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   334
                                   " the wind",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   335
                                   " always be",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   336
                                   "at your back.",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   337
                                   ""));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   338
        assertEquals(list, lines(body, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   339
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   340
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   341
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   342
    void testAsStreamWithMixedCRLF_UTF8(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   343
        String body = "May\r\n the wind\r\n always be\rat your back.\r\r";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   344
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   345
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   346
                .header("Content-type", "text/text; charset=UTF-8")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   347
                .POST(fromString(body, UTF_8)).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   348
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   349
        CompletableFuture<HttpResponse<Stream<String>>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   350
                = client.sendAsync(request, BodyHandler.asLines());
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   351
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   352
        HttpResponse<Stream<String>> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   353
        Stream<String> stream = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   354
        List<String> list = stream.collect(Collectors.toList());
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   355
        String text = list.stream().collect(Collectors.joining("|"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   356
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   357
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   358
        assertTrue(text.length() != 0);  // what else can be asserted!
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   359
        assertEquals(text, "May| the wind| always be|at your back.|");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   360
        assertEquals(list, List.of("May",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   361
                                   " the wind",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   362
                                   " always be",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   363
                                   "at your back.", ""));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   364
        assertEquals(list, lines(body, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   365
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   366
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   367
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   368
    void testAsStreamWithMixedCRLF_UTF16(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   369
        String body = "May\r\n the wind\r\n always be\rat your back.\r\r";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   370
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   371
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   372
                .header("Content-type", "text/text; charset=UTF-16")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   373
                .POST(fromString(body, UTF_16)).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   374
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   375
        CompletableFuture<HttpResponse<Stream<String>>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   376
                = client.sendAsync(request, BodyHandler.asLines());
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   377
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   378
        HttpResponse<Stream<String>> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   379
        Stream<String> stream = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   380
        List<String> list = stream.collect(Collectors.toList());
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   381
        String text = list.stream().collect(Collectors.joining("|"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   382
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   383
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   384
        assertTrue(text.length() != 0);  // what else can be asserted!
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   385
        assertEquals(text, "May| the wind| always be|at your back.|");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   386
        assertEquals(list, List.of("May",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   387
                                   " the wind",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   388
                                   " always be",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   389
                                   "at your back.",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   390
                                   ""));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   391
        assertEquals(list, lines(body, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   392
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   393
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   394
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   395
    void testObjectWithFinisher(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   396
        String body = "May\r\n the wind\r\n always be\rat your back.";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   397
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   398
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   399
                .POST(fromString(body))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   400
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   401
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   402
        ObjectSubscriber subscriber = new ObjectSubscriber();
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   403
        CompletableFuture<HttpResponse<String>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   404
                = client.sendAsync(request, BodyHandler.fromLineSubscriber(
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   405
                        subscriber, ObjectSubscriber::get, "\r\n"));
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   406
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   407
        HttpResponse<String> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   408
        String text = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   409
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   410
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   411
        assertTrue(text.length() != 0);  // what else can be asserted!
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   412
        assertEquals(text, "May\n the wind\n always be\rat your back.");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   413
        assertEquals(subscriber.list, List.of("May",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   414
                                              " the wind",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   415
                                              " always be\rat your back."));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   416
        assertEquals(subscriber.list, lines(body, "\r\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   417
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   418
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   419
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   420
    void testObjectWithFinisher_UTF16(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   421
        String body = "May\r\n the wind\r\n always be\rat your back.\r\r";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   422
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   423
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   424
                .header("Content-type", "text/text; charset=UTF-16")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   425
                .POST(fromString(body, UTF_16)).build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   426
        ObjectSubscriber subscriber = new ObjectSubscriber();
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   427
        CompletableFuture<HttpResponse<String>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   428
                = client.sendAsync(request, BodyHandler.fromLineSubscriber(
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   429
                        subscriber, ObjectSubscriber::get, null));
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   430
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   431
        HttpResponse<String> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   432
        String text = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   433
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   434
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   435
        assertTrue(text.length() != 0);  // what else can be asserted!
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   436
        assertEquals(text, "May\n the wind\n always be\nat your back.\n");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   437
        assertEquals(subscriber.list, List.of("May",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   438
                                              " the wind",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   439
                                              " always be",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   440
                                              "at your back.",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   441
                                              ""));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   442
        assertEquals(subscriber.list, lines(body, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   443
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   444
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   445
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   446
    void testObjectWithoutFinisher(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   447
        String body = "May\r\n the wind\r\n always be\rat your back.";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   448
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext)
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   449
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   450
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   451
                .POST(fromString(body))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   452
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   453
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   454
        ObjectSubscriber subscriber = new ObjectSubscriber();
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   455
        CompletableFuture<HttpResponse<Void>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   456
                = client.sendAsync(request,
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   457
                                   BodyHandler.fromLineSubscriber(subscriber));
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   458
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   459
        HttpResponse<Void> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   460
        String text = subscriber.get();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   461
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   462
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   463
        assertTrue(text.length() != 0);  // what else can be asserted!
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   464
        assertEquals(text, "May\n the wind\n always be\nat your back.");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   465
        assertEquals(subscriber.list, List.of("May",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   466
                                              " the wind",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   467
                                              " always be",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   468
                                              "at your back."));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   469
        assertEquals(subscriber.list, lines(body, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   470
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   471
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   472
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   473
    void testObjectWithFinisherBlocking(String url) throws Exception {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   474
        String body = "May\r\n the wind\r\n always be\nat your back.";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   475
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext)
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   476
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   477
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   478
                .POST(fromString(body))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   479
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   480
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   481
        ObjectSubscriber subscriber = new ObjectSubscriber();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   482
        HttpResponse<String> response = client.send(request,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   483
                BodyHandler.fromLineSubscriber(subscriber,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   484
                                               ObjectSubscriber::get,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   485
                                   "\r\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   486
        String text = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   487
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   488
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   489
        assertTrue(text.length() != 0);  // what else can be asserted!
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   490
        assertEquals(text, "May\n the wind\n always be\nat your back.");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   491
        assertEquals(subscriber.list, List.of("May",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   492
                                              " the wind",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   493
                                              " always be\nat your back."));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   494
        assertEquals(subscriber.list, lines(body, "\r\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   495
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   496
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   497
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   498
    void testObjectWithoutFinisherBlocking(String url) throws Exception {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   499
        String body = "May\r\n the wind\r\n always be\nat your back.";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   500
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext)
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   501
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   502
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   503
                .POST(fromString(body))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   504
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   505
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   506
        ObjectSubscriber subscriber = new ObjectSubscriber();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   507
        HttpResponse<Void> response = client.send(request,
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   508
                BodyHandler.fromLineSubscriber(subscriber));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   509
        String text = subscriber.get();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   510
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   511
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   512
        assertTrue(text.length() != 0);  // what else can be asserted!
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   513
        assertEquals(text, "May\n the wind\n always be\nat your back.");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   514
        assertEquals(subscriber.list, List.of("May",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   515
                                              " the wind",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   516
                                              " always be",
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   517
                                              "at your back."));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   518
        assertEquals(subscriber.list, lines(body, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   519
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   520
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   521
    static private final String LINE = "Bient\u00f4t nous plongerons dans les" +
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   522
            " fr\u00f4\ud801\udc00des t\u00e9n\u00e8bres, ";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   523
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   524
    static private final String bigtext() {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   525
        StringBuilder res = new StringBuilder((LINE.length() + 1) * 50);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   526
        for (int i = 0; i<50; i++) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   527
            res.append(LINE);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   528
            if (i%2 == 0) res.append("\r\n");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   529
        }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   530
        return res.toString();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   531
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   532
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   533
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   534
    void testBigTextFromLineSubscriber(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   535
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext)
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   536
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   537
        String bigtext = bigtext();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   538
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   539
                .POST(fromString(bigtext))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   540
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   541
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   542
        StringSubscriber subscriber = new StringSubscriber();
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   543
        CompletableFuture<HttpResponse<String>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   544
                = client.sendAsync(request, BodyHandler.fromLineSubscriber(
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   545
                        subscriber, Supplier::get, "\r\n"));
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   546
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   547
        HttpResponse<String> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   548
        String text = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   549
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   550
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   551
        assertEquals(text, bigtext.replace("\r\n", "\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   552
        assertEquals(subscriber.list, lines(bigtext, "\r\n"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   553
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   554
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   555
    @Test(dataProvider = "uris")
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   556
    void testBigTextAsStream(String url) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   557
        HttpClient client = HttpClient.newBuilder().sslContext(sslContext)
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   558
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   559
        String bigtext = bigtext();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   560
        HttpRequest request = HttpRequest.newBuilder(URI.create(url))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   561
                .POST(fromString(bigtext))
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   562
                .build();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   563
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   564
        CompletableFuture<HttpResponse<Stream<String>>> cf
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   565
                = client.sendAsync(request, BodyHandler.asLines());
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   566
        assertNoObtrusion(cf);
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   567
        HttpResponse<Stream<String>> response = cf.join();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   568
        Stream<String> stream = response.body();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   569
        List<String> list = stream.collect(Collectors.toList());
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   570
        String text = list.stream().collect(Collectors.joining("|"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   571
        System.out.println(text);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   572
        assertEquals(response.statusCode(), 200);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   573
        assertEquals(text, bigtext.replace("\r\n", "|"));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   574
        assertEquals(list, List.of(bigtext.split("\r\n")));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   575
        assertEquals(list, lines(bigtext, null));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   576
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   577
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   578
    /** An abstract Subscriber that converts all received data into a String. */
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   579
    static abstract class AbstractSubscriber implements Supplier<String> {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   580
        protected volatile Flow.Subscription subscription;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   581
        protected final StringBuilder baos = new StringBuilder();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   582
        protected volatile String text;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   583
        protected volatile RuntimeException error;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   584
        protected final List<Object> list = new CopyOnWriteArrayList<>();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   585
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   586
        public void onSubscribe(Flow.Subscription subscription) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   587
            this.subscription = subscription;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   588
            subscription.request(Long.MAX_VALUE);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   589
        }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   590
        public void onError(Throwable throwable) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   591
            System.out.println(this + " onError: " + throwable);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   592
            error = new RuntimeException(throwable);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   593
        }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   594
        public void onComplete() {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   595
            System.out.println(this + " onComplete");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   596
            text = baos.toString();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   597
        }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   598
        @Override public String get() {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   599
            if (error != null) throw error;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   600
            return text;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   601
        }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   602
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   603
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   604
    static class StringSubscriber extends AbstractSubscriber
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   605
            implements Flow.Subscriber<String>, Supplier<String>
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   606
    {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   607
        @Override public void onNext(String item) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   608
            System.out.print(this + " onNext: \"" + item + "\"");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   609
            if (baos.length() != 0) baos.append('\n');
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   610
            baos.append(item);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   611
            list.add(item);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   612
        }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   613
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   614
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   615
    static class CharSequenceSubscriber extends AbstractSubscriber
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   616
            implements Flow.Subscriber<CharSequence>, Supplier<String>
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   617
    {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   618
        @Override public void onNext(CharSequence item) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   619
            System.out.print(this + " onNext: " + item);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   620
            if (baos.length() != 0) baos.append('\n');
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   621
            baos.append(item);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   622
            list.add(item);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   623
        }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   624
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   625
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   626
    static class ObjectSubscriber extends AbstractSubscriber
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   627
            implements Flow.Subscriber<Object>, Supplier<String>
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   628
    {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   629
        @Override public void onNext(Object item) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   630
            System.out.print(this + " onNext: " + item);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   631
            if (baos.length() != 0) baos.append('\n');
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   632
            baos.append(item);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   633
            list.add(item);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   634
        }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   635
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   636
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   637
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   638
    static void uncheckedWrite(ByteArrayOutputStream baos, byte[] ba) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   639
        try {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   640
            baos.write(ba);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   641
        } catch (IOException e) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   642
            throw new UncheckedIOException(e);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   643
        }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   644
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   645
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   646
    @BeforeTest
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   647
    public void setup() throws Exception {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   648
        sslContext = new SimpleSSLContext().get();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   649
        if (sslContext == null)
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   650
            throw new AssertionError("Unexpected null sslContext");
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   651
56076
9a2855e0a796 http-client-branch: more binding to 0.0.0.0 instead of localhost/127.0.0.1
dfuchs
parents: 56070
diff changeset
   652
        InetSocketAddress sa = new InetSocketAddress(0);
56070
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   653
        httpTestServer = HttpTestServer.of(HttpServer.create(sa, 0));
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   654
        httpTestServer.addHandler(new HttpTestEchoHandler(), "/http1/echo");
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   655
        int port = httpTestServer.getAddress().getPort();
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   656
        httpURI = "http://127.0.0.1:" + port + "/http1/echo";
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   657
56070
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   658
        HttpsServer httpsServer = HttpsServer.create(sa, 0);
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   659
        httpsServer.setHttpsConfigurator(new HttpsConfigurator(sslContext));
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   660
        httpsTestServer = HttpTestServer.of(httpsServer);
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   661
        httpsTestServer.addHandler(new HttpTestEchoHandler(),"/https1/echo");
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   662
        port = httpsTestServer.getAddress().getPort();
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   663
        httpsURI = "https://127.0.0.1:" + port + "/https1/echo";
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   664
56070
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   665
        http2TestServer = HttpTestServer.of(new Http2TestServer("127.0.0.1", false, 0));
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   666
        http2TestServer.addHandler(new HttpTestEchoHandler(), "/http2/echo");
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   667
        port = http2TestServer.getAddress().getPort();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   668
        http2URI = "http://127.0.0.1:" + port + "/http2/echo";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   669
56070
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   670
        https2TestServer = HttpTestServer.of(new Http2TestServer("127.0.0.1", true, 0));
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   671
        https2TestServer.addHandler(new HttpTestEchoHandler(), "/https2/echo");
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   672
        port = https2TestServer.getAddress().getPort();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   673
        https2URI = "https://127.0.0.1:" + port + "/https2/echo";
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   674
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   675
        httpTestServer.start();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   676
        httpsTestServer.start();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   677
        http2TestServer.start();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   678
        https2TestServer.start();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   679
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   680
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   681
    @AfterTest
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   682
    public void teardown() throws Exception {
56070
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   683
        httpTestServer.stop();
66a9c3185028 http-client-branch: add tests with an HTTP/2 server for custom basic and digest authentication
dfuchs
parents: 56035
diff changeset
   684
        httpsTestServer.stop();
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   685
        http2TestServer.stop();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   686
        https2TestServer.stop();
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   687
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   688
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   689
    static void printBytes(PrintStream out, String prefix, byte[] bytes) {
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   690
        int padding = 4 + 4 - (bytes.length % 4);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   691
        padding = padding > 4 ? padding - 4 : 4;
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   692
        byte[] bigbytes = new byte[bytes.length + padding];
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   693
        System.arraycopy(bytes, 0, bigbytes, padding, bytes.length);
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   694
        out.println(prefix + bytes.length + " "
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   695
                    + new BigInteger(bigbytes).toString(16));
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   696
    }
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   697
56035
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   698
    private static void assertNoObtrusion(CompletableFuture<?> cf) {
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   699
        assertThrows(UnsupportedOperationException.class,
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   700
                     () -> cf.obtrudeException(new RuntimeException()));
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   701
        assertThrows(UnsupportedOperationException.class,
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   702
                     () -> cf.obtrudeValue(null));
2f3f5da13c4c http-client-branch: MinimalFuture deep obtrusion
prappo
parents: 56009
diff changeset
   703
    }
56009
cf8792f51dee http-client-branch: Adds some convenience methods to parse body responses as lines
dfuchs
parents:
diff changeset
   704
}