annotate ssi_delayed.t @ 1215:26884729e06b

Tests: cope with resolver resend in mail resolver tests. Currently, if resolver didn't find PTR type in the answer section of PTR response, it keeps the node in the resend queue until the next timer event.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 31 Aug 2017 19:09:04 +0300
parents e1225e304e46
children 766bcbb632ee
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 TODO: {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71 local $TODO = 'not yet' unless $t->has_version('1.11.13');
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73 # 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
74 # 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
75 # 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
76 # cleared. This results in the subrequest response not being
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 # 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
78 # buffers will be exhausted. Fixed in 1.11.13 (903fb1ddc07f).
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 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
81
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 }
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 ###############################################################################
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 sub http_daemon {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 my ($t) = @_;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89 my $server = IO::Socket::INET->new(
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 Proto => 'tcp',
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
91 LocalHost => '127.0.0.1',
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
92 LocalPort => port(8081),
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93 Listen => 5,
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94 Reuse => 1
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95 )
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96 or die "Can't create listening socket: $!\n";
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98 local $SIG{PIPE} = 'IGNORE';
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 $data = ('y' x 1024) . 'SEE-THIS';
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 (my $client = $server->accept()) {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103 $client->autoflush(1);
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105 my $headers = '';
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 while (<$client>) {
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108 $headers .= $_;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109 last if (/^\x0d?\x0a?$/);
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
110 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112 select undef, undef, undef, 0.5;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
113
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114 print $client <<EOF;
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
115 HTTP/1.1 200 OK
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
116 Connection: close
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 $data
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
119 EOF
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
120 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
121 }
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
122
e1225e304e46 Tests: special test with subrequest.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
123 ###############################################################################