| #!/usr/bin/perl | |
| # (C) Andrey Zelenkov | |
| # (C) Nginx, Inc. | |
| # Tests for server_tokens directive. | |
| ############################################################################### | |
| use warnings; | |
| use strict; | |
| use Test::More; | |
| BEGIN { use FindBin; chdir($FindBin::Bin); } | |
| use lib 'lib'; | |
| use Test::Nginx; | |
| ############################################################################### | |
| select STDERR; $| = 1; | |
| select STDOUT; $| = 1; | |
| my $t = Test::Nginx->new()->has(qw/http rewrite/) | |
| ->write_file_expand('nginx.conf', <<'EOF'); | |
| %%TEST_GLOBALS%% | |
| daemon off; | |
| events { | |
| } | |
| http { | |
| %%TEST_GLOBALS_HTTP%% | |
| server { | |
| listen 127.0.0.1:8080; | |
| server_name localhost; | |
| location /200 { | |
| return 200; | |
| } | |
| location /404 { | |
| return 404; | |
| } | |
| location /off { | |
| server_tokens off; | |
| location /off/200 { | |
| return 200; | |
| } | |
| location /off/404 { | |
| return 404; | |
| } | |
| } | |
| location /on { | |
| server_tokens on; | |
| location /on/200 { | |
| return 200; | |
| } | |
| location /on/404 { | |
| return 404; | |
| } | |
| } | |
| location /b { | |
| server_tokens build; | |
| location /b/200 { | |
| return 200; | |
| } | |
| location /b/404 { | |
| return 404; | |
| } | |
| } | |
| } | |
| } | |
| EOF | |
| $t->run()->plan(12); | |
| ############################################################################### | |
| my $re = qr/nginx\/\d+\.\d+\.\d+/; | |
| like(http_get_server('/200'), $re, 'tokens default 200'); | |
| like(http_get_server('/404'), $re, 'tokens default 404'); | |
| like(http_body('/404'), $re, 'tokens default 404 body'); | |
| is(http_get_server('/off/200'), 'nginx', 'tokens off 200'); | |
| is(http_get_server('/off/404'), 'nginx', 'tokens off 404'); | |
| like(http_body('/off/404'), qr/nginx(?!\/)/, 'tokens off 404 body'); | |
| like(http_get_server('/on/200'), $re, 'tokens on 200'); | |
| like(http_get_server('/on/404'), $re, 'tokens on 404'); | |
| like(http_body('/on/404'), $re, 'tokens on 404 body'); | |
| $re = qr/$re \Q($1)\E/ if $t->{_configure_args} =~ /--build=(\S+)/; | |
| like(http_get_server('/b/200'), $re, 'tokens build 200'); | |
| like(http_get_server('/b/404'), $re, 'tokens build 404'); | |
| like(http_body('/b/404'), $re, 'tokens build 404 body'); | |
| ############################################################################### | |
| sub http_body { | |
| my ($uri) = shift; | |
| return http_get($uri) =~ /.*?\x0d\x0a?\x0d\x0a?(.*)/ms && $1; | |
| } | |
| sub http_get_server { | |
| my ($url) = @_; | |
| return http_get($url) =~ /^Server:\s(.+?)\x0d?$/mi && $1 || undef; | |
| } | |
| ############################################################################### |