Mercurial > hg > nginx-tests
annotate h2_server_push.t @ 1571:1b4ceab9cb1c
Tests: fixed ssl_certificate.t with LibreSSL client.
Net::SSLeay::connect() that manages TLS handshake could return unexpected
error when receiving server alert, as seen in server certificate tests if
it could not been selected. Typically, it returns the expected error -1,
but with certain libssl implementations it can be 0, as explained below.
The error is propagated from libssl's SSL_connect(), which is usually -1.
In modern OpenSSL versions, it is the default error code used in the state
machine returned when something went wrong with parsing TLS message header.
In versions up to OpenSSL 1.0.2, with SSLv23_method() used by default, -1
is the only error code in the ssl_connect() method implementation which is
used as well if receiving alert while parsing ServerHello. BoringSSL also
seems to return -1. But it is not so with LibreSSL that returns zero.
Previously, tests failed with client built with LibreSSL with SSLv3 removed.
Here, the error is propagated directly from ssl_read_bytes() method, which
is always implemented as ssl3_read_bytes() in all TLS methods. It could be
also seen with OpenSSL up to 1.0.2 with non-default methods explicitly set.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 29 May 2020 23:10:20 +0300 |
parents | 144c6ce732e4 |
children | f7170c7acf3a |
rev | line source |
---|---|
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Tests for HTTP/2 server push. |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 use lib 'lib'; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 use Test::Nginx; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use Test::Nginx::HTTP2; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 ############################################################################### |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 |
1381
97c8280de681
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1348
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite gzip/)->plan(42) |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 ->write_file_expand('nginx.conf', <<'EOF'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
28 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 %%TEST_GLOBALS%% |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 daemon off; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 events { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 http { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 %%TEST_GLOBALS_HTTP%% |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 server { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 listen 127.0.0.1:8080 http2; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 listen 127.0.0.1:8081; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 server_name localhost; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 location /prio { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 http2_push /t1; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 http2_push /t2; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
47 return 204; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 location /expl { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 http2_push /push; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 http2_push /push2; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 location /expl/off { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 http2_push off; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 location /preload { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 http2_push_preload on; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 add_header Link "</push>; rel=preload"; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 add_header X-Link $sent_http_link; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 return 200 SEE-THIS; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
64 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 location /preload2 { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 http2_push_preload on; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 add_header Link "</push>; rel=preload"; # valid |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 add_header Link "</push2 >; rel=preload"; # valid |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 add_header Link "</push3>; rel=preloadX"; # not |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 add_header Link '</push4>; rel="preload"'; # valid |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 add_header Link '</push5>; rel="preloadX"'; # not |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 add_header Link "</push6>; rel=preload; nopush"; # not |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 add_header Link '</push7>; rel="foo"'; # not |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 add_header Link '</push7>; rel="foo preload"'; # valid |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 return 200 SEE-THIS; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
77 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
78 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
79 location /preload/many { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
80 http2_push_preload on; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 add_header Link "</push>; rel=preload, </push2>; rel=preload"; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
82 add_header Link "</push3>, </push4>; rel=preload"; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 return 200 SEE-THIS; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
86 location /preload/proxy { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
87 http2_push_preload on; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 proxy_pass http://127.0.0.1:8081/proxied; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
90 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
91 location /proxied { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
92 add_header Link "</push>; rel=preload"; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 add_header Link "</push2>; rel=preload"; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
94 return 200 SEE-THIS; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
95 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
96 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 location /both { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 http2_push /push; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
99 http2_push_preload on; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
100 add_header Link "</push>; rel=preload"; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
101 return 200 SEE-THIS; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
104 location /arg { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
105 http2_push $arg_push; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
106 return 204; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
107 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 location /push { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 return 200 PROMISED; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
111 } |
1284
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
112 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
113 location /gzip.html { |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
114 gzip on; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
115 gzip_min_length 0; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
116 return 200 PROMISED; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
117 } |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
118 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
119 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
120 server { |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
121 listen 127.0.0.1:8082 http2; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 server_name max_pushes; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
123 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
124 http2_max_concurrent_pushes 2; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
125 http2_push /push; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
126 http2_push /push; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
127 http2_push /push; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
128 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
129 } |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
130 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
131 EOF |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
132 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
133 $t->write_file('t1', join('', map { sprintf "X%04dXXX", $_ } (1 .. 8202))); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
134 $t->write_file('t2', 'SEE-THIS'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
135 $t->write_file('explf', join('', map { sprintf "X%06dXXX", $_ } (1 .. 6553))); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
136 |
1381
97c8280de681
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1348
diff
changeset
|
137 $t->run(); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
138 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
139 ############################################################################### |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
140 |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
141 # 6.6. PUSH_PROMISE |
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
142 # PUSH_PROMISE frames MUST only be sent on a peer-initiated stream that |
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
143 # is in either the "open" or "half-closed (remote)" state. |
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
144 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
145 # preload & format |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
146 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
147 my $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
148 my $sid = $s->new_stream({ path => '/preload' }); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
149 my $frames = $s->read(all => [{ sid => 1, fin => 1 }, { sid => 2, fin => 1 }]); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
150 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
151 my ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
152 ok($frame, 'push promise'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
153 is($frame->{headers}->{':authority'}, 'localhost', 'authority'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
154 is($frame->{headers}->{':scheme'}, 'http', 'scheme'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
155 is($frame->{headers}->{':method'}, 'GET', 'method'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
156 is($frame->{headers}->{':path'}, '/push', 'path'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
157 is($frame->{flags}, 4, 'flags'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
158 is($frame->{promised}, 2, 'promised stream'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
159 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
160 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} eq 2 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
161 is($frame->{data}, 'PROMISED', 'promised stream payload'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
162 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 ($frame) = grep { $_->{type} eq "HEADERS" && $_->{sid} eq $sid } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 is($frame->{headers}->{'x-link'}, '</push>; rel=preload', 'sent_http_link'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
165 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 $sid = $s->new_stream({ path => '/preload2' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
168 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
169 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 4, 'preload 2'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
170 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
171 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
172 $sid = $s->new_stream({ path => '/preload/many' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
173 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
174 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 3, 'preload many'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
175 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
176 # preload proxy |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
177 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
178 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
179 $sid = $s->new_stream({ path => '/preload/proxy' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
180 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
181 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'preload proxy'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
182 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
183 # both h2_push & preload |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
184 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
185 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
186 $sid = $s->new_stream({ path => '/both' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
187 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1282
fd281e3a3df5
Tests: better test names in h2_server_push.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1281
diff
changeset
|
188 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'h2_push and preload'); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
189 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
190 # h2_push |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
191 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
192 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
193 $sid = $s->new_stream({ path => '/expl' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
194 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
195 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
196 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
1282
fd281e3a3df5
Tests: better test names in h2_server_push.t.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1281
diff
changeset
|
197 ok($frame, 'h2_push only'); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
198 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
199 # h2_push off |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
200 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
201 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
202 $sid = $s->new_stream({ path => '/expl/off' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
203 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
204 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
205 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
206 ok(!$frame, 'h2_push off'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
207 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
208 # h2_push $var |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
209 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
210 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
211 $sid = $s->new_stream({ path => '/arg?push=/push' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
212 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
213 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
214 ok($frame, 'h2_push variable'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
215 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
216 $sid = $s->new_stream({ path => '/arg?push=' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
217 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
218 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
219 ok(!$frame, 'h2_push variable empty'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
220 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
221 $sid = $s->new_stream({ path => '/arg?push=off' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
222 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
223 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
224 ok(!$frame, 'h2_push variable off'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
225 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
226 $sid = $s->new_stream({ path => '/arg?push=foo' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
227 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
228 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
229 ok(!$frame, 'h2_push variable relative path'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
230 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
231 # SETTINGS_ENABLE_PUSH |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
232 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
233 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
234 $s->h2_settings(0, 0x2 => 0); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
235 $sid = $s->new_stream({ path => '/expl' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
236 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
237 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
238 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
239 ok(!$frame, 'push setting disabled'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
240 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
241 $s->h2_settings(0, 0x2 => 1); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
242 $sid = $s->new_stream({ path => '/expl' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
243 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
244 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
245 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
246 ok($frame, 'push setting enabled'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
247 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
248 $s->h2_settings(0, 0x2 => 42); |
1281
5bbade306a0d
Tests: unbreak h2_server_push.t on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1280
diff
changeset
|
249 $frames = $s->read(all => [{ type => 'GOAWAY' }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
250 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
251 ($frame) = grep { $_->{type} =~ "GOAWAY" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
252 is($frame->{'code'}, 1, 'push setting invalid - GOAWAY protocol error'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
253 cmp_ok($frame->{'last_sid'}, '<', 5, 'push setting invalid - last sid'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
254 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
255 # SETTINGS_MAX_CONCURRENT_STREAMS |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
256 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
257 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
258 $sid = $s->new_stream({ path => '/expl' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
259 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
260 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'max pushes default'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
261 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
262 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
263 $s->h2_settings(0, 0x3 => 1); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
264 $sid = $s->new_stream({ path => '/expl' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
265 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
266 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 1, 'max pushes limited'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
267 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
268 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
269 $s->h2_settings(0, 0x3 => 0); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
270 $sid = $s->new_stream({ path => '/expl' }); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
271 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
272 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 0, 'max pushes disabled'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
273 |
1280
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
274 TODO: { |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
275 todo_skip 'long tests with aio', 6 unless $ENV{TEST_NGINX_UNSAFE} |
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
276 or $t->read_file('nginx.conf') !~ /aio (on|threads)/; |
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
277 local $TODO = 'not yet' if $t->read_file('nginx.conf') =~ /aio (on|threads)/; |
1280
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
278 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
279 # server push flow control & rst |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
280 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
281 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
282 $sid = $s->new_stream({ path => '/explf' }); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
283 $frames = $s->read(all => [ |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
284 { sid => 1, fin => 1 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
285 { sid => 2, length => 5 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
286 { sid => 4, fin => 4 }]); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
287 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
288 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
289 is($frame->{length}, 5, 'flow control - pushed stream limited'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
290 is($frame->{flags}, 0, 'flow control - pushed stream flags'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
291 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
292 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 4 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
293 ok(!$frame, 'flow control - no window for next stream'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
294 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
295 # window update |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
296 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
297 $s->h2_window(2); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
298 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
299 $frames = $s->read(all => [{ length => 2 }]); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
300 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
301 is($frame->{length}, 2, 'window update'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
302 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
303 # client refused stream |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
304 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
305 $s->h2_rst(4, 7); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
306 $s->h2_window(2**16); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
307 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
308 $frames = $s->read(all => [{ sid => 2, length => 1 }]); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
309 push @$frames, @{ $s->read(all => [{ sid => 4, fin => 1 }], wait => 0.2) }; |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
310 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
311 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
312 is($frame->{length}, 1, 'pushed response flow control'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
313 is($frame->{flags}, 1, 'pushed response END_STREAM'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
314 |
1280
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
315 } |
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
316 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
317 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 4 } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
318 ok(!$frame, 'rst pushed stream'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
319 |
1280
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
320 TODO: { |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
321 todo_skip 'long tests with aio', 2 unless $ENV{TEST_NGINX_UNSAFE} |
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
322 or $t->read_file('nginx.conf') !~ /aio (on|threads)/; |
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
323 local $TODO = 'not yet' if $t->read_file('nginx.conf') =~ /aio (on|threads)/; |
1280
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
324 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
325 # priority |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
326 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
327 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
328 $sid = $s->new_stream({ path => '/prio' }); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
329 $frames = $s->read(all => [{ length => 2**16 - 1 }, { sid => 4, fin => 4 }]); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
330 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
331 $s->h2_priority(16, 2, 4); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
332 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
333 $s->h2_window(2**17, 2); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
334 $s->h2_window(2**17, 4); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
335 $s->h2_window(2**17); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
336 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
337 $frames = $s->read(all => [{ sid => 2, fin => 1 }, { sid => 4, fin => 1 }]); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
338 my @data = grep { $_->{type} eq "DATA" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
339 is(join(' ', map { $_->{sid} } @data), "4 2", 'priority 1'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
340 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
341 $s = Test::Nginx::HTTP2->new(); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
342 $sid = $s->new_stream({ path => '/prio' }); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
343 $frames = $s->read(all => [{ length => 2**16 - 1 }, { sid => 4, fin => 4 }]); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
344 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
345 $s->h2_priority(16, 4, 2); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
346 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
347 $s->h2_window(2**17, 2); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
348 $s->h2_window(2**17, 4); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
349 $s->h2_window(2**17); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
350 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
351 $frames = $s->read(all => [{ sid => 2, fin => 1 }, { sid => 4, fin => 1 }]); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
352 @data = grep { $_->{type} eq "DATA" } @$frames; |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
353 is(join(' ', map { $_->{sid} } @data), "2 4", 'priority 2'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
354 |
1280
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
355 } |
8a88c0d6f80a
Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents:
1279
diff
changeset
|
356 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
357 # http2_max_concurrent_pushes |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
358 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
359 $s = Test::Nginx::HTTP2->new(port(8082)); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
360 $sid = $s->new_stream({ headers => [ |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
361 { name => ':method', value => 'GET', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
362 { name => ':scheme', value => 'http', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
363 { name => ':path', value => '/', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
364 { name => ':authority', value => 'max_pushes', mode => 1 }]}); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
365 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
366 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'http2 max pushes lim'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
367 |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
368 $s = Test::Nginx::HTTP2->new(port(8082)); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
369 $s->h2_settings(0, 0x3 => 1); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
370 $sid = $s->new_stream({ headers => [ |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
371 { name => ':method', value => 'GET', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
372 { name => ':scheme', value => 'http', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
373 { name => ':path', value => '/', mode => 0 }, |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
374 { name => ':authority', value => 'max_pushes', mode => 1 }]}); |
1348
8cb66a4d3ca2
Tests: fixed HTTP/2 server push expectations, adjusted TODO.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1340
diff
changeset
|
375 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
376 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 1, 'http2 max pushes 2'); |
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
377 |
1283
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
378 # missing request header ':authority' |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
379 |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
380 $s = Test::Nginx::HTTP2->new(port(8082)); |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
381 $sid = $s->new_stream({ headers => [ |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
382 { name => ':method', value => 'GET', mode => 0 }, |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
383 { name => ':scheme', value => 'http', mode => 0 }, |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
384 { name => ':path', value => '/', mode => 0 }]}); |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
385 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
386 |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
387 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
388 is($frame->{headers}->{':status'}, 400, 'incomplete headers'); |
16f091962811
Tests: added h2_server_push.t test for missing ':authority'.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1282
diff
changeset
|
389 |
1284
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
390 # gzip tests |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
391 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
392 $s = Test::Nginx::HTTP2->new(); |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
393 $sid = $s->new_stream({ headers => [ |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
394 { name => ':method', value => 'GET', mode => 0 }, |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
395 { name => ':scheme', value => 'http', mode => 0 }, |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
396 { name => ':path', value => '/arg?push=/gzip.html' }, |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
397 { name => ':authority', value => 'localhost', mode => 1 }, |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
398 { name => 'accept-encoding', value => 'gzip' }]}); |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
399 $frames = $s->read(all => [{ sid => 2, fin => 1 }]); |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
400 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
401 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" && $_->{sid} == $sid } @$frames; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
402 is($frame->{headers}->{'accept-encoding'}, 'gzip', 'gzip - push promise'); |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
403 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
404 ($frame) = grep { $_->{type} eq "HEADERS" && $_->{sid} == 2 } @$frames; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
405 is($frame->{headers}->{'content-encoding'}, 'gzip', 'gzip - headers'); |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
406 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
407 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
408 gunzip_like($frame->{data}, qr/^PROMISED\Z/, 'gzip - response'); |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
409 |
1327
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
410 # scheme https |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
411 |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
412 $s = Test::Nginx::HTTP2->new(); |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
413 $sid = $s->new_stream({ headers => [ |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
414 { name => ':method', value => 'GET', mode => 0 }, |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
415 { name => ':scheme', value => 'https', mode => 0 }, |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
416 { name => ':path', value => '/preload' }, |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
417 { name => ':authority', value => 'localhost', mode => 1 }]}); |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
418 $frames = $s->read(all => [{ sid => 2, fin => 1 }]); |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
419 |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
420 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" && $_->{sid} == $sid } @$frames; |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
421 is($frame->{headers}->{':scheme'}, 'https', 'scheme https'); |
ecbd984ffe04
Tests: added HTTP/2 test for server push with original scheme.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1289
diff
changeset
|
422 |
1279
da2ad1d72bb6
Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
423 ############################################################################### |
1284
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
424 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
425 sub gunzip_like { |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
426 my ($in, $re, $name) = @_; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
427 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
428 SKIP: { |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
429 eval { require IO::Uncompress::Gunzip; }; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
430 Test::More::skip( |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
431 "IO::Uncompress::Gunzip not installed", 1) if $@; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
432 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
433 my $out; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
434 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
435 IO::Uncompress::Gunzip::gunzip(\$in => \$out); |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
436 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
437 if ($in =~ $re) { |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
438 fail($name); |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
439 return; |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
440 } |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
441 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
442 like($out, $re, $name); |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
443 } |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
444 } |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
445 |
52873012ab26
Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents:
1283
diff
changeset
|
446 ############################################################################### |