Mercurial > hg > nginx-tests
annotate proxy_variables.t @ 1263:ea3c7659b6c1
Tests: handled early pidfile write on win32 in the run() routine.
In addition to the present waiting for pidfile, which is insufficient on win32
due to the CreateProcess model, and may lead to rare startup races, search now
for the certain error message which indicates started worker process.
This change allows tolerating moderate hiccups on win32 hosts.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 19 Dec 2017 19:55:01 +0300 |
parents | 196d33c2bb45 |
children | 3bc5df417f62 |
rev | line source |
---|---|
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Tests for http proxy module with upstream variables. |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 use lib 'lib'; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 use Test::Nginx; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 ############################################################################### |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 select STDERR; $| = 1; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 select STDOUT; $| = 1; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 |
1020
196d33c2bb45
Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
974
diff
changeset
|
25 my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(18) |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 ->write_file_expand('nginx.conf', <<'EOF'); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
28 %%TEST_GLOBALS%% |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 daemon off; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 events { |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 http { |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 %%TEST_GLOBALS_HTTP%% |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 upstream u { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
39 server 127.0.0.1:8081; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
40 server 127.0.0.1:8081; |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 |
586
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
43 log_format time '$upstream_connect_time:$upstream_header_time:' |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
44 '$upstream_response_time'; |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
47 listen 127.0.0.1:8080; |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 server_name localhost; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 |
586
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
50 add_header X-Connect $upstream_connect_time; |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
51 add_header X-Header $upstream_header_time; |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
52 add_header X-Response $upstream_response_time; |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
53 |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 location / { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
55 proxy_pass http://127.0.0.1:8081; |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 access_log %%TESTDIR%%/time.log time; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 location /pnu { |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 proxy_pass http://u/bad; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 } |
676
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
62 |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
63 location /vars { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
64 proxy_pass http://127.0.0.1:8080/stub; |
676
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
65 |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
66 add_header X-Proxy-Host $proxy_host; |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
67 add_header X-Proxy-Port $proxy_port; |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
68 add_header X-Proxy-Forwarded $proxy_add_x_forwarded_for; |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
69 } |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
70 |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
71 location /stub { } |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 EOF |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 |
676
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
77 $t->write_file('stub', ''); |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
78 $t->run_daemon(\&http_daemon, port(8081)); |
1020
196d33c2bb45
Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
974
diff
changeset
|
79 $t->run(); |
586
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
80 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
81 $t->waitforsocket('127.0.0.1:' . port(8081)); |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
82 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 ############################################################################### |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 my $re = qr/(\d\.\d{3})/; |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
86 my $p0 = port(8080); |
586
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
87 my ($ct, $ht, $rt, $ct2, $ht2, $rt2); |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
676
diff
changeset
|
89 like(http_get('/vars'), qr/X-Proxy-Host:\s127\.0\.0\.1:$p0/, 'proxy_host'); |
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
676
diff
changeset
|
90 like(http_get('/vars'), qr/X-Proxy-Port:\s$p0/, 'proxy_port'); |
676
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
91 like(http_xff('/vars', '192.0.2.1'), qr/X-Proxy-Forwarded:.*192\.0\.2\.1/, |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
92 'proxy_add_x_forwarded_for'); |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
93 |
586
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
94 ($ct, $ht) = get('/header'); |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
95 cmp_ok($ct, '<', 1, 'connect time - slow response header'); |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
96 cmp_ok($ht, '>=', 1, 'header time - slow response header'); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 |
586
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
98 ($ct, $ht) = get('/body'); |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
99 cmp_ok($ct, '<', 1, 'connect time - slow response body'); |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
100 cmp_ok($ht, '<', 1, 'header time - slow response body'); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
101 |
586
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
102 ($ct, $ct2, $ht, $ht2, $rt) = get('/pnu', many => 1); |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
103 cmp_ok($ct, '<', 1, 'connect time - next'); |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
104 cmp_ok($ct2, '<', 1, 'connect time - next 2'); |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
105 cmp_ok($ht, '>=', 1, 'header time - next'); |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
106 cmp_ok($ht2, '<', 1, 'header time - next 2'); |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
107 is($ht, $rt, 'header time - bad response'); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 $t->stop(); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 |
586
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
111 ($ct, $ht, $rt, $ct2, $ht2, $rt2) |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
112 = $t->read_file('time.log') =~ /^$re:$re:$re\n$re:$re:$re$/; |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
113 |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
114 cmp_ok($ct, '<', 1, 'connect time log - slow response header'); |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
115 cmp_ok($ct2, '<', 1, 'connect time log - slow response body'); |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
116 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
117 cmp_ok($ht, '>=', 1, 'header time log - slow response header'); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
118 cmp_ok($ht2, '<', 1, 'header time log - slow response body'); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
119 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
120 cmp_ok($rt, '>=', 1, 'response time log - slow response header'); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
121 cmp_ok($rt2, '>=', 1, 'response time log - slow response body'); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
123 ############################################################################### |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
124 |
586
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
125 sub get { |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
126 my ($uri, %extra) = @_; |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
127 my $re = $extra{many} ? qr/$re, $re?/ : $re; |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
128 my $r = http_get($uri); |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
129 $r =~ /X-Connect: $re/, $r =~ /X-Header: $re/, $r =~ /X-Response: $re/; |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
130 } |
ef2b435c1048
Tests: simple tests for $upstream_connect_time.
Sergey Kandaurov <pluknet@nginx.com>
parents:
568
diff
changeset
|
131 |
676
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
132 sub http_xff { |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
133 my ($uri, $xff) = @_; |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
134 return http(<<EOF); |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
135 GET $uri HTTP/1.0 |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
136 Host: localhost |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
137 X-Forwarded-For: $xff |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
138 |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
139 EOF |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
140 } |
dbe5bc4b8b39
Tests: added tests for proxy module variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
586
diff
changeset
|
141 |
520
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
142 sub http_daemon { |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
143 my ($port) = @_; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
144 my $once = 1; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
145 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
146 my $server = IO::Socket::INET->new( |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
147 Proto => 'tcp', |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
148 LocalHost => '127.0.0.1', |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
149 LocalPort => $port, |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
150 Listen => 5, |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
151 Reuse => 1 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
152 ) |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
153 or die "Can't create listening socket: $!\n"; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
154 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
155 local $SIG{PIPE} = 'IGNORE'; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
156 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
157 while (my $client = $server->accept()) { |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
158 $client->autoflush(1); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
159 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
160 my $headers = ''; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
161 my $uri = ''; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
162 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 while (<$client>) { |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 $headers .= $_; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
165 last if (/^\x0d?\x0a?$/); |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
168 $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
169 next unless defined $uri; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
170 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
171 if ($uri =~ 'bad' && $once) { |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
172 $once = 0; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
173 sleep 1; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
174 next; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
175 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
176 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
177 if ($uri =~ 'header') { |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
178 sleep 1; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
179 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
180 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
181 print $client <<EOF; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
182 HTTP/1.1 200 OK |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
183 Connection: close |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
184 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
185 SEE-THIS- |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
186 EOF |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
187 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
188 if ($uri =~ 'body') { |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
189 sleep 1; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
190 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
191 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
192 print $client 'AND-THIS'; |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
193 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
194 } |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
195 |
4bcf8bc2bafe
Tests: $upstream_header_time and $upstream_response_time variables.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
196 ############################################################################### |