Mercurial > hg > nginx-tests
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 |
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 ############################################################################### |