annotate http_keepalive.t @ 1665:a40f94bc92d4

Tests: keepalive test with EOF in discard body (ticket #2145).
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 24 Mar 2021 14:13:49 +0300
parents bf69dcabb856
children bdebd63dbab3
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
1665
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
27 my $t = Test::Nginx->new()->has(qw/http/)->plan(16)
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
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52 location / { }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53 location /r {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 keepalive_requests 4;
1665
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
55 keepalive_timeout 30s;
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 location /safari {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59 keepalive_disable safari;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62 location /none {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63 keepalive_disable none;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 location /zero {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67 keepalive_timeout 0;
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 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72 EOF
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 $t->write_file('index.html', '');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 $t->write_file('r', '');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76 $t->write_file('safari', '');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 $t->write_file('none', '');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78 $t->write_file('zero', '');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79 $t->run();
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80
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
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83 # keepalive_requests
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 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
86 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
87 is(count_keepalive(http_keepalive('/r', req => 3)), 3, 'keepalive merge');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88 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
89
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 # keepalive_disable
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 like(http_keepalive('/', method => 'POST', ua => "MSIE 5.0"),
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93 qr/Connection: close/, 'keepalive disable msie6');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94 like(http_keepalive('/', ua => "MSIE 5.0"), qr/Connection: keep-alive/,
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95 'keepalive disable msie6 GET');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96 like(http_keepalive('/', method => 'POST', ua => "MSIE 7.0"),
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97 qr/Connection: keep-alive/, 'keepalive disable msie6 modern');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98 like(http_keepalive('/', ua => "Mac OS X Safari/7534.48.3"),
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99 qr/Connection: keep-alive/, 'keepalive disable msie6 safari');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100 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
101 qr/Connection: close/, 'keepalive disable safari');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 like(http_keepalive('/none', method => 'POST', ua => "MSIE 5.0"),
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103 qr/Connection: keep-alive/, 'keepalive disable none');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105 # keepalive_timeout
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107 my $r = http_keepalive('/', req => 2, sleep => 2.1);
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108 is(count_keepalive($r), 1, 'keepalive timeout request');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109 like($r, qr/Keep-Alive: timeout=9/, 'keepalive timeout header');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
110
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111 like(http_keepalive('/zero'), qr/Connection: close/, 'keepalive timeout 0');
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112
1665
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
113 # 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
114
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
115 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
116 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
117 Host: localhost
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
118 Content-Length: 10
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
119
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
120 EOF
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
121
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
122 read_keepalive($s);
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
123 shutdown($s, 1);
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
124
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
125 TODO: {
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
126 local $TODO = 'not yet' unless ($^O eq 'MSWin32' or $^O eq 'solaris')
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
127 or $t->has_version('1.19.9');
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
128
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
129 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
130
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
131 }
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
132
1509
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
133 $t->stop();
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
134
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
135 TODO: {
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
136 local $TODO = 'not yet';
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
137
1663
bf69dcabb856 Tests: $sent_http_keep_alive tests (ticket #1850).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1509
diff changeset
138 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
139 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
140
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
141 }
1603f2bad385 Tests: $sent_http_connection tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1508
diff changeset
142
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
143 ###############################################################################
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
144
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
145 sub http_keepalive {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
146 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
147 my $total = '';
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
148
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
149 $opts{ua} = $opts{ua} || '';
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
150 $opts{req} = $opts{req} || 1;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
151 $opts{sleep} = $opts{sleep} || 0;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
152 $opts{method} = $opts{method} || 'GET';
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
153
1166
2b8523bd4988 Tests: handled broken connections in http_keepalive.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1023
diff changeset
154 local $SIG{PIPE} = 'IGNORE';
2b8523bd4988 Tests: handled broken connections in http_keepalive.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1023
diff changeset
155
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
156 my $s = http('', start => 1);
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
157
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
158 for my $i (1 .. $opts{req}) {
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 my $sleep = ($i == 1 ? $opts{sleep} : 0);
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
161
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
162 http(<<EOF, socket => $s, start => 1, sleep => $sleep);
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
163 $opts{method} $url HTTP/1.1
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
164 Host: localhost
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
165 User-Agent: $opts{ua}
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
166
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
167 EOF
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
168
1665
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
169 $total .= read_keepalive($s);
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
170 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
171
1508
1a409a166420 Tests: fixed http_keepalive.t with short reads and double logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1361
diff changeset
172 return $total;
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
173 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
174
1665
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
175 sub read_keepalive {
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
176 my ($s) = @_;
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
177 my $data = '';
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
178
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
179 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
180 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
181 $data .= $buffer;
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
182 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
183 }
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
184
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
185 log_in($data);
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
186 return $data;
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
187 }
a40f94bc92d4 Tests: keepalive test with EOF in discard body (ticket #2145).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1663
diff changeset
188
1023
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
189 sub count_keepalive {
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
190 my ($str) = @_;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
191 return $str =~ s/Connection: keep-alive//g;
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
192 }
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
193
8533222fcfc1 Tests: http keepalive tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
194 ###############################################################################