src/test/java/openjdk/http/tutorial/Exercise1Test.java
author chegar
Tue, 16 Jan 2018 21:08:16 +0000
branchhttp-client-tutorial
changeset 56018 40e766eb611b
parent 56016 bc8bc0b99add
permissions -rw-r--r--
http-client-tutorial: additional informational comments and fixes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56013
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
     1
/*
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
     4
 *
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
     7
 * published by the Free Software Foundation.
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
     8
 *
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    13
 * accompanied this code).
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    14
 *
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    18
 *
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    21
 * questions.
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    22
 */
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    23
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    24
package openjdk.http.tutorial;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    25
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    26
import java.io.IOException;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    27
import java.io.UncheckedIOException;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    28
import java.net.URI;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    29
import java.nio.file.Files;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    30
import java.nio.file.Path;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    31
import java.nio.file.Paths;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    32
import java.util.Arrays;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    33
import java.util.Map;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    34
import java.util.concurrent.CompletableFuture;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    35
import java.util.function.Function;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    36
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    37
import com.fasterxml.jackson.core.type.TypeReference;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    38
import com.fasterxml.jackson.databind.ObjectMapper;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    39
import jdk.incubator.http.HttpClient;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    40
import jdk.incubator.http.HttpRequest;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    41
import jdk.incubator.http.HttpResponse;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    42
import org.junit.Assert;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    43
import org.junit.Rule;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    44
import org.junit.Test;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    45
import org.junit.rules.TestRule;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    46
import org.junit.rules.TestWatcher;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    47
import org.junit.runner.Description;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    48
import openjdk.http.tutorial.exercise1.Retrievals;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    49
import openjdk.http.tutorial.exercise1.Retrievals.UncheckedObjectMapper;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    50
import static java.lang.System.out;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    51
import static java.nio.file.StandardOpenOption.*;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    52
import static java.util.stream.Collectors.joining;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    53
import static jdk.incubator.http.HttpClient.Version.*;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    54
import static jdk.incubator.http.HttpResponse.BodyHandler.asFile;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    55
import static jdk.incubator.http.HttpResponse.BodyHandler.asString;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    56
import static jdk.incubator.http.HttpResponse.BodyHandler.discard;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    57
import static org.junit.Assert.assertEquals;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    58
56016
bc8bc0b99add http-client-tutorial: cleanup
chegar
parents: 56013
diff changeset
    59
/**
bc8bc0b99add http-client-tutorial: cleanup
chegar
parents: 56013
diff changeset
    60
 * @author Chris Hegarty
bc8bc0b99add http-client-tutorial: cleanup
chegar
parents: 56013
diff changeset
    61
 */
