diff ssl_sni.t @ 1449:eeababfd8726

Tests: moved $ssl_server_name tests in http to ssl_sni.t. The tests need appropriate checks for ancient IO::Socket::SSL versions.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 05 Mar 2019 13:21:30 +0300
parents 4e48bf51714f
children 5f53a1d6b83c
line wrap: on
line diff
--- a/ssl_sni.t
+++ b/ssl_sni.t
@@ -59,6 +59,18 @@ http {
             return 200 $server_name;
         }
     }
+
+    server {
+        listen       127.0.0.1:8081 ssl;
+        server_name  localhost;
+
+        ssl_certificate_key localhost.key;
+        ssl_certificate localhost.crt;
+
+        location / {
+            return 200 $ssl_session_reused:$ssl_server_name;
+        }
+    }
 }
 
 EOF
@@ -80,7 +92,7 @@ eval {
 };
 plan(skip_all => 'Net::SSLeay with OpenSSL SNI support required') if $@;
 
-$t->plan(6);
+$t->plan(8);
 
 $t->write_file('openssl.conf', <<EOF);
 [ req ]
@@ -124,10 +136,28 @@ like(https_get_host('example.org', 'exam
 
 }
 
+# $ssl_server_name in sessions
+
+my $ctx = new IO::Socket::SSL::SSL_Context(
+	SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE(),
+	SSL_session_cache_size => 100);
+
+like(http_get('/', socket => get_ssl_socket('localhost', 8081, $ctx)),
+	qr/^\.:localhost$/m, 'ssl server name');
+
+TODO: {
+local $TODO = 'not yet' if $t->has_module('OpenSSL (1.1.1|3)')
+	&& !$t->has_version('1.15.10');
+
+like(http_get('/', socket => get_ssl_socket('localhost', 8081, $ctx)),
+	qr/^r:localhost$/m, 'ssl server name - reused');
+
+}
+
 ###############################################################################
 
 sub get_ssl_socket {
-	my ($host) = @_;
+	my ($host, $port, $ctx) = @_;
 	my $s;
 
 	eval {
@@ -136,8 +166,9 @@ sub get_ssl_socket {
 		alarm(8);
 		$s = IO::Socket::SSL->new(
 			Proto => 'tcp',
-			PeerAddr => '127.0.0.1:' . port(8080),
+			PeerAddr => '127.0.0.1:' . port($port || 8080),
 			SSL_hostname => $host,
+			SSL_reuse_ctx => $ctx,
 			SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE(),
 			SSL_error_trap => sub { die $_[1] }
 		);