annotate h2_proxy_request_buffering_redirect.t @ 1606:e4e0695552ed

Tests: fixed stream_proxy_ssl_conf_command.t. The stream_proxy_ssl_conf_command.t test used stream return module to return the response. Since this ignores actual request, but the perl test code used http_get(). This might result in the request being sent after the response is returned and the connection closed by the server, resulting in RST being generated and no response seen by the client at all. Fix is to use "stream(...)->read()" instead of http_get(), so no request is sent at all, eliminating possibility of RST being generated.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 10 Nov 2020 05:03:29 +0300
parents 03f8fb9f6492
children 5ac6efbe5552
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1498
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for HTTP/2 protocol with unbuffered request body.
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use Test::Nginx::HTTP2;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 ###############################################################################
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite/)->plan(1);
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28 $t->write_file_expand('nginx.conf', <<'EOF')->run();
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30 %%TEST_GLOBALS%%
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32 daemon off;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 events {
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 }
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 http {
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 server {
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 listen 127.0.0.1:8080 http2;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 listen 127.0.0.1:8081;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 server_name localhost;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 proxy_http_version 1.1;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 location / {
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 proxy_request_buffering off;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 proxy_pass http://127.0.0.1:8081/bad;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 proxy_intercept_errors on;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 error_page 502 = /pass;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 }
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 location /bad {
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 return 502;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 }
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 location /pass {
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 proxy_pass http://127.0.0.1:8081/good;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 }
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 location /good {
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 limit_rate 100;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 return 200;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 }
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 }
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 }
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 EOF
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 ###############################################################################
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 # unbuffered request body
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74
1504
03f8fb9f6492 Tests: fixed h2_proxy_request_buffering_redirect.t on old versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1498
diff changeset
75 SKIP: {
03f8fb9f6492 Tests: fixed h2_proxy_request_buffering_redirect.t on old versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1498
diff changeset
76 skip 'leaves coredump', 1 unless $t->has_version('1.17.4')
03f8fb9f6492 Tests: fixed h2_proxy_request_buffering_redirect.t on old versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1498
diff changeset
77 or $ENV{TEST_NGINX_UNSAFE};
03f8fb9f6492 Tests: fixed h2_proxy_request_buffering_redirect.t on old versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1498
diff changeset
78
1498
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 TODO: {
1504
03f8fb9f6492 Tests: fixed h2_proxy_request_buffering_redirect.t on old versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1498
diff changeset
80 local $TODO = 'not yet' unless $t->has_version('1.17.4');
03f8fb9f6492 Tests: fixed h2_proxy_request_buffering_redirect.t on old versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1498
diff changeset
81
03f8fb9f6492 Tests: fixed h2_proxy_request_buffering_redirect.t on old versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1498
diff changeset
82 $t->todo_alerts() unless $t->has_version('1.17.4');
1498
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 my $s = Test::Nginx::HTTP2->new();
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 my $sid = $s->new_stream({ body_more => 1 });
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 $s->h2_body('SEE-', { body_more => 1 });
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 sleep 1;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 $s->h2_body('THIS');
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 is($frame->{headers}->{':status'}, 200, 'discard body rest on redirect');
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 }
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
1504
03f8fb9f6492 Tests: fixed h2_proxy_request_buffering_redirect.t on old versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1498
diff changeset
97 }
03f8fb9f6492 Tests: fixed h2_proxy_request_buffering_redirect.t on old versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1498
diff changeset
98
1498
63a74974a0e9 Tests: HTTP/2 unbuffered request body with redirect (ticket #1819).
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 ###############################################################################