1e1051a39Sopenharmony_ci# -*- mode: perl; -*-
2e1051a39Sopenharmony_ci# Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
3e1051a39Sopenharmony_ci#
4e1051a39Sopenharmony_ci# Licensed under the Apache License 2.0 (the "License").  You may not use
5e1051a39Sopenharmony_ci# this file except in compliance with the License.  You can obtain a copy
6e1051a39Sopenharmony_ci# in the file LICENSE in the source distribution or at
7e1051a39Sopenharmony_ci# https://www.openssl.org/source/license.html
8e1051a39Sopenharmony_ci
9e1051a39Sopenharmony_ci
10e1051a39Sopenharmony_ci## Test version negotiation
11e1051a39Sopenharmony_ci
12e1051a39Sopenharmony_ciuse strict;
13e1051a39Sopenharmony_ciuse warnings;
14e1051a39Sopenharmony_ci
15e1051a39Sopenharmony_cipackage ssltests;
16e1051a39Sopenharmony_ci
17e1051a39Sopenharmony_ci
18e1051a39Sopenharmony_ciour @tests = (
19e1051a39Sopenharmony_ci    {
20e1051a39Sopenharmony_ci        name => "alpn-simple",
21e1051a39Sopenharmony_ci        server => {
22e1051a39Sopenharmony_ci            extra => {
23e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
24e1051a39Sopenharmony_ci            },
25e1051a39Sopenharmony_ci        },
26e1051a39Sopenharmony_ci        client => {
27e1051a39Sopenharmony_ci            extra => {
28e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
29e1051a39Sopenharmony_ci            },
30e1051a39Sopenharmony_ci        },
31e1051a39Sopenharmony_ci        test => {
32e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "foo",
33e1051a39Sopenharmony_ci        },
34e1051a39Sopenharmony_ci    },
35e1051a39Sopenharmony_ci    {
36e1051a39Sopenharmony_ci        name => "alpn-server-finds-match",
37e1051a39Sopenharmony_ci        server => {
38e1051a39Sopenharmony_ci            extra => {
39e1051a39Sopenharmony_ci                "ALPNProtocols" => "baz,bar",
40e1051a39Sopenharmony_ci            },
41e1051a39Sopenharmony_ci        },
42e1051a39Sopenharmony_ci        client => {
43e1051a39Sopenharmony_ci            extra => {
44e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,bar",
45e1051a39Sopenharmony_ci            },
46e1051a39Sopenharmony_ci        },
47e1051a39Sopenharmony_ci        test => {
48e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "bar",
49e1051a39Sopenharmony_ci        },
50e1051a39Sopenharmony_ci    },
51e1051a39Sopenharmony_ci    {
52e1051a39Sopenharmony_ci        name => "alpn-server-honours-server-pref",
53e1051a39Sopenharmony_ci        server => {
54e1051a39Sopenharmony_ci            extra => {
55e1051a39Sopenharmony_ci                "ALPNProtocols" => "bar,foo",
56e1051a39Sopenharmony_ci            },
57e1051a39Sopenharmony_ci        },
58e1051a39Sopenharmony_ci        client => {
59e1051a39Sopenharmony_ci            extra => {
60e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,bar",
61e1051a39Sopenharmony_ci            },
62e1051a39Sopenharmony_ci        },
63e1051a39Sopenharmony_ci        test => {
64e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "bar",
65e1051a39Sopenharmony_ci        },
66e1051a39Sopenharmony_ci    },
67e1051a39Sopenharmony_ci    {
68e1051a39Sopenharmony_ci        name => "alpn-alert-on-mismatch",
69e1051a39Sopenharmony_ci        server => {
70e1051a39Sopenharmony_ci            extra => {
71e1051a39Sopenharmony_ci                "ALPNProtocols" => "baz",
72e1051a39Sopenharmony_ci            },
73e1051a39Sopenharmony_ci        },
74e1051a39Sopenharmony_ci        client => {
75e1051a39Sopenharmony_ci            extra => {
76e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,bar",
77e1051a39Sopenharmony_ci            },
78e1051a39Sopenharmony_ci        },
79e1051a39Sopenharmony_ci        test => {
80e1051a39Sopenharmony_ci            "ExpectedResult" => "ServerFail",
81e1051a39Sopenharmony_ci            "ExpectedServerAlert" => "NoApplicationProtocol",
82e1051a39Sopenharmony_ci        },
83e1051a39Sopenharmony_ci    },
84e1051a39Sopenharmony_ci    {
85e1051a39Sopenharmony_ci        name => "alpn-no-server-support",
86e1051a39Sopenharmony_ci        server => { },
87e1051a39Sopenharmony_ci        client => {
88e1051a39Sopenharmony_ci            extra => {
89e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
90e1051a39Sopenharmony_ci            },
91e1051a39Sopenharmony_ci        },
92e1051a39Sopenharmony_ci        test => {
93e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => undef,
94e1051a39Sopenharmony_ci        },
95e1051a39Sopenharmony_ci    },
96e1051a39Sopenharmony_ci    {
97e1051a39Sopenharmony_ci        name => "alpn-no-client-support",
98e1051a39Sopenharmony_ci        server => {
99e1051a39Sopenharmony_ci            extra => {
100e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
101e1051a39Sopenharmony_ci            },
102e1051a39Sopenharmony_ci        },
103e1051a39Sopenharmony_ci        client => { },
104e1051a39Sopenharmony_ci        test => {
105e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => undef,
106e1051a39Sopenharmony_ci        },
107e1051a39Sopenharmony_ci    },
108e1051a39Sopenharmony_ci    {
109e1051a39Sopenharmony_ci        name => "alpn-with-sni-no-context-switch",
110e1051a39Sopenharmony_ci        server => {
111e1051a39Sopenharmony_ci            extra => {
112e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
113e1051a39Sopenharmony_ci                "ServerNameCallback" => "IgnoreMismatch",
114e1051a39Sopenharmony_ci            },
115e1051a39Sopenharmony_ci        },
116e1051a39Sopenharmony_ci        server2 => {
117e1051a39Sopenharmony_ci            extra => {
118e1051a39Sopenharmony_ci                "ALPNProtocols" => "bar",
119e1051a39Sopenharmony_ci            },
120e1051a39Sopenharmony_ci        },
121e1051a39Sopenharmony_ci        client => {
122e1051a39Sopenharmony_ci            extra => {
123e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,bar",
124e1051a39Sopenharmony_ci                "ServerName" => "server1",
125e1051a39Sopenharmony_ci            },
126e1051a39Sopenharmony_ci        },
127e1051a39Sopenharmony_ci        test => {
128e1051a39Sopenharmony_ci            "ExpectedServerName" => "server1",
129e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "foo",
130e1051a39Sopenharmony_ci        },
131e1051a39Sopenharmony_ci    },
132e1051a39Sopenharmony_ci    {
133e1051a39Sopenharmony_ci        name => "alpn-with-sni-context-switch",
134e1051a39Sopenharmony_ci        server => {
135e1051a39Sopenharmony_ci            extra => {
136e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
137e1051a39Sopenharmony_ci                "ServerNameCallback" => "IgnoreMismatch",
138e1051a39Sopenharmony_ci            },
139e1051a39Sopenharmony_ci        },
140e1051a39Sopenharmony_ci        server2 => {
141e1051a39Sopenharmony_ci            extra => {
142e1051a39Sopenharmony_ci                "ALPNProtocols" => "bar",
143e1051a39Sopenharmony_ci            },
144e1051a39Sopenharmony_ci        },
145e1051a39Sopenharmony_ci        client => {
146e1051a39Sopenharmony_ci            extra => {
147e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,bar",
148e1051a39Sopenharmony_ci                "ServerName" => "server2",
149e1051a39Sopenharmony_ci            },
150e1051a39Sopenharmony_ci        },
151e1051a39Sopenharmony_ci        test => {
152e1051a39Sopenharmony_ci            "ExpectedServerName" => "server2",
153e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "bar",
154e1051a39Sopenharmony_ci        },
155e1051a39Sopenharmony_ci    },
156e1051a39Sopenharmony_ci    {
157e1051a39Sopenharmony_ci        name => "alpn-selected-sni-server-supports-alpn",
158e1051a39Sopenharmony_ci        server => {
159e1051a39Sopenharmony_ci            extra => {
160e1051a39Sopenharmony_ci               "ServerNameCallback" => "IgnoreMismatch",
161e1051a39Sopenharmony_ci            },
162e1051a39Sopenharmony_ci        },
163e1051a39Sopenharmony_ci        server2 => {
164e1051a39Sopenharmony_ci            extra => {
165e1051a39Sopenharmony_ci                "ALPNProtocols" => "bar",
166e1051a39Sopenharmony_ci            },
167e1051a39Sopenharmony_ci        },
168e1051a39Sopenharmony_ci        client => {
169e1051a39Sopenharmony_ci            extra => {
170e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,bar",
171e1051a39Sopenharmony_ci                "ServerName" => "server2",
172e1051a39Sopenharmony_ci            },
173e1051a39Sopenharmony_ci        },
174e1051a39Sopenharmony_ci        test => {
175e1051a39Sopenharmony_ci            "ExpectedServerName" => "server2",
176e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "bar",
177e1051a39Sopenharmony_ci        },
178e1051a39Sopenharmony_ci    },
179e1051a39Sopenharmony_ci    {
180e1051a39Sopenharmony_ci        name => "alpn-selected-sni-server-does-not-support-alpn",
181e1051a39Sopenharmony_ci        server => {
182e1051a39Sopenharmony_ci            extra => {
183e1051a39Sopenharmony_ci                "ALPNProtocols" => "bar", 
184e1051a39Sopenharmony_ci                "ServerNameCallback" => "IgnoreMismatch",
185e1051a39Sopenharmony_ci            },
186e1051a39Sopenharmony_ci        },
187e1051a39Sopenharmony_ci        server2 => { },
188e1051a39Sopenharmony_ci        client => {
189e1051a39Sopenharmony_ci            extra => {
190e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,bar",
191e1051a39Sopenharmony_ci                "ServerName" => "server2",
192e1051a39Sopenharmony_ci            },
193e1051a39Sopenharmony_ci        },
194e1051a39Sopenharmony_ci        test => {
195e1051a39Sopenharmony_ci            "ExpectedServerName" => "server2",
196e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => undef,
197e1051a39Sopenharmony_ci        },
198e1051a39Sopenharmony_ci    },
199e1051a39Sopenharmony_ci    {
200e1051a39Sopenharmony_ci        name => "alpn-simple-resumption",
201e1051a39Sopenharmony_ci        server => {
202e1051a39Sopenharmony_ci            extra => {
203e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
204e1051a39Sopenharmony_ci            },
205e1051a39Sopenharmony_ci        },
206e1051a39Sopenharmony_ci        client => {
207e1051a39Sopenharmony_ci            extra => {
208e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
209e1051a39Sopenharmony_ci            },
210e1051a39Sopenharmony_ci        },
211e1051a39Sopenharmony_ci        test => {
212e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
213e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
214e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "foo",
215e1051a39Sopenharmony_ci        },
216e1051a39Sopenharmony_ci    },
217e1051a39Sopenharmony_ci    {
218e1051a39Sopenharmony_ci        name => "alpn-server-switch-resumption",
219e1051a39Sopenharmony_ci        server => {
220e1051a39Sopenharmony_ci            extra => {
221e1051a39Sopenharmony_ci                "ALPNProtocols" => "bar,foo",
222e1051a39Sopenharmony_ci            },
223e1051a39Sopenharmony_ci        },
224e1051a39Sopenharmony_ci        resume_server => {
225e1051a39Sopenharmony_ci            extra => {
226e1051a39Sopenharmony_ci                "ALPNProtocols" => "baz,foo",
227e1051a39Sopenharmony_ci            },
228e1051a39Sopenharmony_ci        },
229e1051a39Sopenharmony_ci        client => {
230e1051a39Sopenharmony_ci            extra => {
231e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,bar,baz",
232e1051a39Sopenharmony_ci            },
233e1051a39Sopenharmony_ci        },
234e1051a39Sopenharmony_ci        test => {
235e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
236e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
237e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "baz",
238e1051a39Sopenharmony_ci        },
239e1051a39Sopenharmony_ci    },
240e1051a39Sopenharmony_ci    {
241e1051a39Sopenharmony_ci        name => "alpn-client-switch-resumption",
242e1051a39Sopenharmony_ci        server => {
243e1051a39Sopenharmony_ci            extra => {
244e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,bar,baz",
245e1051a39Sopenharmony_ci            },
246e1051a39Sopenharmony_ci        },
247e1051a39Sopenharmony_ci        client => {
248e1051a39Sopenharmony_ci            extra => {
249e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,baz",
250e1051a39Sopenharmony_ci            },
251e1051a39Sopenharmony_ci        },
252e1051a39Sopenharmony_ci        resume_client => {
253e1051a39Sopenharmony_ci            extra => {
254e1051a39Sopenharmony_ci                "ALPNProtocols" => "bar,baz",
255e1051a39Sopenharmony_ci            },
256e1051a39Sopenharmony_ci        },
257e1051a39Sopenharmony_ci        test => {
258e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
259e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
260e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "bar",
261e1051a39Sopenharmony_ci        },
262e1051a39Sopenharmony_ci    },
263e1051a39Sopenharmony_ci    {
264e1051a39Sopenharmony_ci        name => "alpn-alert-on-mismatch-resumption",
265e1051a39Sopenharmony_ci        server => {
266e1051a39Sopenharmony_ci            extra => {
267e1051a39Sopenharmony_ci                "ALPNProtocols" => "bar",
268e1051a39Sopenharmony_ci            },
269e1051a39Sopenharmony_ci        },
270e1051a39Sopenharmony_ci        resume_server => {
271e1051a39Sopenharmony_ci            extra => {
272e1051a39Sopenharmony_ci                "ALPNProtocols" => "baz",
273e1051a39Sopenharmony_ci            },
274e1051a39Sopenharmony_ci        },
275e1051a39Sopenharmony_ci        client => {
276e1051a39Sopenharmony_ci            extra => {
277e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo,bar",
278e1051a39Sopenharmony_ci            },
279e1051a39Sopenharmony_ci        },
280e1051a39Sopenharmony_ci        test => {
281e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
282e1051a39Sopenharmony_ci            "ExpectedResult" => "ServerFail",
283e1051a39Sopenharmony_ci            "ExpectedServerAlert" => "NoApplicationProtocol",
284e1051a39Sopenharmony_ci        },
285e1051a39Sopenharmony_ci    },
286e1051a39Sopenharmony_ci    {
287e1051a39Sopenharmony_ci        name => "alpn-no-server-support-resumption",
288e1051a39Sopenharmony_ci        server => {
289e1051a39Sopenharmony_ci            extra => {
290e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
291e1051a39Sopenharmony_ci            },
292e1051a39Sopenharmony_ci        },
293e1051a39Sopenharmony_ci        resume_server => { },
294e1051a39Sopenharmony_ci        client => {
295e1051a39Sopenharmony_ci            extra => {
296e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
297e1051a39Sopenharmony_ci            },
298e1051a39Sopenharmony_ci        },
299e1051a39Sopenharmony_ci        test => {
300e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
301e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
302e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => undef,
303e1051a39Sopenharmony_ci        },
304e1051a39Sopenharmony_ci    },
305e1051a39Sopenharmony_ci    {
306e1051a39Sopenharmony_ci        name => "alpn-no-client-support-resumption",
307e1051a39Sopenharmony_ci        server => {
308e1051a39Sopenharmony_ci            extra => {
309e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
310e1051a39Sopenharmony_ci            },
311e1051a39Sopenharmony_ci        },
312e1051a39Sopenharmony_ci        client => {
313e1051a39Sopenharmony_ci            extra => {
314e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
315e1051a39Sopenharmony_ci            },
316e1051a39Sopenharmony_ci        },
317e1051a39Sopenharmony_ci        resume_client => {
318e1051a39Sopenharmony_ci        },
319e1051a39Sopenharmony_ci        test => {
320e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
321e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
322e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => undef,
323e1051a39Sopenharmony_ci        },
324e1051a39Sopenharmony_ci    },
325e1051a39Sopenharmony_ci);
326