annotate ssi_delayed.t @ 1585:bff287fbf347

Tests: added proxy_cookie_domain/path tests with "off" parameter.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 23 Jul 2020 12:17:39 +0300
parents 766bcbb632ee
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1161
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Andrey Zelenkov
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Roman Arutyunyan
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5 # (C) Nginx, Inc.
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7 # Test for subrequest bug with delay (see 903fb1ddc07f for details).
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9 ###############################################################################
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use warnings;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12 use strict;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14 use Test::More;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16 BEGIN { use FindBin; chdir($FindBin::Bin); }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18 use lib 'lib';
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19 use Test::Nginx;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21 ###############################################################################
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http proxy ssi/)->plan(1);
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28 $t->write_file_expand('nginx.conf', <<'EOF');
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30 %%TEST_GLOBALS%%
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32 daemon off;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34 events {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37 http {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
40 server {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
41 listen 127.0.0.1:8080;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
42 server_name localhost;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
43
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44 location / { }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
45 location /delayed.html {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
46 ssi on;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
47 sendfile_max_chunk 100;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48 postpone_output 0;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51 location /1 {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52 proxy_buffers 3 256;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53 proxy_buffer_size 256;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 proxy_max_temp_file_size 0;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
55 proxy_pass http://127.0.0.1:8081;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60 EOF
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63 $t->write_file('delayed.html', ('x' x 100) . '<!--#include virtual="/1"-->');
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65 $t->run_daemon(\&http_daemon);
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 $t->run()->waitforsocket('127.0.0.1:' . port(8081));
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68 ###############################################################################
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70 # If a response sending is delayed by sendfile_max_chunk, and
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71 # then we've switched to a different subrequest, which is not yet
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72 # ready to handle corresponding write event, wev->delayed won't be
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73 # cleared. This results in the subrequest response not being
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74 # sent to the client, and the whole request will hang if all proxy
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 # buffers will be exhausted. Fixed in 1.11.13 (903fb1ddc07f).
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 like(http_get('/delayed.html'), qr/x{100}y{1024}SEE-THIS/, 'delayed');
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79 ###############################################################################
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
81 sub http_daemon {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 my ($t) = @_;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84 my $server = IO::Socket::INET->new(
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 Proto => 'tcp',
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 LocalHost => '127.0.0.1',
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 LocalPort => port(8081),
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88 Listen => 5,
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89 Reuse => 1
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 )
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
91 or die "Can't create listening socket: $!\n";
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
92
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93 local $SIG{PIPE} = 'IGNORE';
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95 my $data = ('y' x 1024) . 'SEE-THIS';
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97 while (my $client = $server->accept()) {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98 $client->autoflush(1);
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100 my $headers = '';
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
101
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 while (<$client>) {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103 $headers .= $_;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104 last if (/^\x0d?\x0a?$/);
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107 select undef, undef, undef, 0.5;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109 print $client <<EOF;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
110 HTTP/1.1 200 OK
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111 Connection: close
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
113 $data
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114 EOF
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
115 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
116 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
117
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
118 ###############################################################################