annotate http_server_name.t @ 572:ca54b445d982

Tests: masked nginx bug in proxy next upstream. When iterating through several next upstreams per a worker cycle, a previously reported event about upstream connection error may be improperly applied to the next upstream, thus leading to the invalid connection error. E.g., in kqueue, where the problem is visible, this is caused by "ev->instance" that does not tolerate more than one next upstream at once, and kevents placed on the kqueue separately for read and write events. The change is to limit test case to the only one next upstream.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 14 May 2015 11:54:24 +0300
parents 6a0d934950bc
children c68b7bbdf21a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
114
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for server_name selection.
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use lib 'lib';
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use Test::Nginx;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 ###############################################################################
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 select STDERR; $| = 1;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDOUT; $| = 1;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
223
f9325406df0b Tests: skip tests not appropriate for win32.
Maxim Dounin <mdounin@mdounin.ru>
parents: 210
diff changeset
24 plan(skip_all => 'win32') if $^O eq 'MSWin32';
f9325406df0b Tests: skip tests not appropriate for win32.
Maxim Dounin <mdounin@mdounin.ru>
parents: 210
diff changeset
25
121
8ac1faaddd2c Tests: better handle various configure arguments.
Maxim Dounin <mdounin@mdounin.ru>
parents: 115
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(9)
114
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 %%TEST_GLOBALS%%
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
249
6a0d934950bc Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents: 223
diff changeset
31 daemon off;
114
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 events {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 http {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38
210
a5f810eb87a2 Tests: explicitly set server names hash bucket size to 64.
Maxim Dounin <mdounin@mdounin.ru>
parents: 171
diff changeset
39 server_names_hash_bucket_size 64;
a5f810eb87a2 Tests: explicitly set server names hash bucket size to 64.
Maxim Dounin <mdounin@mdounin.ru>
parents: 171
diff changeset
40
114
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 server {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 listen 127.0.0.1:8080;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 server_name localhost;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 location / {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 add_header X-Server $server_name;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 return 204;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 server {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 listen 127.0.0.1:8080;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 server_name www.example.com;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 location / {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 add_header X-Server $server_name;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 return 204;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 server {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 listen 127.0.0.1:8080;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 server_name ~^EXAMPLE\.COM$;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 location / {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 add_header X-Server $server_name;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 return 204;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 server {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 listen 127.0.0.1:8080;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 server_name ~^(?P<name>.+)\Q.example.com\E$;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 location / {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 add_header X-Server $server_name;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 add_header X-Match $name;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 return 204;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 server {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 listen 127.0.0.1:8080;
171
cfb8147f19a7 Tests: use (?P<name>...) to be compatible with old PCRE versions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 166
diff changeset
84 server_name "~^(?P<name>www\p{N}+)\.example\.com$";
114
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 location / {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 add_header X-Server $server_name;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 add_header X-Match $name;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 return 204;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 EOF
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 $t->run();
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 ###############################################################################
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 sub http_server($) {
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 my ($host) = @_;
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 return http(<<EOF);
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 GET / HTTP/1.0
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 Host: $host
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 EOF
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 }
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 ###############################################################################
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 like(http_server('xxx'), qr/X-Server: localhost/, 'default');
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 like(http_server('www.example.com'), qr/\QX-Server: www.example.com/,
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 'www.example.com');
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 like(http_server('WWW.EXAMPLE.COM'), qr/\QX-Server: www.example.com/,
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 'www.example.com uppercase');
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 like(http_server('example.com'), qr/\QX-Server: ~^EXAMPLE\.COM$/,
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 'example.com regex');
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 like(http_server('EXAMPLE.COM'), qr/\QX-Server: ~^EXAMPLE\.COM$/,
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 'example.com regex uppercase');
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 like(http_server('blah.example.com'), qr/X-Match: blah/,
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 '(P<name>.*).example.com named capture');
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 like(http_server('BLAH.EXAMPLE.COM'), qr/X-Match: blah/,
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 '(P<name>.*).example.com named capture uppercase');
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 like(http_server('www01.example.com'), qr/X-Match: www01/,
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 '\p{N} in named capture');
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 like(http_server('WWW01.EXAMPLE.COM'), qr/X-Match: www01/,
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 '\p{N} in named capture uppercase');
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132
44b281ac4bc6 Tests: add server name tests, including fancy regex ones.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 ###############################################################################