1 /** 2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 * SPDX-License-Identifier: Apache-2.0. 4 */ 5 6 package software.amazon.awssdk.crt.test; 7 8 import software.amazon.awssdk.crt.http.HttpClientConnectionManager; 9 import software.amazon.awssdk.crt.http.HttpClientConnectionManagerOptions; 10 import software.amazon.awssdk.crt.http.HttpVersion; 11 import software.amazon.awssdk.crt.io.ClientBootstrap; 12 import software.amazon.awssdk.crt.io.EventLoopGroup; 13 import software.amazon.awssdk.crt.io.HostResolver; 14 import software.amazon.awssdk.crt.io.SocketOptions; 15 import software.amazon.awssdk.crt.io.TlsContext; 16 import software.amazon.awssdk.crt.io.TlsContextOptions; 17 18 import java.net.URI; 19 20 public class HttpClientTestFixture extends CrtTestFixture { 21 createHTTP2ConnectionPoolManager(URI uri)22 private HttpClientConnectionManager createHTTP2ConnectionPoolManager(URI uri) { 23 try (EventLoopGroup eventLoopGroup = new EventLoopGroup(1); 24 HostResolver resolver = new HostResolver(eventLoopGroup); 25 ClientBootstrap bootstrap = new ClientBootstrap(eventLoopGroup, resolver); 26 SocketOptions sockOpts = new SocketOptions(); 27 TlsContextOptions tlsContextOptions = TlsContextOptions.createDefaultClient() 28 .withAlpnList("h2;http/1.1"); 29 TlsContext tlsContext = createHttpClientTlsContext(tlsContextOptions)) { 30 31 HttpClientConnectionManagerOptions options = new HttpClientConnectionManagerOptions() 32 .withClientBootstrap(bootstrap).withSocketOptions(sockOpts).withTlsContext(tlsContext).withUri(uri); 33 34 return HttpClientConnectionManager.create(options); 35 } 36 } 37 createHTTP1ConnectionPoolManager(URI uri)38 private HttpClientConnectionManager createHTTP1ConnectionPoolManager(URI uri) { 39 try (EventLoopGroup eventLoopGroup = new EventLoopGroup(1); 40 HostResolver resolver = new HostResolver(eventLoopGroup); 41 ClientBootstrap bootstrap = new ClientBootstrap(eventLoopGroup, resolver); 42 SocketOptions sockOpts = new SocketOptions(); 43 TlsContext tlsContext = createHttpClientTlsContext()) { 44 45 HttpClientConnectionManagerOptions options = new HttpClientConnectionManagerOptions() 46 .withClientBootstrap(bootstrap).withSocketOptions(sockOpts).withTlsContext(tlsContext).withUri(uri); 47 48 return HttpClientConnectionManager.create(options); 49 } 50 } 51 createHttpClientTlsContext()52 public TlsContext createHttpClientTlsContext() { 53 return createTlsContextOptions(getContext().trustStore); 54 } 55 createHttpClientTlsContext(TlsContextOptions tlsOpts)56 public TlsContext createHttpClientTlsContext(TlsContextOptions tlsOpts) { 57 return new TlsContext(configureTlsContextOptions(tlsOpts, getContext().trustStore)); 58 } 59 createConnectionPoolManager(URI uri, HttpVersion expectedVersion)60 public HttpClientConnectionManager createConnectionPoolManager(URI uri, 61 HttpVersion expectedVersion) { 62 if (expectedVersion == HttpVersion.HTTP_2) { 63 return createHTTP2ConnectionPoolManager(uri); 64 } else { 65 return createHTTP1ConnectionPoolManager(uri); 66 } 67 68 } 69 } 70