[PATCH 01 of 10] Tests: tests for passing Date and Server headers

Maxim Dounin mdounin at mdounin.ru
Wed Apr 20 22:37:42 UTC 2022


# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1650492927 -10800
#      Thu Apr 21 01:15:27 2022 +0300
# Node ID cc83aac5f9482dc7485d92a1e5944586774a5306
# Parent  0c50a00e67334659d58d3cf7cb81fcf5872a8285
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;
+	}
+}
+
+###############################################################################



More information about the nginx-devel mailing list