< prev index next >

test/jdk/java/net/httpclient/HttpClientBuilderTest.java

Print this page




  33 import java.net.http.HttpRequest;
  34 import java.net.http.HttpRequest.BodyPublishers;
  35 import java.net.http.HttpResponse;
  36 import java.net.http.HttpResponse.BodyHandler;
  37 import java.net.http.HttpResponse.BodyHandlers;
  38 import java.net.http.HttpResponse.PushPromiseHandler;
  39 import java.time.Duration;
  40 import java.util.List;
  41 import java.util.Map;
  42 import java.util.Optional;
  43 import java.util.TreeMap;
  44 import java.util.concurrent.CompletableFuture;
  45 import java.util.concurrent.Executor;
  46 import javax.net.ssl.SSLContext;
  47 import javax.net.ssl.SSLParameters;
  48 import java.net.http.HttpClient;
  49 import java.net.http.HttpClient.Redirect;
  50 import java.net.http.HttpClient.Version;
  51 import jdk.testlibrary.SimpleSSLContext;
  52 import org.testng.annotations.Test;

  53 import static org.testng.Assert.*;
  54 
  55 /*
  56  * @test
  57  * @summary HttpClient[.Builder] API and behaviour checks
  58  * @library /lib/testlibrary/
  59  * @build jdk.testlibrary.SimpleSSLContext
  60  * @run testng HttpClientBuilderTest
  61  */
  62 
  63 public class HttpClientBuilderTest {
  64 
  65     static final Class<NullPointerException> NPE = NullPointerException.class;
  66     static final Class<IllegalArgumentException> IAE = IllegalArgumentException.class;
  67 
  68     @Test
  69     public void testDefaults() throws Exception {
  70         List<HttpClient> clients = List.of(HttpClient.newHttpClient(),
  71                                            HttpClient.newBuilder().build());
  72 
  73         for (HttpClient client : clients) {
  74             // Empty optionals and defaults
  75             assertFalse(client.authenticator().isPresent());
  76             assertFalse(client.cookieHandler().isPresent());

  77             assertFalse(client.executor().isPresent());
  78             assertFalse(client.proxy().isPresent());
  79             assertTrue(client.sslParameters() != null);
  80             assertTrue(client.followRedirects().equals(HttpClient.Redirect.NEVER));
  81             assertTrue(client.sslContext() == SSLContext.getDefault());
  82             assertTrue(client.version().equals(HttpClient.Version.HTTP_2));
  83         }
  84     }
  85 
  86     @Test
  87     public void testNull() throws Exception {
  88         HttpClient.Builder builder = HttpClient.newBuilder();
  89         assertThrows(NPE, () -> builder.authenticator(null));
  90         assertThrows(NPE, () -> builder.cookieHandler(null));

  91         assertThrows(NPE, () -> builder.executor(null));
  92         assertThrows(NPE, () -> builder.proxy(null));
  93         assertThrows(NPE, () -> builder.sslParameters(null));
  94         assertThrows(NPE, () -> builder.followRedirects(null));
  95         assertThrows(NPE, () -> builder.sslContext(null));
  96         assertThrows(NPE, () -> builder.version(null));
  97     }
  98 
  99     static class TestAuthenticator extends Authenticator { }
 100 
 101     @Test
 102     public void testAuthenticator() {
 103         HttpClient.Builder builder = HttpClient.newBuilder();
 104         Authenticator a = new TestAuthenticator();
 105         builder.authenticator(a);
 106         assertTrue(builder.build().authenticator().get() == a);
 107         Authenticator b = new TestAuthenticator();
 108         builder.authenticator(b);
 109         assertTrue(builder.build().authenticator().get() == b);
 110         assertThrows(NPE, () -> builder.authenticator(null));
 111         Authenticator c = new TestAuthenticator();
 112         builder.authenticator(c);
 113         assertTrue(builder.build().authenticator().get() == c);
 114     }
 115 
 116     @Test
 117     public void testCookieHandler() {
 118         HttpClient.Builder builder = HttpClient.newBuilder();
 119         CookieHandler a = new CookieManager();
 120         builder.cookieHandler(a);
 121         assertTrue(builder.build().cookieHandler().get() == a);
 122         CookieHandler b = new CookieManager();
 123         builder.cookieHandler(b);
 124         assertTrue(builder.build().cookieHandler().get() == b);
 125         assertThrows(NPE, () -> builder.cookieHandler(null));
 126         CookieManager c = new CookieManager();
 127         builder.cookieHandler(c);
 128         assertTrue(builder.build().cookieHandler().get() == c);
 129     }
 130 




















 131     static class TestExecutor implements Executor {
 132         public void execute(Runnable r) { }
 133     }
 134 
 135     @Test
 136     public void testExecutor() {
 137         HttpClient.Builder builder = HttpClient.newBuilder();
 138         TestExecutor a = new TestExecutor();
 139         builder.executor(a);
 140         assertTrue(builder.build().executor().get() == a);
 141         TestExecutor b = new TestExecutor();
 142         builder.executor(b);
 143         assertTrue(builder.build().executor().get() == b);
 144         assertThrows(NPE, () -> builder.executor(null));
 145         TestExecutor c = new TestExecutor();
 146         builder.executor(c);
 147         assertTrue(builder.build().executor().get() == c);
 148     }
 149 
 150     @Test


 275         @Override public boolean expectContinue() { return false; }
 276         @Override public URI uri() { return URI.create("http://foo.com/"); }
 277         @Override public Optional<Version> version() { return Optional.empty(); }
 278         @Override public HttpHeaders headers() { return HttpHeaders.of(Map.of(), (x, y) -> true); }
 279     }
 280 
 281     // ---
 282 
 283     static final Class<UnsupportedOperationException> UOE =
 284             UnsupportedOperationException.class;
 285 
 286     @Test
 287     static void testUnsupportedWebSocket() throws Exception {
 288         //  @implSpec The default implementation of this method throws
 289         // {@code UnsupportedOperationException}.
 290         assertThrows(UOE, () -> (new MockHttpClient()).newWebSocketBuilder());
 291     }
 292 
 293     static class MockHttpClient extends HttpClient {
 294         @Override public Optional<CookieHandler> cookieHandler() { return null; }

 295         @Override public Redirect followRedirects() { return null; }
 296         @Override public Optional<ProxySelector> proxy() { return null; }
 297         @Override public SSLContext sslContext() { return null; }
 298         @Override public SSLParameters sslParameters() { return null; }
 299         @Override public Optional<Authenticator> authenticator() { return null; }
 300         @Override public Version version() { return null; }
 301         @Override public Optional<Executor> executor() { return null; }
 302         @Override public <T> HttpResponse<T>
 303         send(HttpRequest request, BodyHandler<T> responseBodyHandler)
 304                 throws IOException, InterruptedException {
 305             return null;
 306         }
 307         @Override public <T> CompletableFuture<HttpResponse<T>>
 308         sendAsync(HttpRequest request, BodyHandler<T> responseBodyHandler) {
 309             return null;
 310         }
 311         @Override
 312         public <T> CompletableFuture<HttpResponse<T>>
 313         sendAsync(HttpRequest x, BodyHandler<T> y, PushPromiseHandler<T> z) {
 314             return null;


  33 import java.net.http.HttpRequest;
  34 import java.net.http.HttpRequest.BodyPublishers;
  35 import java.net.http.HttpResponse;
  36 import java.net.http.HttpResponse.BodyHandler;
  37 import java.net.http.HttpResponse.BodyHandlers;
  38 import java.net.http.HttpResponse.PushPromiseHandler;
  39 import java.time.Duration;
  40 import java.util.List;
  41 import java.util.Map;
  42 import java.util.Optional;
  43 import java.util.TreeMap;
  44 import java.util.concurrent.CompletableFuture;
  45 import java.util.concurrent.Executor;
  46 import javax.net.ssl.SSLContext;
  47 import javax.net.ssl.SSLParameters;
  48 import java.net.http.HttpClient;
  49 import java.net.http.HttpClient.Redirect;
  50 import java.net.http.HttpClient.Version;
  51 import jdk.testlibrary.SimpleSSLContext;
  52 import org.testng.annotations.Test;
  53 import static java.time.Duration.*;
  54 import static org.testng.Assert.*;
  55 
  56 /*
  57  * @test
  58  * @summary HttpClient[.Builder] API and behaviour checks
  59  * @library /lib/testlibrary/
  60  * @build jdk.testlibrary.SimpleSSLContext
  61  * @run testng HttpClientBuilderTest
  62  */
  63 
  64 public class HttpClientBuilderTest {
  65 
  66     static final Class<NullPointerException> NPE = NullPointerException.class;
  67     static final Class<IllegalArgumentException> IAE = IllegalArgumentException.class;
  68 
  69     @Test
  70     public void testDefaults() throws Exception {
  71         List<HttpClient> clients = List.of(HttpClient.newHttpClient(),
  72                                            HttpClient.newBuilder().build());
  73 
  74         for (HttpClient client : clients) {
  75             // Empty optionals and defaults
  76             assertFalse(client.authenticator().isPresent());
  77             assertFalse(client.cookieHandler().isPresent());
  78             assertFalse(client.connectTimeout().isPresent());
  79             assertFalse(client.executor().isPresent());
  80             assertFalse(client.proxy().isPresent());
  81             assertTrue(client.sslParameters() != null);
  82             assertTrue(client.followRedirects().equals(HttpClient.Redirect.NEVER));
  83             assertTrue(client.sslContext() == SSLContext.getDefault());
  84             assertTrue(client.version().equals(HttpClient.Version.HTTP_2));
  85         }
  86     }
  87 
  88     @Test
  89     public void testNull() throws Exception {
  90         HttpClient.Builder builder = HttpClient.newBuilder();
  91         assertThrows(NPE, () -> builder.authenticator(null));
  92         assertThrows(NPE, () -> builder.cookieHandler(null));
  93         assertThrows(NPE, () -> builder.connectTimeout(null));
  94         assertThrows(NPE, () -> builder.executor(null));
  95         assertThrows(NPE, () -> builder.proxy(null));
  96         assertThrows(NPE, () -> builder.sslParameters(null));
  97         assertThrows(NPE, () -> builder.followRedirects(null));
  98         assertThrows(NPE, () -> builder.sslContext(null));
  99         assertThrows(NPE, () -> builder.version(null));
 100     }
 101 
 102     static class TestAuthenticator extends Authenticator { }
 103 
 104     @Test
 105     public void testAuthenticator() {
 106         HttpClient.Builder builder = HttpClient.newBuilder();
 107         Authenticator a = new TestAuthenticator();
 108         builder.authenticator(a);
 109         assertTrue(builder.build().authenticator().get() == a);
 110         Authenticator b = new TestAuthenticator();
 111         builder.authenticator(b);
 112         assertTrue(builder.build().authenticator().get() == b);
 113         assertThrows(NPE, () -> builder.authenticator(null));
 114         Authenticator c = new TestAuthenticator();
 115         builder.authenticator(c);
 116         assertTrue(builder.build().authenticator().get() == c);
 117     }
 118 
 119     @Test
 120     public void testCookieHandler() {
 121         HttpClient.Builder builder = HttpClient.newBuilder();
 122         CookieHandler a = new CookieManager();
 123         builder.cookieHandler(a);
 124         assertTrue(builder.build().cookieHandler().get() == a);
 125         CookieHandler b = new CookieManager();
 126         builder.cookieHandler(b);
 127         assertTrue(builder.build().cookieHandler().get() == b);
 128         assertThrows(NPE, () -> builder.cookieHandler(null));
 129         CookieManager c = new CookieManager();
 130         builder.cookieHandler(c);
 131         assertTrue(builder.build().cookieHandler().get() == c);
 132     }
 133 
 134     @Test
 135     public void testConnectTimeout() {
 136         HttpClient.Builder builder = HttpClient.newBuilder();
 137         Duration a = Duration.ofSeconds(5);
 138         builder.connectTimeout(a);
 139         assertTrue(builder.build().connectTimeout().get() == a);
 140         Duration b = Duration.ofMinutes(1);
 141         builder.connectTimeout(b);
 142         assertTrue(builder.build().connectTimeout().get() == b);
 143         assertThrows(NPE, () -> builder.cookieHandler(null));
 144         Duration c = Duration.ofHours(100);
 145         builder.connectTimeout(c);
 146         assertTrue(builder.build().connectTimeout().get() == c);
 147 
 148         assertThrows(IAE, () -> builder.connectTimeout(ZERO));
 149         assertThrows(IAE, () -> builder.connectTimeout(ofSeconds(0)));
 150         assertThrows(IAE, () -> builder.connectTimeout(ofSeconds(-1)));
 151         assertThrows(IAE, () -> builder.connectTimeout(ofNanos(-100)));
 152     }
 153 
 154     static class TestExecutor implements Executor {
 155         public void execute(Runnable r) { }
 156     }
 157 
 158     @Test
 159     public void testExecutor() {
 160         HttpClient.Builder builder = HttpClient.newBuilder();
 161         TestExecutor a = new TestExecutor();
 162         builder.executor(a);
 163         assertTrue(builder.build().executor().get() == a);
 164         TestExecutor b = new TestExecutor();
 165         builder.executor(b);
 166         assertTrue(builder.build().executor().get() == b);
 167         assertThrows(NPE, () -> builder.executor(null));
 168         TestExecutor c = new TestExecutor();
 169         builder.executor(c);
 170         assertTrue(builder.build().executor().get() == c);
 171     }
 172 
 173     @Test


 298         @Override public boolean expectContinue() { return false; }
 299         @Override public URI uri() { return URI.create("http://foo.com/"); }
 300         @Override public Optional<Version> version() { return Optional.empty(); }
 301         @Override public HttpHeaders headers() { return HttpHeaders.of(Map.of(), (x, y) -> true); }
 302     }
 303 
 304     // ---
 305 
 306     static final Class<UnsupportedOperationException> UOE =
 307             UnsupportedOperationException.class;
 308 
 309     @Test
 310     static void testUnsupportedWebSocket() throws Exception {
 311         //  @implSpec The default implementation of this method throws
 312         // {@code UnsupportedOperationException}.
 313         assertThrows(UOE, () -> (new MockHttpClient()).newWebSocketBuilder());
 314     }
 315 
 316     static class MockHttpClient extends HttpClient {
 317         @Override public Optional<CookieHandler> cookieHandler() { return null; }
 318         @Override public Optional<Duration> connectTimeout() { return null; }
 319         @Override public Redirect followRedirects() { return null; }
 320         @Override public Optional<ProxySelector> proxy() { return null; }
 321         @Override public SSLContext sslContext() { return null; }
 322         @Override public SSLParameters sslParameters() { return null; }
 323         @Override public Optional<Authenticator> authenticator() { return null; }
 324         @Override public Version version() { return null; }
 325         @Override public Optional<Executor> executor() { return null; }
 326         @Override public <T> HttpResponse<T>
 327         send(HttpRequest request, BodyHandler<T> responseBodyHandler)
 328                 throws IOException, InterruptedException {
 329             return null;
 330         }
 331         @Override public <T> CompletableFuture<HttpResponse<T>>
 332         sendAsync(HttpRequest request, BodyHandler<T> responseBodyHandler) {
 333             return null;
 334         }
 335         @Override
 336         public <T> CompletableFuture<HttpResponse<T>>
 337         sendAsync(HttpRequest x, BodyHandler<T> y, PushPromiseHandler<T> z) {
 338             return null;
< prev index next >