| // |
| // ======================================================================== |
| // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. |
| // ------------------------------------------------------------------------ |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // and Apache License v2.0 which accompanies this distribution. |
| // |
| // The Eclipse Public License is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // The Apache License v2.0 is available at |
| // http://www.opensource.org/licenses/apache2.0.php |
| // |
| // You may elect to redistribute this code under either of these licenses. |
| // ======================================================================== |
| // |
| |
| package org.eclipse.jetty.http2.alpn.tests; |
| |
| import java.net.InetSocketAddress; |
| |
| import org.eclipse.jetty.alpn.ALPN; |
| import org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory; |
| import org.eclipse.jetty.http2.HTTP2Cipher; |
| import org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory; |
| import org.eclipse.jetty.server.HttpConfiguration; |
| import org.eclipse.jetty.server.HttpConnectionFactory; |
| import org.eclipse.jetty.server.Server; |
| import org.eclipse.jetty.server.ServerConnector; |
| import org.eclipse.jetty.toolchain.test.JDK; |
| import org.eclipse.jetty.toolchain.test.TestTracker; |
| import org.eclipse.jetty.util.ssl.SslContextFactory; |
| import org.junit.After; |
| import org.junit.Assume; |
| import org.junit.Before; |
| import org.junit.Rule; |
| |
| public class AbstractALPNTest |
| { |
| @Rule |
| public final TestTracker tracker = new TestTracker(); |
| protected Server server; |
| protected ServerConnector connector; |
| |
| @Before |
| public void before() |
| { |
| // The mandatory cipher needed to run HTTP/2 |
| // over TLS is only available in JDK 8. |
| Assume.assumeTrue(JDK.IS_8); |
| } |
| |
| protected InetSocketAddress prepare() throws Exception |
| { |
| server = new Server(); |
| HttpConfiguration httpConfiguration = new HttpConfiguration(); |
| HttpConnectionFactory h1 = new HttpConnectionFactory(httpConfiguration); |
| HTTP2ServerConnectionFactory h2 = new HTTP2ServerConnectionFactory(httpConfiguration); |
| ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory(); |
| alpn.setDefaultProtocol(h1.getProtocol()); |
| |
| connector = new ServerConnector(server, newSslContextFactory(), alpn, h1, h2); |
| connector.setPort(0); |
| connector.setIdleTimeout(30000); |
| server.addConnector(connector); |
| server.start(); |
| |
| ALPN.debug = true; |
| |
| return new InetSocketAddress("localhost", connector.getLocalPort()); |
| } |
| |
| protected SslContextFactory newSslContextFactory() |
| { |
| SslContextFactory sslContextFactory = new SslContextFactory(); |
| sslContextFactory.setKeyStorePath("src/test/resources/keystore.jks"); |
| sslContextFactory.setKeyStorePassword("storepwd"); |
| sslContextFactory.setTrustStorePath("src/test/resources/truststore.jks"); |
| sslContextFactory.setTrustStorePassword("storepwd"); |
| sslContextFactory.setIncludeProtocols("TLSv1.2"); |
| // The mandatory HTTP/2 cipher. |
| sslContextFactory.setIncludeCipherSuites("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"); |
| return sslContextFactory; |
| } |
| |
| @After |
| public void dispose() throws Exception |
| { |
| if (server != null) |
| server.stop(); |
| } |
| } |