annotate uwsgi.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 98f3a8568b0c
children dc2f8aac0553
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
168
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Test for uwsgi backend.
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use lib 'lib';
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use Test::Nginx;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 ###############################################################################
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 select STDERR; $| = 1;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDOUT; $| = 1;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 my $t = Test::Nginx->new()->has(qw/http uwsgi/)->has_daemon('uwsgi')->plan(3)
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 ->write_file_expand('nginx.conf', <<'EOF');
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 %%TEST_GLOBALS%%
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
249
6a0d934950bc Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents: 241
diff changeset
29 daemon off;
168
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 events {
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 }
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 http {
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 %%TEST_GLOBALS_HTTP%%
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 server {
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 listen 127.0.0.1:8080;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 server_name localhost;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 location / {
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 uwsgi_pass 127.0.0.1:8081;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 uwsgi_param SERVER_PROTOCOL $server_protocol;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 uwsgi_param HTTP_X_BLAH "blah";
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 }
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 }
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 }
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 EOF
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 $t->write_file('uwsgi_test_app.py', <<END);
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 def application(env, start_response):
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 start_response('200 OK', [('Content-Type','text/plain')])
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 return "SEE-THIS"
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 END
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58
363
98f3a8568b0c Tests: try to load python plugin if uwsgi has no wsgi option.
Sergey Budnevitch <sb@waeme.net>
parents: 249
diff changeset
59 my $uwsgihelp = `uwsgi -h`;
98f3a8568b0c Tests: try to load python plugin if uwsgi has no wsgi option.
Sergey Budnevitch <sb@waeme.net>
parents: 249
diff changeset
60 my @uwsgiopts = ();
98f3a8568b0c Tests: try to load python plugin if uwsgi has no wsgi option.
Sergey Budnevitch <sb@waeme.net>
parents: 249
diff changeset
61
98f3a8568b0c Tests: try to load python plugin if uwsgi has no wsgi option.
Sergey Budnevitch <sb@waeme.net>
parents: 249
diff changeset
62 if ($uwsgihelp !~ /--wsgi-file/) {
98f3a8568b0c Tests: try to load python plugin if uwsgi has no wsgi option.
Sergey Budnevitch <sb@waeme.net>
parents: 249
diff changeset
63 # uwsgi has no python support, maybe plugin load is necessary
98f3a8568b0c Tests: try to load python plugin if uwsgi has no wsgi option.
Sergey Budnevitch <sb@waeme.net>
parents: 249
diff changeset
64 push @uwsgiopts, '--plugin', 'python';
98f3a8568b0c Tests: try to load python plugin if uwsgi has no wsgi option.
Sergey Budnevitch <sb@waeme.net>
parents: 249
diff changeset
65 }
98f3a8568b0c Tests: try to load python plugin if uwsgi has no wsgi option.
Sergey Budnevitch <sb@waeme.net>
parents: 249
diff changeset
66
98f3a8568b0c Tests: try to load python plugin if uwsgi has no wsgi option.
Sergey Budnevitch <sb@waeme.net>
parents: 249
diff changeset
67 $t->run_daemon('uwsgi', '--socket', '127.0.0.1:8081', @uwsgiopts,
168
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 '--wsgi-file', $t->testdir() . '/uwsgi_test_app.py',
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 '--logto', $t->testdir() . '/uwsgi_log');
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 $t->run();
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72
174
c8169c827d18 Tests: use waitoforsocket() as uwsgi startup may take a while.
Maxim Dounin <mdounin@mdounin.ru>
parents: 168
diff changeset
73 $t->waitforsocket('127.0.0.1:8081')
c8169c827d18 Tests: use waitoforsocket() as uwsgi startup may take a while.
Maxim Dounin <mdounin@mdounin.ru>
parents: 168
diff changeset
74 or die "Can't start uwsgi";
c8169c827d18 Tests: use waitoforsocket() as uwsgi startup may take a while.
Maxim Dounin <mdounin@mdounin.ru>
parents: 168
diff changeset
75
168
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 ###############################################################################
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 like(http_get('/'), qr/SEE-THIS/, 'uwsgi request');
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 unlike(http_head('/head'), qr/SEE-THIS/, 'no data in HEAD');
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 like(http_get_headers('/headers'), qr/SEE-THIS/,
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 'uwsgi request with many ignored headers');
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 ###############################################################################
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 sub http_get_headers {
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 my ($url, %extra) = @_;
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 return http(<<EOF, %extra);
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 GET $url HTTP/1.0
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 Host: localhost
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 X-Blah: ignored header
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 EOF
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 }
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113
e9133938a5d3 Tests: add uwsgi tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 ###############################################################################