Mercurial > hg > nginx-tests
annotate proxy_next_upstream.t @ 289:cbd4f6eca676
Tests: check if started process is alive while starting nginx.
This allows faster test execution in case of startup failures, e.g.
due to configuration errors. Note that just adding waitpid() to
waitforfile() causes hang on win32 in wait(). To fix this, wait()
calls were changed to waitpid() with pid specified.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 27 May 2013 17:15:17 +0400 |
parents | 56157712d744 |
children | 3d3c8b5ea8ee |
rev | line source |
---|---|
288
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Tests for http proxy module, proxy_next_upstream directive. |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 use Test::More; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 BEGIN { use FindBin; chdir($FindBin::Bin); } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 use lib 'lib'; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 use Test::Nginx; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 ############################################################################### |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 select STDERR; $| = 1; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 select STDOUT; $| = 1; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(6); |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 $t->write_file_expand('nginx.conf', <<'EOF'); |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 %%TEST_GLOBALS%% |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 daemon off; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 events { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 http { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 %%TEST_GLOBALS_HTTP%% |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 upstream u { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 server 127.0.0.1:8081; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 server 127.0.0.1:8082; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 server { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 listen 127.0.0.1:8080; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 server_name localhost; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 location / { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 proxy_pass http://u; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 proxy_next_upstream http_500 http_404; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 server { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 listen 127.0.0.1:8081; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 server_name localhost; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 location / { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 return 404; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 location /ok { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 return 200 "AND-THIS\n"; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 location /500 { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 return 500; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 server { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 listen 127.0.0.1:8082; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 server_name localhost; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 location / { |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 return 200 "TEST-OK-IF-YOU-SEE-THIS\n"; |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 } |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 EOF |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 $t->run(); |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 ############################################################################### |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 # check if both request fallback to a backend |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 # which returns valid response |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 like(http_get('/'), qr/SEE-THIS/, 'proxy request'); |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 like(http_get('/'), qr/SEE-THIS/, 'second request'); |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 # make sure backend isn't switched off after |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 # proxy_next_upstream http_404 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 like(http_get('/ok') . http_get('/ok'), qr/AND-THIS/, 'not down'); |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 # next upstream on http_500 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 like(http_get('/500'), qr/SEE-THIS/, 'request 500'); |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 like(http_get('/500'), qr/SEE-THIS/, 'request 500 second'); |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 # make sure backend switched off with http_500 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 unlike(http_get('/ok') . http_get('/ok'), qr/AND-THIS/, 'down after 500'); |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 |
56157712d744
Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 ############################################################################### |