Mercurial > hg > nginx-tests
annotate http_expect_100_continue.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 | 882267679006 |
children |
rev | line source |
---|---|
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Tests for Expect: 100-continue support. |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 use Test::More; |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 BEGIN { use FindBin; chdir($FindBin::Bin); } |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 use lib 'lib'; |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 use Test::Nginx; |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 ############################################################################### |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 select STDERR; $| = 1; |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 select STDOUT; $| = 1; |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 |
505
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
24 my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(5); |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 $t->write_file_expand('nginx.conf', <<'EOF'); |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
28 %%TEST_GLOBALS%% |
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
29 |
249
6a0d934950bc
Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents:
166
diff
changeset
|
30 daemon off; |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 events { |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 } |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 http { |
107
1c0ec30614c6
Tests: add TEST_GLOBALS and TEST_GLOBALS_HTTP config chunks.
Maxim Dounin <mdounin@mdounin.ru>
parents:
64
diff
changeset
|
36 %%TEST_GLOBALS_HTTP%% |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
39 listen 127.0.0.1:8080; |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 server_name localhost; |
63
53eff3a83886
Tests: fix expect-100-continue for 0.7.31.
Maxim Dounin <mdounin@mdounin.ru>
parents:
55
diff
changeset
|
41 location / { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
42 proxy_pass http://127.0.0.1:8080/local; |
63
53eff3a83886
Tests: fix expect-100-continue for 0.7.31.
Maxim Dounin <mdounin@mdounin.ru>
parents:
55
diff
changeset
|
43 } |
53eff3a83886
Tests: fix expect-100-continue for 0.7.31.
Maxim Dounin <mdounin@mdounin.ru>
parents:
55
diff
changeset
|
44 location /local { |
53eff3a83886
Tests: fix expect-100-continue for 0.7.31.
Maxim Dounin <mdounin@mdounin.ru>
parents:
55
diff
changeset
|
45 } |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 } |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 } |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 EOF |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 $t->run(); |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 ############################################################################### |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 |
491
d5bf5942a8b2
Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents:
332
diff
changeset
|
55 like(http_100_request('/', '1.1'), qr/ 100 /, 'expect 100 continue'); |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 |
505
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
57 # Comparison of expectation values is case-insensitive for unquoted tokens. |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
58 |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
59 like(http_100_request('/', '1.1', '100-Continue'), qr/ 100 /, |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
60 'expect 100 continue case-insensitive'); |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
61 |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 # From RFC 2616, 8.2.3 Use of the 100 (Continue) Status: |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 # |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 # - An origin server SHOULD NOT send a 100 (Continue) response if |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 # the request message does not include an Expect request-header |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 # field with the "100-continue" expectation, and MUST NOT send a |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 # 100 (Continue) response if such a request comes from an HTTP/1.0 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 # (or earlier) client. |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 |
491
d5bf5942a8b2
Tests: disambiguated parsing of the status code.
Sergey Kandaurov <pluknet@nginx.com>
parents:
332
diff
changeset
|
70 unlike(http_100_request('/', '1.0'), qr/ 100 /, 'no 100 continue via http 1.0'); |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 |
505
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
72 # From RFC 2616, 14.20 Expect: |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
73 # |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
74 # A server that does not understand or is unable to comply with any of |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
75 # the expectation values in the Expect field of a request MUST respond |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
76 # with appropriate error status. The server MUST respond with a 417 |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
77 # (Expectation Failed) status if any of the expectations cannot be met. |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
78 # |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
79 # <..> If a server receives a request containing an |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
80 # Expect field that includes an expectation-extension that it does not |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
81 # support, it MUST respond with a 417 (Expectation Failed) status. |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
82 |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
83 TODO: { |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
84 local $TODO = 'not yet'; |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
85 |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
86 like(http_100_request('/', '1.1', 'unknown'), qr/ 417 /, 'unknown expectation'); |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
87 like(http_100_request('/', '1.1', 'token=param'), qr/ 417 /, |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
88 'unsupported expectation extension'); |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
89 |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
90 } |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
91 |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 ############################################################################### |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 sub http_100_request { |
505
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
95 my ($url, $version, $value) = @_; |
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
96 $value = '100-continue' unless defined $value; |
925
6bb1f2ccd386
Tests: removed unused variables.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
505
diff
changeset
|
97 http(<<EOF); |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 POST $url HTTP/$version |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 Host: localhost |
505
9592b440ab00
Tests: more tests for Expect header.
Sergey Kandaurov <pluknet@nginx.com>
parents:
491
diff
changeset
|
100 Expect: $value |
53
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 Content-Length: 0 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 Connection: close |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 EOF |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 } |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 |
c8a816c678e1
Tests: add tests for Expect header handling.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 ############################################################################### |