annotate h2_server_push.t @ 1289:1e00ba2882cb

Tests: removed h2_server_push.t TODO, fixed in 3d2b0b02bd3d.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 21 Feb 2018 19:39:38 +0300
parents b575be896b99
children ecbd984ffe04
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
1284
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite gzip/)
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
1284
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
137 $t->try_run('no http2_push')->plan(41);
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
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141 # preload & format
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143 my $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144 my $sid = $s->new_stream({ path => '/preload' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145 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
146
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147 my ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148 ok($frame, 'push promise');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149 is($frame->{headers}->{':authority'}, 'localhost', 'authority');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150 is($frame->{headers}->{':scheme'}, 'http', 'scheme');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151 is($frame->{headers}->{':method'}, 'GET', 'method');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 is($frame->{headers}->{':path'}, '/push', 'path');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153 is($frame->{flags}, 4, 'flags');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154 is($frame->{promised}, 2, 'promised stream');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} eq 2 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 is($frame->{data}, 'PROMISED', 'promised stream payload');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 ($frame) = grep { $_->{type} eq "HEADERS" && $_->{sid} eq $sid } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 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
161
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163 $sid = $s->new_stream({ path => '/preload2' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164 $frames = $s->read(all => [{ sid => 8, fin => 1 }], wait => 0.5);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 4, 'preload 2');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168 $sid = $s->new_stream({ path => '/preload/many' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169 $frames = $s->read(all => [{ sid => 8, fin => 1 }], wait => 0.5);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 3, 'preload many');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 # preload proxy
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175 $sid = $s->new_stream({ path => '/preload/proxy' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 $frames = $s->read(all => [{ sid => 8, fin => 1 }], wait => 0.5);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177 is(grep({ $_->{type} eq "PUSH_PROMISE" } @$frames), 2, 'preload proxy');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 # both h2_push & preload
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182 $sid = $s->new_stream({ path => '/both' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 $frames = $s->read(all => [{ sid => 8, fin => 1 }], wait => 0.5);
1282
fd281e3a3df5 Tests: better test names in h2_server_push.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1281
diff changeset
184 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
185
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186 # h2_push
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189 $sid = $s->new_stream({ path => '/expl' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190 $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
191
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192 ($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
193 ok($frame, 'h2_push only');
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195 # h2_push off
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 $sid = $s->new_stream({ path => '/expl/off' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 $frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2);
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 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202 ok(!$frame, 'h2_push off');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204 # h2_push $var
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
205
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
206 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207 $sid = $s->new_stream({ path => '/arg?push=/push' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208 $frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
210 ok($frame, 'h2_push variable');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
211
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212 $sid = $s->new_stream({ path => '/arg?push=' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
213 $frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
214 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
215 ok(!$frame, 'h2_push variable empty');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
216
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
217 $sid = $s->new_stream({ path => '/arg?push=off' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
218 $frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
219 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
220 ok(!$frame, 'h2_push variable off');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
221
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
222 $sid = $s->new_stream({ path => '/arg?push=foo' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
223 $frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
224 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
225 ok(!$frame, 'h2_push variable relative path');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
226
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
227 # SETTINGS_ENABLE_PUSH
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
228
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
229 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
230 $s->h2_settings(0, 0x2 => 0);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
231 $sid = $s->new_stream({ path => '/expl' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
232 $frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
233
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
234 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
235 ok(!$frame, 'push setting disabled');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
236
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
237 $s->h2_settings(0, 0x2 => 1);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
238 $sid = $s->new_stream({ path => '/expl' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
239 $frames = $s->read(all => [{ sid => $sid, fin => 1 }, { sid => 2, fin => 1 }]);
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 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
242 ok($frame, 'push setting enabled');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
243
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
244 $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
245 $frames = $s->read(all => [{ type => 'GOAWAY' }]);
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
246
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
247 ($frame) = grep { $_->{type} =~ "GOAWAY" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
248 is($frame->{'code'}, 1, 'push setting invalid - GOAWAY protocol error');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
249 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
250
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
251 # SETTINGS_MAX_CONCURRENT_STREAMS
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
252
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
253 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
254 $sid = $s->new_stream({ path => '/expl' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
255 $frames = $s->read(all => [
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
256 { sid => 1, fin => 1 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
257 { sid => 2, fin => 1 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
258 { sid => 4, fin => 1 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
259 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
260
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
261 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
262 $s->h2_settings(0, 0x3 => 1);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
263 $sid = $s->new_stream({ path => '/expl' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
264 $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
265 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
266
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
267 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
268 $s->h2_settings(0, 0x3 => 0);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
269 $sid = $s->new_stream({ path => '/expl' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
270 $frames = $s->read(all => [{ type => 'PUSH_PROMISE' }], wait => 0.2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
271 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
272
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
273 TODO: {
1285
aaf332b74bcf Tests: handled "aio threads" in h2_server_push.t as well.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1284
diff changeset
274 local $TODO = 'not yet' if $t->read_file('nginx.conf') =~ /aio on/
aaf332b74bcf Tests: handled "aio threads" in h2_server_push.t as well.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1284
diff changeset
275 or $t->read_file('nginx.conf') =~ /aio threads/;
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
276
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
277 # server push flow control & rst
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
278
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
279 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
280 $sid = $s->new_stream({ path => '/explf' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
281 $frames = $s->read(all => [
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
282 { sid => 1, fin => 1 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
283 { sid => 2, length => 5 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
284 { sid => 4, fin => 4 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
285
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
286 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
287 is($frame->{length}, 5, 'flow control - pushed stream limited');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
288 is($frame->{flags}, 0, 'flow control - pushed stream flags');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
289
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
290 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 4 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
291 ok(!$frame, 'flow control - no window for next stream');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
292
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
293 # window update
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 $s->h2_window(2);
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 $frames = $s->read(all => [{ length => 2 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
298 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
299 is($frame->{length}, 2, 'window update');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
300
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
301 # client refused stream
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 $s->h2_rst(4, 7);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
304 $s->h2_window(2**16);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
305
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
306 $frames = $s->read(all => [{ sid => 2, length => 1 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
307 push @$frames, @{ $s->read(all => [{ sid => 4, fin => 1 }], wait => 0.5) };
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
308
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
309 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 2 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
310 is($frame->{length}, 1, 'pushed response flow control');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
311 is($frame->{flags}, 1, 'pushed response END_STREAM');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
312
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
313 }
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
314
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
315 ($frame) = grep { $_->{type} eq "DATA" && $_->{sid} == 4 } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
316 ok(!$frame, 'rst pushed stream');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
317
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
318 TODO: {
1285
aaf332b74bcf Tests: handled "aio threads" in h2_server_push.t as well.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1284
diff changeset
319 local $TODO = 'not yet' if $t->read_file('nginx.conf') =~ /aio on/
aaf332b74bcf Tests: handled "aio threads" in h2_server_push.t as well.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1284
diff changeset
320 or $t->read_file('nginx.conf') =~ /aio threads/;
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
321
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
322 # priority
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
323
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
324 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
325 $sid = $s->new_stream({ path => '/prio' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
326 $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
327
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
328 $s->h2_priority(16, 2, 4);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
329
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
330 $s->h2_window(2**17, 2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
331 $s->h2_window(2**17, 4);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
332 $s->h2_window(2**17);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
333
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
334 $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
335 my @data = grep { $_->{type} eq "DATA" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
336 is(join(' ', map { $_->{sid} } @data), "4 2", 'priority 1');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
337
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
338 $s = Test::Nginx::HTTP2->new();
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
339 $sid = $s->new_stream({ path => '/prio' });
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
340 $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
341
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
342 $s->h2_priority(16, 4, 2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
343
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
344 $s->h2_window(2**17, 2);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
345 $s->h2_window(2**17, 4);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
346 $s->h2_window(2**17);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
347
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
348 $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
349 @data = grep { $_->{type} eq "DATA" } @$frames;
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
350 is(join(' ', map { $_->{sid} } @data), "2 4", 'priority 2');
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
351
1280
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
352 }
8a88c0d6f80a Tests: TODO HTTP/2 server push flow control tests with "aio on".
Sergey Kandaurov <pluknet@nginx.com>
parents: 1279
diff changeset
353
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
354 # http2_max_concurrent_pushes
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
355
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
356 $s = Test::Nginx::HTTP2->new(port(8082));
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
357 $sid = $s->new_stream({ headers => [
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
358 { name => ':method', value => 'GET', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
359 { name => ':scheme', value => 'http', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
360 { name => ':path', value => '/', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
361 { name => ':authority', value => 'max_pushes', mode => 1 }]});
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
362 $frames = $s->read(all => [{ sid => $sid, fin => 1 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
363 { sid => 2, fin => 1 }, { sid => 4, fin => 1 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
364 push @$frames, @{ $s->read(all => [{ sid => 6, fin => 1 }], wait => 0.2) };
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
365 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
366
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
367 $s = Test::Nginx::HTTP2->new(port(8082));
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
368 $s->h2_settings(0, 0x3 => 1);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
369 $sid = $s->new_stream({ headers => [
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
370 { name => ':method', value => 'GET', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
371 { name => ':scheme', value => 'http', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
372 { name => ':path', value => '/', mode => 0 },
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
373 { name => ':authority', value => 'max_pushes', mode => 1 }]});
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
374 $frames = $s->read(all => [{ sid => $sid, fin => 1 }, { sid => 2, fin => 1 }]);
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
375 push @$frames, @{ $s->read(all => [{ sid => 4, fin => 1 }], wait => 0.2) };
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
1279
da2ad1d72bb6 Tests: HTTP/2 server push.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
410 ###############################################################################
1284
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
411
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
412 sub gunzip_like {
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
413 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
414
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
415 SKIP: {
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
416 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
417 Test::More::skip(
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
418 "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
419
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
420 my $out;
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
421
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
422 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
423
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
424 if ($in =~ $re) {
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
425 fail($name);
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
426 return;
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
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
429 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
430 }
52873012ab26 Tests: added HTTP/2 server push tests with gzip (ticket #1478).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1283
diff changeset
431 }
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 ###############################################################################