annotate h2_request_body_js.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 efd082b4aa9c
children 5ac6efbe5552
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1592
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for HTTP/2 request body with njs subrequest in the body handler.
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use Test::Nginx::HTTP2;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 ###############################################################################
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v2/)
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 daemon off;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 events {
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 }
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 http {
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 js_include test.js;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server {
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 listen 127.0.0.1:8080 http2;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 server_name localhost;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 lingering_close off;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 location / {
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 js_content sr_body;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 add_header X-Body $request_body;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 }
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 location /sr { }
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 }
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 }
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 EOF
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 $t->write_file('test.js', <<EOF);
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 function body_fwd_cb(r) {
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 r.parent.return(r.status, r.responseBody);
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 }
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 function sr_body(r) {
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 r.subrequest('/sr', body_fwd_cb);
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 }
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 EOF
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 $t->write_file('sr', 'SEE-THIS');
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 $t->try_run('no njs available')->plan(3);
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 ###############################################################################
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 local $TODO = 'not yet' unless $t->has_version('1.19.3');
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 $t->todo_alerts() unless $t->has_version('1.19.3');
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 my $s = Test::Nginx::HTTP2->new();
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 my $sid = $s->new_stream({ body => 'TEST' });
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 is($frame->{headers}->{':status'}, 200, 'status');
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 is($frame->{headers}->{'x-body'}, 'TEST', 'request body');
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 is($frame->{data}, 'SEE-THIS', 'response body');
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 $t->stop();
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89
efd082b4aa9c Tests: HTTP/2 tests for posted requests after reading body.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 ###############################################################################