annotate http_keepalive.t @ 1943:1786f49cca17

Tests: fixed spurious http_resolver_ipv4.t failures. Previously, to get resolved addresses, the test relied on cached random rotation in resolver, such that a chosen address is eventually changed, which may not happen after several client requests. For this reason, the test is rewritten to get all addresses by switching to the next upstream.
author Sergey Kandaurov <pluknet@nginx.com>
date Mon, 22 Jan 2024 14:11:12 +0400
parents 5ac6efbe5552
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Andrey Zelenkov
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6 # Tests for http keepalive directives.
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8 ###############################################################################
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use warnings;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use strict;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13 use Test::More;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15 use IO::Select;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17 BEGIN { use FindBin; chdir($FindBin::Bin); }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19 use lib 'lib';
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20 use Test::Nginx;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22 ###############################################################################
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24 select STDERR; $| = 1;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25 select STDOUT; $| = 1;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
26
1667
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
27 my $t = Test::Nginx->new()->has(qw/http/)
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28 ->write_file_expand('nginx.conf', <<'EOF');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30 %%TEST_GLOBALS%%
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32 daemon off;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34 events {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37 http {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39
1663
bf69dcabb856 Tests: $sent_http_keep_alive tests (ticket #1850).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1509
diff changeset
40 log_format test1 $sent_http_connection;
bf69dcabb856 Tests: $sent_http_keep_alive tests (ticket #1850).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1509
diff changeset
41 log_format test2 $sent_http_keep_alive;
bf69dcabb856 Tests: $sent_http_keep_alive tests (ticket #1850).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1509
diff changeset
42 access_log %%TESTDIR%%/test1.log test1 if=$arg_l;
bf69dcabb856 Tests: $sent_http_keep_alive tests (ticket #1850).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1509
diff changeset
43 access_log %%TESTDIR%%/test2.log test2 if=$arg_l;
1509
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
44
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
45 server {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
46 listen 127.0.0.1:8080;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
47 server_name localhost;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49 keepalive_requests 2;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50 keepalive_timeout 1 9;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51
1668
0c1bd4c23c95 Tests: $connection_requests and $connection_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1667
diff changeset
52 add_header X-Conn $connection_requests:$connection_time;
0c1bd4c23c95 Tests: $connection_requests and $connection_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1667
diff changeset
53
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 location / { }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
55 location /r {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 keepalive_requests 4;
1665
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
57 keepalive_timeout 30s;
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59
1667
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
60 location /time {
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
61 keepalive_requests 100;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
62 keepalive_timeout 75s;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
63 keepalive_time 1s;
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
64 }
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
65
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 location /safari {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67 keepalive_disable safari;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70 location /none {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71 keepalive_disable none;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74 location /zero {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 keepalive_timeout 0;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80 EOF
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
81
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 $t->write_file('index.html', '');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83 $t->write_file('r', '');
1667
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
84 $t->write_file('time', '');
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 $t->write_file('safari', '');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 $t->write_file('none', '');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 $t->write_file('zero', '');
1693
5ac6efbe5552 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1670
diff changeset
88 $t->run()->plan(21);
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 ###############################################################################
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
91
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
92 # keepalive_requests
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94 like(http_keepalive('/'), qr/Connection: keep-alive/, 'keepalive request');
1509
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
95 is(count_keepalive(http_keepalive('/?l=ok', req => 2)), 1, 'keepalive limit');
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96 is(count_keepalive(http_keepalive('/r', req => 3)), 3, 'keepalive merge');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97 is(count_keepalive(http_keepalive('/r', req => 5)), 3, 'keepalive merge limit');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99 # keepalive_disable
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
101 like(http_keepalive('/', method => 'POST', ua => "MSIE 5.0"),
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 qr/Connection: close/, 'keepalive disable msie6');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103 like(http_keepalive('/', ua => "MSIE 5.0"), qr/Connection: keep-alive/,
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104 'keepalive disable msie6 GET');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105 like(http_keepalive('/', method => 'POST', ua => "MSIE 7.0"),
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106 qr/Connection: keep-alive/, 'keepalive disable msie6 modern');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107 like(http_keepalive('/', ua => "Mac OS X Safari/7534.48.3"),
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108 qr/Connection: keep-alive/, 'keepalive disable msie6 safari');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109 like(http_keepalive('/safari', ua => "Mac OS X Safari/7534.48.3"),
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
110 qr/Connection: close/, 'keepalive disable safari');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111 like(http_keepalive('/none', method => 'POST', ua => "MSIE 5.0"),
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112 qr/Connection: keep-alive/, 'keepalive disable none');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
113
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114 # keepalive_timeout
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
115
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
116 my $r = http_keepalive('/', req => 2, sleep => 2.1);
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
117 is(count_keepalive($r), 1, 'keepalive timeout request');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
118 like($r, qr/Keep-Alive: timeout=9/, 'keepalive timeout header');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
119
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
120 like(http_keepalive('/zero'), qr/Connection: close/, 'keepalive timeout 0');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
121
1667
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
122 # keepalive_time
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
123
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
124 $r = http_keepalive('/time', req => 3);
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
125 is(() = $r =~ /(200 OK)/g, 3, 'keepalive time requests');
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
126 unlike($r, qr/Connection: close/, 'keepalive time connection');
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
127
1670
489484af31eb Tests: adjusted keepalive_time test timeout.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1668
diff changeset
128 $r = http_keepalive('/time', req => 3, sleep => 1.2);
1667
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
129 is(() = $r =~ /(200 OK)/g, 2, 'keepalive time limit requests');
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
130 like($r, qr/Connection: close/, 'keepalive time limit connection');
bdebd63dbab3 Tests: keepalive_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1665
diff changeset
131
1668
0c1bd4c23c95 Tests: $connection_requests and $connection_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1667
diff changeset
132 like($r, qr/X-Conn: 1:0.*X-Conn: 2:[^0]/s, 'keepalive time limit variables');
0c1bd4c23c95 Tests: $connection_requests and $connection_time tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1667
diff changeset
133
1665
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
134 # cancel keepalive on EOF while discarding body
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
135
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
136 my $s = http(<<EOF, start => 1);
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
137 POST /r HTTP/1.1
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
138 Host: localhost
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
139 Content-Length: 10
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
140
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
141 EOF
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
142
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
143 read_keepalive($s);
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
144 shutdown($s, 1);
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
145
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
146 ok(IO::Select->new($s)->can_read(3), 'EOF in discard body');
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
147
1509
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
148 $t->stop();
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
149
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
150 TODO: {
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
151 local $TODO = 'not yet';
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
152
1663
bf69dcabb856 Tests: $sent_http_keep_alive tests (ticket #1850).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1509
diff changeset
153 is($t->read_file('test1.log'), "keep-alive\nclose\n", 'sent_http_connection');
bf69dcabb856 Tests: $sent_http_keep_alive tests (ticket #1850).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1509
diff changeset
154 is($t->read_file('test2.log'), "timeout=9\n-\n", 'sent_http_keep_alive');
1509
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
155
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
156 }
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
157
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
158 ###############################################################################
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
159
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
160 sub http_keepalive {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
161 my ($url, %opts) = @_;
1508
1a409a166420 Tests: fixed http_keepalive.t with short reads and double logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1361
diff changeset
162 my $total = '';
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
163
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
164 $opts{ua} = $opts{ua} || '';
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
165 $opts{req} = $opts{req} || 1;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
166 $opts{sleep} = $opts{sleep} || 0;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
167 $opts{method} = $opts{method} || 'GET';
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
168
1166
2b8523bd4988 Tests: handled broken connections in http_keepalive.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1023
diff changeset
169 local $SIG{PIPE} = 'IGNORE';
2b8523bd4988 Tests: handled broken connections in http_keepalive.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1023
diff changeset
170
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
171 my $s = http('', start => 1);
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
172
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
173 for my $i (1 .. $opts{req}) {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
174
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
175 my $sleep = ($i == 1 ? $opts{sleep} : 0);
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
176
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
177 http(<<EOF, socket => $s, start => 1, sleep => $sleep);
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
178 $opts{method} $url HTTP/1.1
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
179 Host: localhost
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
180 User-Agent: $opts{ua}
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
181
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
182 EOF
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
183
1665
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
184 $total .= read_keepalive($s);
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
185 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
186
1508
1a409a166420 Tests: fixed http_keepalive.t with short reads and double logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1361
diff changeset
187 return $total;
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
188 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
189
1665
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
190 sub read_keepalive {
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
191 my ($s) = @_;
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
192 my $data = '';
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
193
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
194 while (IO::Select->new($s)->can_read(3)) {
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
195 sysread($s, my $buffer, 4096) or last;
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
196 $data .= $buffer;
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
197 last if $data =~ /^\x0d\x0a/ms;
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
198 }
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
199
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
200 log_in($data);
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
201 return $data;
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
202 }
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
203
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
204 sub count_keepalive {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
205 my ($str) = @_;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
206 return $str =~ s/Connection: keep-alive//g;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
207 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
208
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
209 ###############################################################################