comparison h3_server_name.t @ 1895:acd68670b064

Tests: simplified using IO::Socket::SSL in h3_server_name.t. See a797d7428fa5 for further details.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 24 May 2023 19:11:17 +0400
parents cd66d6f50ec1
children 8b74936ff2ac
comparison
equal deleted inserted replaced
1894:cd66d6f50ec1 1895:acd68670b064
45 45
46 ssl_certificate_key localhost.key; 46 ssl_certificate_key localhost.key;
47 ssl_certificate localhost.crt; 47 ssl_certificate localhost.crt;
48 48
49 server { 49 server {
50 listen 127.0.0.1:8080 ssl http2; 50 listen 127.0.0.1:8443 ssl http2;
51 listen 127.0.0.1:%%PORT_8980_UDP%% quic; 51 listen 127.0.0.1:%%PORT_8980_UDP%% quic;
52 server_name ~^(?P<name>.+)\.example\.com$; 52 server_name ~^(?P<name>.+)\.example\.com$;
53 53
54 location / { 54 location / {
55 return 200 $name; 55 return 200 $name;
95 95
96 ############################################################################### 96 ###############################################################################
97 97
98 sub get1 { 98 sub get1 {
99 my ($host, $sni) = @_; 99 my ($host, $sni) = @_;
100 my $s = get_ssl_socket(sni => $sni || $host, alpn => ['http/1.1']); 100 http("GET / HTTP/1.0\nHost: $host\n\n",
101 http(<<EOF, socket => $s) =~ /.*?\x0d\x0a?\x0d\x0a?(.*)/ms; 101 SSL => 1,
102 GET / HTTP/1.1 102 SSL_hostname => $sni || $host,
103 Host: $host 103 SSL_alpn_protocols => ['http/1.1'])
104 Connection: close 104 =~ /.*?\x0d\x0a?\x0d\x0a?(.*)/ms;
105
106 EOF
107 return $1; 105 return $1;
108 } 106 }
109 107
110 sub get2 { 108 sub get2 {
111 my ($host, $sni) = @_; 109 my ($host, $sni) = @_;
112 my $sock = get_ssl_socket(sni => $sni || $host, alpn => ['h2']); 110 my $sock = http('', start => 1,
111 SSL => 1,
112 SSL_hostname => $sni || $host,
113 SSL_alpn_protocols => ['h2']);
113 my $s = Test::Nginx::HTTP2->new(undef, socket => $sock); 114 my $s = Test::Nginx::HTTP2->new(undef, socket => $sock);
114 my $sid = $s->new_stream({ host => $host }); 115 my $sid = $s->new_stream({ host => $host });
115 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); 116 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
116 117
117 my ($frame) = grep { $_->{type} eq "DATA" } @$frames; 118 my ($frame) = grep { $_->{type} eq "DATA" } @$frames;
126 127
127 my ($frame) = grep { $_->{type} eq "DATA" } @$frames; 128 my ($frame) = grep { $_->{type} eq "DATA" } @$frames;
128 return $frame->{data}; 129 return $frame->{data};
129 } 130 }
130 131
131 sub get_ssl_socket {
132 my (%extra) = @_;
133 my $s;
134
135 eval {
136 local $SIG{ALRM} = sub { die "timeout\n" };
137 local $SIG{PIPE} = sub { die "sigpipe\n" };
138 alarm(8);
139 $s = IO::Socket::SSL->new(
140 Proto => 'tcp',
141 PeerAddr => '127.0.0.1',
142 PeerPort => port(8080),
143 SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE(),
144 SSL_hostname => $extra{sni},
145 SSL_alpn_protocols => $extra{alpn},
146 SSL_error_trap => sub { die $_[1] }
147 );
148 alarm(0);
149 };
150 alarm(0);
151
152 if ($@) {
153 log_in("died: $@");
154 return undef;
155 }
156
157 return $s;
158 }
159
160 ############################################################################### 132 ###############################################################################