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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ###############################################################################