Mercurial > hg > nginx-tests
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 ############################################################################### |