# HG changeset patch # User Maxim Dounin # Date 1653935221 -10800 # Node ID 5ad8f0b5fa0f7aa03d127a4e5ab2f2efd71c6de4 # Parent c0dfbedf52bd61c0b35dd7f8e68379a23b54be74 Tests: tests for passing Date and Server headers. diff --git a/proxy_merge_headers.t b/proxy_merge_headers.t --- a/proxy_merge_headers.t +++ b/proxy_merge_headers.t @@ -10,6 +10,7 @@ use warnings; use strict; use Test::More; +use Socket qw/ CRLF /; BEGIN { use FindBin; chdir($FindBin::Bin); } @@ -21,7 +22,7 @@ use Test::Nginx; select STDERR; $| = 1; select STDOUT; $| = 1; -my $t = Test::Nginx->new()->has(qw/http proxy cache rewrite/)->plan(7) +my $t = Test::Nginx->new()->has(qw/http proxy cache rewrite/)->plan(11) ->write_file_expand('nginx.conf', <<'EOF'); %%TEST_GLOBALS%% @@ -64,6 +65,16 @@ http { proxy_pass http://127.0.0.1:8081; proxy_set_body "body"; } + + location /passdate/ { + proxy_pass http://127.0.0.1:8082; + proxy_pass_header Date; + proxy_pass_header Server; + + location /passdate/no/ { + proxy_pass http://127.0.0.1:8082; + } + } } server { @@ -80,8 +91,11 @@ http { EOF +$t->run_daemon(\&http_daemon); $t->run(); +$t->waitforsocket('127.0.0.1:' . port(8082)); + ############################################################################### like(http_get_ims('/'), qr/ims=;blah=blah;/, @@ -98,6 +112,11 @@ like(http_get('/nested/'), qr/X-Pad/, 'p unlike(http_get('/'), qr/X-Hidden/, 'proxy_hide_header inherited'); unlike(http_get('/nested/'), qr/X-Hidden/, 'proxy_hide_header nested'); +like(http_get('/passdate/'), qr/Date: passed/, 'proxy_pass_header date'); +like(http_get('/passdate/'), qr/Server: passed/, 'proxy_pass_header server'); +unlike(http_get('/passdate/no/'), qr/Date/, 'proxy_pass_header no date'); +unlike(http_get('/passdate/no/'), qr/Server/, 'proxy_pass_header no server'); + ############################################################################### sub http_get_ims { @@ -112,3 +131,45 @@ EOF } ############################################################################### + +sub http_daemon { + my $server = IO::Socket::INET->new( + Proto => 'tcp', + LocalHost => '127.0.0.1', + LocalPort => port(8082), + Listen => 5, + Reuse => 1 + ) + or die "Can't create listening socket: $!\n"; + + local $SIG{PIPE} = 'IGNORE'; + + while (my $client = $server->accept()) { + $client->autoflush(1); + + my $headers = ''; + my $uri = ''; + + while (<$client>) { + $headers .= $_; + last if (/^\x0d?\x0a?$/); + } + + $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i; + + if ($uri =~ 'no') { + print $client + 'HTTP/1.0 200 OK' . CRLF . CRLF; + + } else { + print $client + 'HTTP/1.0 200 OK' . CRLF . + 'Date: passed' . CRLF . + 'Server: passed' . CRLF . CRLF; + } + + close $client; + } +} + +###############################################################################