annotate proxy_ssi_body.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 ddc4b1011333
children 8dd5cf697eae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
422
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Test for proxied subrequest with request body in file.
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 use Socket qw/ CRLF /;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 BEGIN { use FindBin; chdir($FindBin::Bin); }
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use lib 'lib';
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 use Test::Nginx;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22 ###############################################################################
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDERR; $| = 1;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 select STDOUT; $| = 1;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 my $t = Test::Nginx->new()->has(qw/http proxy ssi/)->plan(1);
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 $t->write_file_expand('nginx.conf', <<'EOF');
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 %%TEST_GLOBALS%%
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 daemon off;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 events {
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 }
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 http {
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 %%TEST_GLOBALS_HTTP%%
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server {
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 listen 127.0.0.1:8080;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 server_name localhost;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 location / {
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 }
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 location /proxy {
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 proxy_pass http://127.0.0.1:8080/;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 client_body_in_file_only on;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 ssi on;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 }
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 }
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 }
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 EOF
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 $t->write_file('ssi.html', 'X<!--# include virtual="test.html" -->X');
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 $t->write_file('test.html', 'YY');
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 $t->run();
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 ###############################################################################
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 # Request body cache file is released once a response is got.
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 # If later a subrequest tries to use body, it fails.
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 TODO: {
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 local $TODO = 'prematurely pruned';
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 like(http_get_body('/proxy/ssi.html', "1234567890"), qr/^XYYX$/m,
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 'body in file in proxied subrequest');
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 }
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 ###############################################################################
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 sub http_get_body {
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 my ($url, $body, %extra) = @_;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 my $p = "GET $url HTTP/1.0" . CRLF
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 . "Host: localhost" . CRLF
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 . "Content-Length: " . (length $body) . CRLF . CRLF
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 . $body;
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 return http($p, %extra);
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 }
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88
ddc4b1011333 Tests: test for proxied subrequest with request body in file.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 ###############################################################################