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 NPN. Note that NPN is only supported up to TLSv1.2
11e1051a39Sopenharmony_ci
12e1051a39Sopenharmony_ciuse strict;
13e1051a39Sopenharmony_ciuse warnings;
14e1051a39Sopenharmony_ci
15e1051a39Sopenharmony_cipackage ssltests;
16e1051a39Sopenharmony_ci
17e1051a39Sopenharmony_ciour @tests = (
18e1051a39Sopenharmony_ci    {
19e1051a39Sopenharmony_ci        name => "npn-simple",
20e1051a39Sopenharmony_ci        server => {
21e1051a39Sopenharmony_ci            extra => {
22e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
23e1051a39Sopenharmony_ci            },
24e1051a39Sopenharmony_ci        },
25e1051a39Sopenharmony_ci        client => {
26e1051a39Sopenharmony_ci            extra => {
27e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
28e1051a39Sopenharmony_ci            },
29e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
30e1051a39Sopenharmony_ci        },
31e1051a39Sopenharmony_ci        test => {
32e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "foo",
33e1051a39Sopenharmony_ci        },
34e1051a39Sopenharmony_ci    },
35e1051a39Sopenharmony_ci    {
36e1051a39Sopenharmony_ci        name => "npn-client-finds-match",
37e1051a39Sopenharmony_ci        server => {
38e1051a39Sopenharmony_ci            extra => {
39e1051a39Sopenharmony_ci                "NPNProtocols" => "baz,bar",
40e1051a39Sopenharmony_ci            },
41e1051a39Sopenharmony_ci        },
42e1051a39Sopenharmony_ci        client => {
43e1051a39Sopenharmony_ci            extra => {
44e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,bar",
45e1051a39Sopenharmony_ci            },
46e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
47e1051a39Sopenharmony_ci        },
48e1051a39Sopenharmony_ci        test => {
49e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "bar",
50e1051a39Sopenharmony_ci        },
51e1051a39Sopenharmony_ci    },
52e1051a39Sopenharmony_ci    {
53e1051a39Sopenharmony_ci        name => "npn-client-honours-server-pref",
54e1051a39Sopenharmony_ci        server => {
55e1051a39Sopenharmony_ci            extra => {
56e1051a39Sopenharmony_ci                "NPNProtocols" => "bar,foo",
57e1051a39Sopenharmony_ci            },
58e1051a39Sopenharmony_ci        },
59e1051a39Sopenharmony_ci        client => {
60e1051a39Sopenharmony_ci            extra => {
61e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,bar",
62e1051a39Sopenharmony_ci            },
63e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
64e1051a39Sopenharmony_ci        },
65e1051a39Sopenharmony_ci        test => {
66e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "bar",
67e1051a39Sopenharmony_ci        },
68e1051a39Sopenharmony_ci    },
69e1051a39Sopenharmony_ci    {
70e1051a39Sopenharmony_ci        name => "npn-client-first-pref-on-mismatch",
71e1051a39Sopenharmony_ci        server => {
72e1051a39Sopenharmony_ci            extra => {
73e1051a39Sopenharmony_ci                "NPNProtocols" => "baz",
74e1051a39Sopenharmony_ci            },
75e1051a39Sopenharmony_ci        },
76e1051a39Sopenharmony_ci        client => {
77e1051a39Sopenharmony_ci            extra => {
78e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,bar",
79e1051a39Sopenharmony_ci            },
80e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
81e1051a39Sopenharmony_ci        },
82e1051a39Sopenharmony_ci        test => {
83e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "foo",
84e1051a39Sopenharmony_ci        },
85e1051a39Sopenharmony_ci    },
86e1051a39Sopenharmony_ci    {
87e1051a39Sopenharmony_ci        name => "npn-no-server-support",
88e1051a39Sopenharmony_ci        server => {},
89e1051a39Sopenharmony_ci        client => {
90e1051a39Sopenharmony_ci            extra => {
91e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
92e1051a39Sopenharmony_ci            },
93e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
94e1051a39Sopenharmony_ci        },
95e1051a39Sopenharmony_ci        test => {
96e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => undef,
97e1051a39Sopenharmony_ci        },
98e1051a39Sopenharmony_ci    },
99e1051a39Sopenharmony_ci    {
100e1051a39Sopenharmony_ci        name => "npn-no-client-support",
101e1051a39Sopenharmony_ci        server => {
102e1051a39Sopenharmony_ci            extra => {
103e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
104e1051a39Sopenharmony_ci            },
105e1051a39Sopenharmony_ci        },
106e1051a39Sopenharmony_ci        client => {
107e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
108e1051a39Sopenharmony_ci        },
109e1051a39Sopenharmony_ci        test => {
110e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => undef,
111e1051a39Sopenharmony_ci        },
112e1051a39Sopenharmony_ci    },
113e1051a39Sopenharmony_ci    {
114e1051a39Sopenharmony_ci        name => "npn-with-sni-no-context-switch",
115e1051a39Sopenharmony_ci        server => {
116e1051a39Sopenharmony_ci            extra => {
117e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
118e1051a39Sopenharmony_ci                "ServerNameCallback" => "IgnoreMismatch",
119e1051a39Sopenharmony_ci            },
120e1051a39Sopenharmony_ci        },
121e1051a39Sopenharmony_ci        server2 => {
122e1051a39Sopenharmony_ci            extra => {
123e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
124e1051a39Sopenharmony_ci            },
125e1051a39Sopenharmony_ci        },
126e1051a39Sopenharmony_ci        client => {
127e1051a39Sopenharmony_ci            extra => {
128e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,bar",
129e1051a39Sopenharmony_ci                "ServerName" => "server1",
130e1051a39Sopenharmony_ci            },
131e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
132e1051a39Sopenharmony_ci        },
133e1051a39Sopenharmony_ci        test => {
134e1051a39Sopenharmony_ci            "ExpectedServerName" => "server1",
135e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "foo",
136e1051a39Sopenharmony_ci        },
137e1051a39Sopenharmony_ci    },
138e1051a39Sopenharmony_ci    {
139e1051a39Sopenharmony_ci        name => "npn-with-sni-context-switch",
140e1051a39Sopenharmony_ci        server => {
141e1051a39Sopenharmony_ci            extra => {
142e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
143e1051a39Sopenharmony_ci                "ServerNameCallback" => "IgnoreMismatch",
144e1051a39Sopenharmony_ci            },
145e1051a39Sopenharmony_ci        },
146e1051a39Sopenharmony_ci        server2 => {
147e1051a39Sopenharmony_ci            extra => {
148e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
149e1051a39Sopenharmony_ci            },
150e1051a39Sopenharmony_ci        },
151e1051a39Sopenharmony_ci        client => {
152e1051a39Sopenharmony_ci            extra => {
153e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,bar",
154e1051a39Sopenharmony_ci                "ServerName" => "server2",
155e1051a39Sopenharmony_ci            },
156e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
157e1051a39Sopenharmony_ci        },
158e1051a39Sopenharmony_ci        test => {
159e1051a39Sopenharmony_ci            "ExpectedServerName" => "server2",
160e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "bar",
161e1051a39Sopenharmony_ci        },
162e1051a39Sopenharmony_ci    },
163e1051a39Sopenharmony_ci    {
164e1051a39Sopenharmony_ci        name => "npn-selected-sni-server-supports-npn",
165e1051a39Sopenharmony_ci        server => {
166e1051a39Sopenharmony_ci            extra => {
167e1051a39Sopenharmony_ci                "ServerNameCallback" => "IgnoreMismatch",
168e1051a39Sopenharmony_ci            },
169e1051a39Sopenharmony_ci        },
170e1051a39Sopenharmony_ci        server2 => {
171e1051a39Sopenharmony_ci            extra => {
172e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
173e1051a39Sopenharmony_ci            },
174e1051a39Sopenharmony_ci        },
175e1051a39Sopenharmony_ci        client => {
176e1051a39Sopenharmony_ci            extra => {
177e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,bar",
178e1051a39Sopenharmony_ci                "ServerName" => "server2",
179e1051a39Sopenharmony_ci            },
180e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
181e1051a39Sopenharmony_ci        },
182e1051a39Sopenharmony_ci        test => {
183e1051a39Sopenharmony_ci            "ExpectedServerName" => "server2",
184e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "bar",
185e1051a39Sopenharmony_ci        },
186e1051a39Sopenharmony_ci    },
187e1051a39Sopenharmony_ci    {
188e1051a39Sopenharmony_ci        name => "npn-selected-sni-server-does-not-support-npn",
189e1051a39Sopenharmony_ci        server => {
190e1051a39Sopenharmony_ci            extra => {
191e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
192e1051a39Sopenharmony_ci                "ServerNameCallback" => "IgnoreMismatch",
193e1051a39Sopenharmony_ci            },
194e1051a39Sopenharmony_ci        },
195e1051a39Sopenharmony_ci        server2 => { },
196e1051a39Sopenharmony_ci        client => {
197e1051a39Sopenharmony_ci            extra => {
198e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,bar",
199e1051a39Sopenharmony_ci                "ServerName" => "server2",
200e1051a39Sopenharmony_ci            },
201e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
202e1051a39Sopenharmony_ci        },
203e1051a39Sopenharmony_ci        test => {
204e1051a39Sopenharmony_ci             "ExpectedServerName" => "server2",
205e1051a39Sopenharmony_ci             "ExpectedNPNProtocol" => undef,
206e1051a39Sopenharmony_ci        },
207e1051a39Sopenharmony_ci    },
208e1051a39Sopenharmony_ci    {
209e1051a39Sopenharmony_ci        name => "alpn-preferred-over-npn",
210e1051a39Sopenharmony_ci        server => {
211e1051a39Sopenharmony_ci            extra => {
212e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
213e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
214e1051a39Sopenharmony_ci            },
215e1051a39Sopenharmony_ci        },
216e1051a39Sopenharmony_ci        client => {
217e1051a39Sopenharmony_ci            extra => {
218e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
219e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
220e1051a39Sopenharmony_ci            },
221e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
222e1051a39Sopenharmony_ci        },
223e1051a39Sopenharmony_ci        test => {
224e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "foo",
225e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => undef,
226e1051a39Sopenharmony_ci        },
227e1051a39Sopenharmony_ci    },
228e1051a39Sopenharmony_ci    {
229e1051a39Sopenharmony_ci        name => "sni-npn-preferred-over-alpn",
230e1051a39Sopenharmony_ci        server => {
231e1051a39Sopenharmony_ci            extra => {
232e1051a39Sopenharmony_ci                "ServerNameCallback" => "IgnoreMismatch",
233e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
234e1051a39Sopenharmony_ci            },
235e1051a39Sopenharmony_ci        },
236e1051a39Sopenharmony_ci        server2 => {
237e1051a39Sopenharmony_ci            extra => {
238e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
239e1051a39Sopenharmony_ci            },
240e1051a39Sopenharmony_ci        },
241e1051a39Sopenharmony_ci        client => {
242e1051a39Sopenharmony_ci            extra => {
243e1051a39Sopenharmony_ci                "ServerName" => "server2",
244e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
245e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
246e1051a39Sopenharmony_ci            },
247e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
248e1051a39Sopenharmony_ci        },
249e1051a39Sopenharmony_ci        test => {
250e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => undef,
251e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "bar",
252e1051a39Sopenharmony_ci            "ExpectedServerName" => "server2",  
253e1051a39Sopenharmony_ci        },
254e1051a39Sopenharmony_ci    },
255e1051a39Sopenharmony_ci    {
256e1051a39Sopenharmony_ci        name => "npn-simple-resumption",
257e1051a39Sopenharmony_ci        server => {
258e1051a39Sopenharmony_ci            extra => {
259e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
260e1051a39Sopenharmony_ci            },
261e1051a39Sopenharmony_ci        },
262e1051a39Sopenharmony_ci        client => {
263e1051a39Sopenharmony_ci            extra => {
264e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
265e1051a39Sopenharmony_ci            },
266e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
267e1051a39Sopenharmony_ci        },
268e1051a39Sopenharmony_ci        test => {
269e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
270e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
271e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "foo",
272e1051a39Sopenharmony_ci        },
273e1051a39Sopenharmony_ci    },
274e1051a39Sopenharmony_ci    {
275e1051a39Sopenharmony_ci        name => "npn-server-switch-resumption",
276e1051a39Sopenharmony_ci        server => {
277e1051a39Sopenharmony_ci            extra => {
278e1051a39Sopenharmony_ci                "NPNProtocols" => "bar,foo",
279e1051a39Sopenharmony_ci            },
280e1051a39Sopenharmony_ci        },
281e1051a39Sopenharmony_ci        resume_server => {
282e1051a39Sopenharmony_ci            extra => {
283e1051a39Sopenharmony_ci                "NPNProtocols" => "baz,foo",
284e1051a39Sopenharmony_ci            },
285e1051a39Sopenharmony_ci        },
286e1051a39Sopenharmony_ci        client => {
287e1051a39Sopenharmony_ci            extra => {
288e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,bar,baz",
289e1051a39Sopenharmony_ci            },
290e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
291e1051a39Sopenharmony_ci        },
292e1051a39Sopenharmony_ci        test => {
293e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
294e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
295e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "baz",
296e1051a39Sopenharmony_ci        },
297e1051a39Sopenharmony_ci    },
298e1051a39Sopenharmony_ci    {
299e1051a39Sopenharmony_ci        name => "npn-client-switch-resumption",
300e1051a39Sopenharmony_ci        server => {
301e1051a39Sopenharmony_ci            extra => {
302e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,bar,baz",
303e1051a39Sopenharmony_ci            },
304e1051a39Sopenharmony_ci        },
305e1051a39Sopenharmony_ci        client => {
306e1051a39Sopenharmony_ci            extra => {
307e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,baz",
308e1051a39Sopenharmony_ci            },
309e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
310e1051a39Sopenharmony_ci        },
311e1051a39Sopenharmony_ci        resume_client => {
312e1051a39Sopenharmony_ci            extra => {
313e1051a39Sopenharmony_ci                "NPNProtocols" => "bar,baz",
314e1051a39Sopenharmony_ci            },
315e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
316e1051a39Sopenharmony_ci        },
317e1051a39Sopenharmony_ci        test => {
318e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
319e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
320e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "bar",
321e1051a39Sopenharmony_ci        },
322e1051a39Sopenharmony_ci    },
323e1051a39Sopenharmony_ci    {
324e1051a39Sopenharmony_ci        name => "npn-client-first-pref-on-mismatch-resumption",
325e1051a39Sopenharmony_ci        server => {
326e1051a39Sopenharmony_ci            extra => {
327e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
328e1051a39Sopenharmony_ci            },
329e1051a39Sopenharmony_ci        },
330e1051a39Sopenharmony_ci        resume_server => {
331e1051a39Sopenharmony_ci            extra => {
332e1051a39Sopenharmony_ci                "NPNProtocols" => "baz",
333e1051a39Sopenharmony_ci            },
334e1051a39Sopenharmony_ci        },
335e1051a39Sopenharmony_ci        client => {
336e1051a39Sopenharmony_ci            extra => {
337e1051a39Sopenharmony_ci                "NPNProtocols" => "foo,bar",
338e1051a39Sopenharmony_ci            },
339e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
340e1051a39Sopenharmony_ci        },
341e1051a39Sopenharmony_ci        test => {
342e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
343e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
344e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "foo",
345e1051a39Sopenharmony_ci        },
346e1051a39Sopenharmony_ci    },
347e1051a39Sopenharmony_ci    {
348e1051a39Sopenharmony_ci        name => "npn-no-server-support-resumption",
349e1051a39Sopenharmony_ci        server => {
350e1051a39Sopenharmony_ci            extra => {
351e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
352e1051a39Sopenharmony_ci            },
353e1051a39Sopenharmony_ci        },
354e1051a39Sopenharmony_ci        resume_server => { },
355e1051a39Sopenharmony_ci        client => {
356e1051a39Sopenharmony_ci            extra => {
357e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
358e1051a39Sopenharmony_ci            },
359e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
360e1051a39Sopenharmony_ci        },
361e1051a39Sopenharmony_ci        test => {
362e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
363e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
364e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => undef,
365e1051a39Sopenharmony_ci        },
366e1051a39Sopenharmony_ci    },
367e1051a39Sopenharmony_ci    {
368e1051a39Sopenharmony_ci        name => "npn-no-client-support-resumption",
369e1051a39Sopenharmony_ci        server => {
370e1051a39Sopenharmony_ci            extra => {
371e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
372e1051a39Sopenharmony_ci            },
373e1051a39Sopenharmony_ci        },
374e1051a39Sopenharmony_ci        client => {
375e1051a39Sopenharmony_ci            extra => {
376e1051a39Sopenharmony_ci                "NPNProtocols" => "foo",
377e1051a39Sopenharmony_ci            },
378e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
379e1051a39Sopenharmony_ci        },
380e1051a39Sopenharmony_ci        resume_client => {
381e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
382e1051a39Sopenharmony_ci        },
383e1051a39Sopenharmony_ci        test => {
384e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
385e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
386e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => undef,
387e1051a39Sopenharmony_ci        },
388e1051a39Sopenharmony_ci    },
389e1051a39Sopenharmony_ci    {
390e1051a39Sopenharmony_ci        name => "alpn-preferred-over-npn-resumption",
391e1051a39Sopenharmony_ci        server => {
392e1051a39Sopenharmony_ci            extra => {
393e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
394e1051a39Sopenharmony_ci            },
395e1051a39Sopenharmony_ci        },
396e1051a39Sopenharmony_ci        resume_server => {
397e1051a39Sopenharmony_ci            extra => {
398e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
399e1051a39Sopenharmony_ci                "NPNProtocols" => "baz",
400e1051a39Sopenharmony_ci            },
401e1051a39Sopenharmony_ci        },
402e1051a39Sopenharmony_ci        client => {
403e1051a39Sopenharmony_ci            extra => {
404e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
405e1051a39Sopenharmony_ci                "NPNProtocols" => "bar,baz",
406e1051a39Sopenharmony_ci            },
407e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
408e1051a39Sopenharmony_ci        },
409e1051a39Sopenharmony_ci        test => {
410e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
411e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
412e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => "foo",
413e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => undef,
414e1051a39Sopenharmony_ci        },
415e1051a39Sopenharmony_ci    },
416e1051a39Sopenharmony_ci    {
417e1051a39Sopenharmony_ci        name => "npn-used-if-alpn-not-supported-resumption",
418e1051a39Sopenharmony_ci        server => {
419e1051a39Sopenharmony_ci            extra => {
420e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
421e1051a39Sopenharmony_ci                "NPNProtocols" => "bar",
422e1051a39Sopenharmony_ci            },
423e1051a39Sopenharmony_ci        },
424e1051a39Sopenharmony_ci        resume_server => {
425e1051a39Sopenharmony_ci            extra => {
426e1051a39Sopenharmony_ci                "NPNProtocols" => "baz",
427e1051a39Sopenharmony_ci            },
428e1051a39Sopenharmony_ci        },
429e1051a39Sopenharmony_ci        client => {
430e1051a39Sopenharmony_ci            extra => {
431e1051a39Sopenharmony_ci                "ALPNProtocols" => "foo",
432e1051a39Sopenharmony_ci                "NPNProtocols" => "bar,baz",
433e1051a39Sopenharmony_ci            },
434e1051a39Sopenharmony_ci            "MaxProtocol" => "TLSv1.2"
435e1051a39Sopenharmony_ci        },
436e1051a39Sopenharmony_ci        test => {
437e1051a39Sopenharmony_ci            "HandshakeMode" => "Resume",
438e1051a39Sopenharmony_ci            "ResumptionExpected" => "Yes",
439e1051a39Sopenharmony_ci            "ExpectedALPNProtocol" => undef,
440e1051a39Sopenharmony_ci            "ExpectedNPNProtocol" => "baz",
441e1051a39Sopenharmony_ci        },
442e1051a39Sopenharmony_ci    },
443e1051a39Sopenharmony_ci);
444