annotate h2_server_push.t @ 1585:bff287fbf347

Tests: added proxy_cookie_domain/path tests with "off" parameter.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 23 Jul 2020 12:17:39 +0300
parents 144c6ce732e4
children f7170c7acf3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ###############################################################################