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