Path: blob/master/test/jdk/javax/net/ssl/compatibility/AlpnTest.java
41152 views
/*1* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @summary This is an interop compatibility test on ALPN.26*27* @library /test/lib28* ../TLSCommon29* ../TLSCommon/interop30* @compile -source 1.8 -target 1.831* JdkInfoUtils.java32* ../TLSCommon/interop/JdkProcServer.java33* ../TLSCommon/interop/JdkProcClient.java34* @run main/manual AlpnTest true35* @run main/manual AlpnTest false36*/3738import java.util.ArrayList;39import java.util.List;40import java.util.Set;4142public class AlpnTest extends ExtInteropTest {4344private JdkInfo serverJdkInfo;45private JdkInfo clientJdkInfo;4647public AlpnTest(JdkInfo serverJdkInfo, JdkInfo clientJdkInfo) {48super(new Jdk(serverJdkInfo.version, serverJdkInfo.javaPath),49new Jdk(clientJdkInfo.version, clientJdkInfo.javaPath));5051this.serverJdkInfo = serverJdkInfo;52this.clientJdkInfo = clientJdkInfo;53}5455@Override56protected boolean skipExecute() {57return super.skipExecute() || !supportsALPN();58}5960private boolean supportsALPN() {61boolean supported = true;6263if (!serverJdkInfo.supportsALPN) {64System.out.println("The server doesn't support ALPN.");65supported = false;66}6768if (!clientJdkInfo.supportsALPN) {69System.out.println("The client doesn't support ALPN.");70supported = false;71}7273return supported;74}7576@Override77protected List<TestCase<ExtUseCase>> getTestCases() {78List<TestCase<ExtUseCase>> testCases = new ArrayList<>();7980for (Protocol protocol : new Protocol[] {81Protocol.TLSV1_2, Protocol.TLSV1_3 }) {82for (CipherSuite cipherSuite : Utilities.ALL_CIPHER_SUITES) {83if (!cipherSuite.supportedByProtocol(protocol)) {84continue;85}8687Cert cert = Utils.getCert(cipherSuite.keyExAlgorithm);88CertTuple certTuple = new CertTuple(cert, cert);8990ExtUseCase serverCase = ExtUseCase.newInstance();91serverCase.setCertTuple(certTuple);92serverCase.setAppProtocols("http/1.1", "h2");9394ExtUseCase clientCase = ExtUseCase.newInstance();95clientCase.setCertTuple(certTuple);96clientCase.setProtocols(protocol);97clientCase.setCipherSuites(cipherSuite);98clientCase.setAppProtocols("h2");99100testCases.add(101new TestCase<ExtUseCase>(serverCase, clientCase));102}103}104105return testCases;106}107108@Override109protected boolean ignoreTestCase(TestCase<ExtUseCase> testCase) {110CipherSuite cipherSuite = testCase.clientCase.getCipherSuite();111return !serverJdkInfo.enablesCipherSuite(cipherSuite)112|| !clientJdkInfo.supportsCipherSuite(cipherSuite);113}114115@Override116protected AbstractServer.Builder createServerBuilder(ExtUseCase useCase)117throws Exception {118return serverJdkInfo == JdkInfo.DEFAULT119? createJdkServerBuilder(useCase)120: createAltJdkServerBuilder(useCase);121}122123private JdkServer.Builder createJdkServerBuilder(ExtUseCase useCase) {124JdkServer.Builder builder = new JdkServer.Builder();125builder.setCertTuple(useCase.getCertTuple());126builder.setProtocols(useCase.getProtocols());127builder.setCipherSuites(useCase.getCipherSuites());128builder.setAppProtocols(useCase.getAppProtocols());129return builder;130}131132private JdkProcServer.Builder createAltJdkServerBuilder(ExtUseCase useCase) {133JdkProcServer.Builder builder = new JdkProcServer.Builder();134builder.setJdk((Jdk) serverProduct);135builder.setCertTuple(useCase.getCertTuple());136builder.setProtocols(useCase.getProtocols());137builder.setCipherSuites(useCase.getCipherSuites());138builder.setAppProtocols(useCase.getAppProtocols());139return builder;140}141142@Override143protected AbstractClient.Builder createClientBuilder(ExtUseCase useCase)144throws Exception {145return clientJdkInfo == JdkInfo.DEFAULT146? createJdkClientBuilder(useCase)147: createAltJdkClientBuilder(useCase);148}149150private JdkClient.Builder createJdkClientBuilder(ExtUseCase useCase) {151JdkClient.Builder builder = new JdkClient.Builder();152builder.setCertTuple(useCase.getCertTuple());153builder.setProtocols(useCase.getProtocols());154builder.setCipherSuites(useCase.getCipherSuites());155builder.setAppProtocols(useCase.getAppProtocols());156return builder;157}158159private JdkProcClient.Builder createAltJdkClientBuilder(ExtUseCase useCase) {160JdkProcClient.Builder builder = new JdkProcClient.Builder();161builder.setJdk((Jdk) clientProduct);162builder.setCertTuple(useCase.getCertTuple());163builder.setProtocols(useCase.getProtocols());164builder.setCipherSuites(useCase.getCipherSuites());165builder.setAppProtocols(useCase.getAppProtocols());166return builder;167}168169public static void main(String[] args) throws Exception {170Boolean defaultJdkAsServer = Boolean.valueOf(args[0]);171172Set<JdkInfo> jdkInfos = Utils.jdkInfoList();173for (JdkInfo jdkInfo : jdkInfos) {174AlpnTest test = new AlpnTest(175defaultJdkAsServer ? JdkInfo.DEFAULT : jdkInfo,176defaultJdkAsServer ? jdkInfo : JdkInfo.DEFAULT);177test.execute();178}179}180}181182183