56013
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    62
public class Exercise1Test {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    63
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    64
    @Test
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    65
    public void retrieveTheStatusCode()
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    66
        throws IOException, InterruptedException
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    67
    {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    68
        URI uri = URI.create("http://httpbin.org/get");
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    69
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    70
        int expectedStatusCode = statusCode(uri);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    71
        int actualStatusCode = Retrievals.retrieveTheStatusCode(uri);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    72
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    73
        assertEquals("Unexpected status code",
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    74
                     expectedStatusCode,
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    75
                     actualStatusCode);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    76
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    77
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    78
    @Test
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    79
    public void retrieveResourceAsString()
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    80
        throws IOException, InterruptedException
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    81
    {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    82
        URI uri = URI.create("http://httpbin.org/get");
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    83
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    84
        String expectedResponseBody = bodyAsString(uri);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    85
        String actualResponseBody = Retrievals.retrieveResourceAsString(uri);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    86
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    87
        assertEquals("Unexpected response body",
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    88
                     expectedResponseBody,
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    89
                     actualResponseBody);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    90
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    91
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    92
    @Test
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    93
    public void retrieveResourceAsFile()
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    94
        throws IOException, InterruptedException
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    95
    {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    96
        URI uri = URI.create("http://httpbin.org/get");
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    97
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    98
        Path expectedResponseBodyFile = bodyAsFile(uri);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
    99
        Path actualResponseBodyFile = Retrievals.retrieveResourceAsFile(uri);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   100
        byte[] b1 = Files.readAllBytes(expectedResponseBodyFile);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   101
        byte[] b2 = Files.readAllBytes(actualResponseBodyFile);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   102
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   103
        System.out.println("CHEGAR  b1 = " + new String(b1));
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   104
        System.out.println("CHEGAR  b2 = " + new String(b2));
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   105
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   106
        Assert.assertArrayEquals("Unexpected response body", b1, b2);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   107
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   108
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   109
    @Test
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   110
    public void retrieveResourceAsStringUsingAsyncAPI()
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   111
        throws IOException, InterruptedException
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   112
    {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   113
        URI uri = URI.create("http://httpbin.org/get");
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   114
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   115
        String expectedResponseBody = bodyAsString(uri);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   116
        String actualResponseBody =
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   117
                Retrievals.retrieveResourceAsStringUsingAsyncAPI(uri).join();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   118
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   119
        assertEquals("Unexpected response body",
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   120
                     expectedResponseBody,
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   121
                     actualResponseBody);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   122
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   123
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   124
//    @Test
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   125
//    public void JSONBodyAsMap() {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   126
//        throws IOException, InterruptedException
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   127
//        URI uri = URI.create("http://httpbin.org/get");
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   128
//
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   129
//        UncheckedObjectMapper objectMapper = new UncheckedObjectMapper();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   130
//        String expectedResponseBody = objectMapper(bodyAsString(uri));
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   131
//        String actualResponseBody =
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   132
//                Retrievals.retrieveResourceAsStringUsingAsyncAPI(uri).join();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   133
//
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   134
//        assertEquals("Unexpected response body",
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   135
//                expectedResponseBody,
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   136
//                actualResponseBody);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   137
//    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   138
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   139
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   140
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   141
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   142
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   143
    //@Test
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   144
    public void postData()
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   145
        throws IOException, InterruptedException
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   146
    {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   147
        URI uri = URI.create("http://httpbin.org/post");
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   148
        String message = "Hello there!";
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   149
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   150
        String actualResponseBody = Retrievals.postData(uri, message);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   151
        String expectedResponseBody = message;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   152
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   153
        assertEquals("Unexpected response body",
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   154
                     expectedResponseBody,
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   155
                     actualResponseBody);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   156
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   157
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   158
    /** Wrapper around Jackson's ObjectMapper that provides unchecked readValue. */
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   159
    static class UncheckedObjectMapper extends ObjectMapper{
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   160
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   161
        Map<String,String> readValue(String content) {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   162
            try {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   163
                return this.readValue(content, new TypeReference<>(){});
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   164
            } catch (IOException ioe) {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   165
                throw new UncheckedIOException(ioe);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   166
            }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   167
        }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   168
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   169
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   170
    private UncheckedObjectMapper objectMapper = new UncheckedObjectMapper();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   171
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   172
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   173
    /**
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   174
     * The Echo JSON service on echo.jsontest.com returns a customized
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   175
     * JSON object that you can define through a REST-style URL. For
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   176
     * example, calling http://echo.jsontest.com/key/value/one/two
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   177
     * will return the following JSON:
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   178
     *
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   179
     *  {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   180
     *     “one”: “two”,
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   181
     *     “key”: “value”
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   182
     *  }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   183
     */
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   184
    @Test
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   185
    public void bodyAsJSON() {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   186
        String[] pairs = new String[] {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   187
           "Name", "chegar",
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   188
           "Country", "Ireland",
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   189
           "Citizenship", "Irish"
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   190
        };
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   191
        String path = Arrays.stream(pairs).collect(joining("/"));
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   192
        URI uri = URI.create("http://echo.jsontest.com/" + path);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   193
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   194
        HttpClient client = HttpClient.newBuilder().build();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   195
        HttpRequest request = HttpRequest.newBuilder(uri).GET().build();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   196
        client.sendAsync(request, asString())
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   197
                .thenCompose(response -> {   // maps HttpResponse to String
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   198
                    assertEquals(response.statusCode(), 200);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   199
                    return CompletableFuture.completedFuture(response.body()); })
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   200
                .thenAccept(body -> {        // consumes the response body
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   201
                    out.println("received: " + body);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   202
                    Map<String, String> map = objectMapper.readValue(body);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   203
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   204
                    assertEquals(map.get("Name"), "chegar");
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   205
                    assertEquals(map.get("Country"), "Ireland");
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   206
                    assertEquals(map.get("Citizenship"), "Irish"); })
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   207
              .join();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   208
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   209
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   210
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   211
    // ---- some trivial infrastructure to help output messages
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   212
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   213
    @Rule
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   214
    public TestRule watcher = new TestWatcher() {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   215
        @Override
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   216
        protected void starting(Description description) {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   217
            out.println("\nStarting test: " + description.getMethodName());
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   218
        }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   219
        @Override
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   220
        protected void finished(Description description) {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   221
            out.println("Finished test: " + description.getMethodName());
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   222
        }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   223
        @Override
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   224
        protected void failed(Throwable e, Description description) {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   225
            e.printStackTrace();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   226
        }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   227
    };
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   228
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   229
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   230
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   231
    // ---- demonstration code below
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   232
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   233
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   234
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   235
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   236
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   237
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   238
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   239
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   240
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   241
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   242
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   243
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   244
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   245
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   246
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   247
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   248
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   249
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   250
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   251
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   252
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   253
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   254
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   255
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   256
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   257
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   258
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   259
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   260
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   261
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   262
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   263
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   264
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   265
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   266
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   267
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   268
    interface Peeker<T> extends Function<T,T>
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   269
    {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   270
        void peek(T t);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   271
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   272
        default T apply(T t)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   273
        {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   274
            peek(t);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   275
            return t;
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   276
        }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   277
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   278
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   279
    static void assertStatusCode200(HttpResponse<?> response) {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   280
        assertEquals(200, response.statusCode());
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   281
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   282
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   283
    private static int statusCode(URI uri) {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   284
        return HttpClient.newBuilder().version(HTTP_1_1).build()
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   285
                .sendAsync(HttpRequest.newBuilder(uri).build(), discard(null))
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   286
                .thenApply((Peeker<HttpResponse<?>>)Exercise1Test::assertStatusCode200)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   287
                .thenApply(HttpResponse::statusCode)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   288
                .join();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   289
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   290
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   291
    private static String bodyAsString(URI uri) {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   292
        return HttpClient.newBuilder().version(HTTP_1_1).build()
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   293
                .sendAsync(HttpRequest.newBuilder(uri).build(), asString())
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   294
                .thenApply((Peeker<HttpResponse<String>>)Exercise1Test::assertStatusCode200)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   295
                .thenApply(HttpResponse::body)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   296
                .join();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   297
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   298
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   299
//    private static String bodyAsString(URI uri)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   300
//            throws IOException, InterruptedException
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   301
//    {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   302
//        HttpClient client = HttpClient.newBuilder().build();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   303
//        HttpRequest request = HttpRequest.newBuilder(uri)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   304
//                .version(HttpClient.Version.HTTP_1_1)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   305
//                .GET()
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   306
//                .build();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   307
//        HttpResponse<String> response = client.send(request, asString());
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   308
//
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   309
//        Assert.assertEquals(200, response.statusCode());
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   310
//
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   311
//        return response.body();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   312
//    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   313
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   314
    private static Path bodyAsFile(URI uri)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   315
        throws IOException, InterruptedException
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   316
    {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   317
        HttpClient client = HttpClient.newBuilder().build();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   318
        HttpRequest request = HttpRequest.newBuilder(uri)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   319
                .version(HttpClient.Version.HTTP_1_1)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   320
                .GET()
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   321
                .build();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   322
        Path p = Paths.get("Exercise1Test_bodyAsFile.txt");
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   323
        HttpResponse<Path> response = client.send(request,
56018
40e766eb611b http-client-tutorial: additional informational comments and fixes
chegar
parents: 56016
diff changeset
   324
                asFile(p, CREATE, TRUNCATE_EXISTING, WRITE));
56013
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   325
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   326
        Assert.assertEquals(200, response.statusCode());
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   327
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   328
        return response.body();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   329
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   330
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   331
    private static String postDataGetResponseBody(URI uri, String data)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   332
        throws IOException, InterruptedException
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   333
    {
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   334
        HttpClient client = HttpClient.newBuilder().build();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   335
        HttpRequest request = HttpRequest.newBuilder()
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   336
                .uri(uri)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   337
                .version(HttpClient.Version.HTTP_1_1)
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   338
                .POST(HttpRequest.BodyProcessor.fromString(data))
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   339
                .build();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   340
        HttpResponse<String> response = client.send(request, asString());
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   341
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   342
        ObjectMapper objectMapper = new ObjectMapper();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   343
        Map<String,Object> map = objectMapper.readValue(response.body(), new TypeReference<>(){});
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   344
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   345
        System.out.println("CHEGAR map: " + map);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   346
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   347
        //JSONObject json = new JSONObject(myResponse);
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   348
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   349
        Assert.assertEquals(200, response.statusCode());
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   350
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   351
        return response.body();
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   352
    }
08b6eca8daae http-client-tutorial: first cut
chegar
parents:
diff changeset
   353
}