annotate spdy.t @ 431:05c46688b54b

Tests: ssl_password_file.t fixes. Make sure to always specify listen socket in all servers as the default vary (under root, nginx will try to listen on 80). Make sure to detect if an https request was processed by http.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 09 Jul 2014 05:19:51 +0400
parents 89f7a882d692
children cc4697d6bd16
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for SPDY protocol version 3.1.
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 use IO::Select;
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
16 use Socket qw/ CRLF /;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 BEGIN { use FindBin; chdir($FindBin::Bin); }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 use lib 'lib';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 use Test::Nginx;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 ###############################################################################
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 select STDERR; $| = 1;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 select STDOUT; $| = 1;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28 eval {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 require Compress::Raw::Zlib;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30 Compress::Raw::Zlib->Z_OK;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 Compress::Raw::Zlib->Z_SYNC_FLUSH;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32 Compress::Raw::Zlib->Z_NO_COMPRESSION;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 Compress::Raw::Zlib->WANT_GZIP_OR_ZLIB;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 };
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 plan(skip_all => 'Compress::Raw::Zlib not installed') if $@;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 plan(skip_all => 'win32') if $^O eq 'MSWin32';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
38 my $t = Test::Nginx->new()
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
39 ->has(qw/http proxy cache limit_conn rewrite spdy realip/);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40
428
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
41 $t->plan(76)->write_file_expand('nginx.conf', <<'EOF');
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 %%TEST_GLOBALS%%
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 daemon off;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 events {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 http {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 %%TEST_GLOBALS_HTTP%%
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 proxy_cache_path %%TESTDIR%%/cache keys_zone=NAME:10m;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 limit_conn_zone $binary_remote_addr zone=conn:1m;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 server {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 listen 127.0.0.1:8080 spdy;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 listen 127.0.0.1:8081;
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
59 listen 127.0.0.1:8082 proxy_protocol spdy;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 server_name localhost;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 location /s {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 add_header X-Header X-Foo;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 return 200 'body';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 }
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
66 location /pp {
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
67 set_real_ip_from 127.0.0.1/32;
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
68 real_ip_header proxy_protocol;
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
69 alias %%TESTDIR%%/t2.html;
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
70 add_header X-PP $remote_addr;
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
71 }
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 location /spdy {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 return 200 $spdy;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 location /prio {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 return 200 $spdy_request_priority;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 location /chunk_size {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 spdy_chunk_size 1;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 return 200 'body';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 location /redirect {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 error_page 405 /s;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 return 405;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 location /proxy {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 add_header X-Body "$request_body";
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 proxy_pass http://127.0.0.1:8081/;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 proxy_cache NAME;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 proxy_cache_valid 1m;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 }
428
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
92 location /proxy_buffering_off {
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
93 proxy_pass http://127.0.0.1:8081/;
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
94 proxy_cache NAME;
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
95 proxy_cache_valid 1m;
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
96 proxy_buffering off;
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
97 }
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 location /t3.html {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 limit_conn conn 1;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 EOF
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 $t->run();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 # file size is slightly beyond initial window size: 2**16 + 80 bytes
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110 $t->write_file('t1.html',
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 join('', map { sprintf "X%04dXXX", $_ } (1 .. 8202)));
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 $t->write_file('t2.html', 'SEE-THIS');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 $t->write_file('t3.html', 'SEE-THIS');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 my %cframe = (
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 2 => \&syn_reply,
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118 3 => \&rst_stream,
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 4 => \&settings,
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120 6 => \&ping,
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 7 => \&goaway,
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122 9 => \&window_update
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 );
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 ###############################################################################
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 # PING
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 my $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130 spdy_ping($sess, 0x12345678);
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
131 my $frames = spdy_read($sess, all => [{ type => 'PING' }]);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133 my ($frame) = grep { $_->{type} eq "PING" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134 ok($frame, 'PING frame');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135 is($frame->{value}, 0x12345678, 'PING payload');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
137 # GET
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140 my $sid1 = spdy_stream($sess, { path => '/s' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144 ok($frame, 'SYN_REPLAY frame');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145 is($frame->{sid}, $sid1, 'SYN_REPLAY stream');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
146 is($frame->{headers}->{':status'}, 200, 'SYN_REPLAY status');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147 is($frame->{headers}->{'x-header'}, 'X-Foo', 'SYN_REPLAY header');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150 ok($frame, 'DATA frame');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151 is($frame->{length}, length 'body', 'DATA length');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 is($frame->{data}, 'body', 'DATA payload');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154 # GET in new SPDY stream in same session
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156 my $sid2 = spdy_stream($sess, { path => '/s' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 $frames = spdy_read($sess, all => [{ sid => $sid2, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 is($frame->{sid}, $sid2, 'SYN_REPLAY stream 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 is($frame->{headers}->{':status'}, 200, 'SYN_REPLAY status 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 is($frame->{headers}->{'x-header'}, 'X-Foo', 'SYN_REPLAY header 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 ok($frame, 'DATA frame 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166 is($frame->{sid}, $sid2, 'SYN_REPLAY stream 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167 is($frame->{length}, length 'body', 'DATA length 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168 is($frame->{data}, 'body', 'DATA payload 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170 # HEAD
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173 $sid1 = spdy_stream($sess, { path => '/s', method => 'HEAD' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177 is($frame->{sid}, $sid1, 'SYN_REPLAY stream HEAD');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178 is($frame->{headers}->{':status'}, 200, 'SYN_REPLAY status HEAD');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 is($frame->{headers}->{'x-header'}, 'X-Foo', 'SYN_REPLAY header HEAD');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182 is($frame, undef, 'HEAD no body');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
184 # GET with PROXY protocol
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
185
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
186 my $proxy = 'PROXY TCP4 192.0.2.1 192.0.2.2 1234 5678' . CRLF;
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
187 $sess = new_session(8082, proxy => $proxy);
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
188 $sid1 = spdy_stream($sess, { path => '/pp' });
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
189 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
190
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
191 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
192 ok($frame, 'PROXY SYN_REPLAY frame');
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
193 is($frame->{headers}->{'x-pp'}, '192.0.2.1', 'PROXY remote addr');
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
194
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195 # request header
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 $sid1 = spdy_stream($sess, { path => '/t1.html',
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 headers => { "range" => "bytes=10-19" }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200 });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204 is($frame->{headers}->{':status'}, 206, 'SYN_REPLAY status range');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
205
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
206 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207 is($frame->{length}, 10, 'DATA length range');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208 is($frame->{data}, '002XXXX000', 'DATA payload range');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
210 # $spdy
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
211
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
213 $sid1 = spdy_stream($sess, { path => '/spdy' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
214 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
215
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
216 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
217 is($frame->{data}, '3.1', 'spdy variable');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
218
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
219 # spdy_chunk_size=1
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
220
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
221 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
222 $sid1 = spdy_stream($sess, { path => '/chunk_size' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
223 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
224
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
225 my @data = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
226 is(@data, 4, 'chunk_size body chunks');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
227 is($data[0]->{data}, 'b', 'chunk_size body 1');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
228 is($data[1]->{data}, 'o', 'chunk_size body 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
229 is($data[2]->{data}, 'd', 'chunk_size body 3');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
230 is($data[3]->{data}, 'y', 'chunk_size body 4');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
231
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
232 # redirect
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
233
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
234 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
235 $sid1 = spdy_stream($sess, { path => '/redirect' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
236 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
237
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
238 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
239 is($frame->{headers}->{':status'}, 405, 'SYN_REPLAY status with redirect');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
240
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
241 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
242 ok($frame, 'DATA frame with redirect');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
243 is($frame->{data}, 'body', 'DATA payload with redirect');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
244
428
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
245 # SYN_REPLY could be received with fin, followed by DATA
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
246
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
247 $sess = new_session();
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
248 $sid1 = spdy_stream($sess, { path => '/proxy/t2.html', method => 'HEAD' });
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
249
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
250 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
251 push @$frames, $_ for @{spdy_read($sess, all => [{ sid => $sid1 }])};
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
252 ok(!grep ({ $_->{type} eq "DATA" } @$frames), 'proxy cache HEAD - no body');
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
253
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
254 # ensure that HEAD-like requests, i.e., without response body, do not lead to
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
255 # client connection close due to cache filling up with upstream response body
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
256
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
257 TODO: {
429
89f7a882d692 Tests: spdy.t TODO updated.
Maxim Dounin <mdounin@mdounin.ru>
parents: 428
diff changeset
258 local $TODO = 'premature client connection close'
89f7a882d692 Tests: spdy.t TODO updated.
Maxim Dounin <mdounin@mdounin.ru>
parents: 428
diff changeset
259 unless $t->has_version('1.7.3');
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
260
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
261 $sid2 = spdy_stream($sess, { path => '/' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
262 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
263 ok(grep ({ $_->{type} eq "SYN_REPLY" } @$frames), 'proxy cache headers only');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
264
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
265 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
266
428
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
267 # HEAD on empty cache with proxy_buffering off
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
268
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
269 $sess = new_session();
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
270 $sid1 = spdy_stream($sess,
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
271 { path => '/proxy_buffering_off/t2.html?1', method => 'HEAD' });
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
272
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
273 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
274 push @$frames, $_ for @{spdy_read($sess, all => [{ sid => $sid1 }])};
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
275 ok(!grep ({ $_->{type} eq "DATA" } @$frames),
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
276 'proxy cache HEAD buffering off - no body');
e95c3340d94a Tests: more SPDY tests for caching HEAD requests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 427
diff changeset
277
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
278 # simple proxy cache test
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
279
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
280 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
281 $sid1 = spdy_stream($sess, { path => '/proxy/t2.html' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
282 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
283
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
284 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
285 is($frame->{headers}->{':status'}, '200 OK', 'proxy cache unconditional');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
286
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
287 $sid2 = spdy_stream($sess, { path => '/proxy/t2.html',
416
5c25acbc870a Tests: etags support is present in all supported branches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 397
diff changeset
288 headers => { "if-none-match" => $frame->{headers}->{'etag'} }
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
289 });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
290 $frames = spdy_read($sess, all => [{ sid => $sid2, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
291
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
292 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
293 is($frame->{headers}->{':status'}, 304, 'proxy cache conditional');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
294
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
295 # request body (uses proxied response)
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
296
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
297 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
298 $sid1 = spdy_stream($sess, { path => '/proxy/t2.html', body => 'TEST' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
299 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
300
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
301 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
302 is($frame->{headers}->{'x-body'}, 'TEST', 'request body');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
303
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
304 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
305 is($frame->{length}, length 'SEE-THIS', 'proxied response length');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
306 is($frame->{data}, 'SEE-THIS', 'proxied response');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
307
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
308 # WINDOW_UPDATE (client side)
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
309
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
310 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
311 $sid1 = spdy_stream($sess, { path => '/t1.html' });
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
312 $frames = spdy_read($sess, all => [{ sid => $sid1, length => 2**16 }]);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
313
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
314 @data = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
315 my $sum = eval join '+', map { $_->{length} } @data;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
316 is($sum, 2**16, 'iws - stream blocked on initial window size');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
317
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
318 spdy_ping($sess, 0xf00ff00f);
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
319 $frames = spdy_read($sess, all => [{ type => 'PING' }]);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
320
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
321 ($frame) = grep { $_->{type} eq "PING" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
322 ok($frame, 'iws - PING not blocked');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
323
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
324 spdy_window($sess, 2**16, $sid1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
325 $frames = spdy_read($sess);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
326 is(@$frames, 0, 'iws - updated stream window');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
327
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
328 spdy_window($sess, 2**16);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
329 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
330
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
331 @data = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
332 $sum = eval join '+', map { $_->{length} } @data;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
333 is($sum, 80, 'iws - updated connection window');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
334
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
335 # SETTINGS (initial window size, client side)
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
336
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
337 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
338 spdy_settings($sess, 7 => 2**17);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
339 spdy_window($sess, 2**17);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
340
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
341 $sid1 = spdy_stream($sess, { path => '/t1.html' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
342 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
343
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
344 @data = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
345 $sum = eval join '+', map { $_->{length} } @data;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
346 is($sum, 2**16 + 80, 'increased initial window size');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
347
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
348 # probe for negative available space in a flow control window
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
349
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
350 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
351 $sid1 = spdy_stream($sess, { path => '/t1.html' });
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
352 spdy_read($sess, all => [{ sid => $sid1, length => 2**16 }]);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
353
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
354 spdy_window($sess, 1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
355 spdy_settings($sess, 7 => 42);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
356 spdy_window($sess, 1024, $sid1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
357
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
358 $frames = spdy_read($sess);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
359 is(@$frames, 0, 'negative window - no data');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
360
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
361 spdy_window($sess, 2**16 - 42 - 1024, $sid1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
362 $frames = spdy_read($sess);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
363 is(@$frames, 0, 'zero window - no data');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
364
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
365 spdy_window($sess, 1, $sid1);
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
366 $frames = spdy_read($sess, all => [{ sid => $sid1, length => 1 }]);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
367 is(@$frames, 1, 'positive window - data');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
368 is(@$frames[0]->{length}, 1, 'positive window - data length');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
369
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
370 # stream multiplexing
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
371
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
372 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
373 $sid1 = spdy_stream($sess, { path => '/t1.html' });
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
374 $frames = spdy_read($sess, all => [{ sid => $sid1, length => 2**16 }]);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
375
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
376 @data = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
377 $sum = eval join '+', map { $_->{length} } @data;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
378 is($sum, 2**16, 'multiple - stream1 data');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
379
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
380 $sid2 = spdy_stream($sess, { path => '/t1.html' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
381 $frames = spdy_read($sess, all => [{ sid => $sid2, fin => 0 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
382
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
383 @data = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
384 is(@data, 0, 'multiple - stream2 no data');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
385
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
386 spdy_window($sess, 2**17, $sid1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
387 spdy_window($sess, 2**17, $sid2);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
388 spdy_window($sess, 2**17);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
389
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
390 $frames = spdy_read($sess, all => [
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
391 { sid => $sid1, fin => 1 },
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
392 { sid => $sid2, fin => 1 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
393 ]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
394
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
395 @data = grep { $_->{type} eq "DATA" && $_->{sid} == $sid1 } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
396 $sum = eval join '+', map { $_->{length} } @data;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
397 is($sum, 80, 'multiple - stream1 remain data');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
398
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
399 @data = grep { $_->{type} eq "DATA" && $_->{sid} == $sid2 } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
400 $sum = eval join '+', map { $_->{length} } @data;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
401 is($sum, 2**16 + 80, 'multiple - stream2 full data');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
402
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
403 # request priority parsing in $spdy_request_priority
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
404
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
405 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
406 $sid1 = spdy_stream($sess, { path => '/prio', prio => 0 });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
407 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
408
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
409 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
410 is($frame->{data}, 0, 'priority 0');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
411
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
412 $sid1 = spdy_stream($sess, { path => '/prio', prio => 1 });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
413 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
414
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
415 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
416 is($frame->{data}, 1, 'priority 1');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
417
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
418 $sid1 = spdy_stream($sess, { path => '/prio', prio => 7 });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
419 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
420
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
421 ($frame) = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
422 is($frame->{data}, 7, 'priority 7');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
423
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
424 # stream muliplexing + priority
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
425
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
426 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
427 $sid1 = spdy_stream($sess, { path => '/t1.html', prio => 7 });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
428 $sid2 = spdy_stream($sess, { path => '/t2.html', prio => 0 });
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
429 spdy_read($sess, all => [
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
430 { sid => $sid1, length => 2**16 },
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
431 { sid => $sid2, fin => 0 }
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
432 ]);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
433
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
434 spdy_window($sess, 2**17, $sid1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
435 spdy_window($sess, 2**17, $sid2);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
436 spdy_window($sess, 2**17);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
437
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
438 $frames = spdy_read($sess, all => [
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
439 { sid => $sid1, fin => 1 },
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
440 { sid => $sid2, fin => 1 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
441 ]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
442
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
443 @data = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
444 is(join (' ', map { $_->{sid} } @data), "$sid2 $sid1", 'multiple priority 1');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
445
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
446 # and vice versa
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
447
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
448 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
449 $sid1 = spdy_stream($sess, { path => '/t1.html', prio => 0 });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
450 $sid2 = spdy_stream($sess, { path => '/t2.html', prio => 7 });
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
451 spdy_read($sess, all => [
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
452 { sid => $sid1, length => 2**16 },
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
453 { sid => $sid2, fin => 0 }
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
454 ]);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
455
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
456 spdy_window($sess, 2**17, $sid1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
457 spdy_window($sess, 2**17, $sid2);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
458 spdy_window($sess, 2**17);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
459
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
460 $frames = spdy_read($sess, all => [
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
461 { sid => $sid1, fin => 1 },
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
462 { sid => $sid2, fin => 1 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
463 ]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
464
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
465 @data = grep { $_->{type} eq "DATA" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
466 is(join (' ', map { $_->{sid} } @data), "$sid1 $sid2", 'multiple priority 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
467
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
468 # limit_conn
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
469
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
470 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
471 spdy_settings($sess, 7 => 1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
472 $sid1 = spdy_stream($sess, { path => '/t3.html' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
473 $sid2 = spdy_stream($sess, { path => '/t3.html' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
474 $frames = spdy_read($sess, all => [
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
475 { sid => $sid1, fin => 0 },
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
476 { sid => $sid2, fin => 0 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
477 ]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
478
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
479 ($frame) = grep { $_->{type} eq "SYN_REPLY" && $_->{sid} == $sid1 } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
480 is($frame->{headers}->{':status'}, 200, 'conn_limit 1');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
481
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
482 ($frame) = grep { $_->{type} eq "SYN_REPLY" && $_->{sid} == $sid2 } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
483 is($frame->{headers}->{':status'}, 503, 'conn_limit 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
484
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
485 # limit_conn + client's RST_STREAM
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
486
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
487 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
488 spdy_settings($sess, 7 => 1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
489 $sid1 = spdy_stream($sess, { path => '/t3.html' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
490 spdy_rst($sess, $sid1, 5);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
491 $sid2 = spdy_stream($sess, { path => '/t3.html' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
492 $frames = spdy_read($sess, all => [
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
493 { sid => $sid1, fin => 0 },
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
494 { sid => $sid2, fin => 0 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
495 ]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
496
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
497 ($frame) = grep { $_->{type} eq "SYN_REPLY" && $_->{sid} == $sid1 } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
498 is($frame->{headers}->{':status'}, 200, 'RST_STREAM 1');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
499
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
500 ($frame) = grep { $_->{type} eq "SYN_REPLY" && $_->{sid} == $sid2 } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
501 is($frame->{headers}->{':status'}, 200, 'RST_STREAM 2');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
502
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
503 # GOAWAY on SYN_STREAM with even StreamID
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
504
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
505 TODO: {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
506 local $TODO = 'not yet';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
507
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
508 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
509 spdy_stream($sess, { path => '/s' }, 2);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
510 $frames = spdy_read($sess);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
511
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
512 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
513 ok($frame, 'even stream - GOAWAY frame');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
514 is($frame->{code}, 1, 'even stream - error code');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
515 is($frame->{sid}, 0, 'even stream - last used stream');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
516
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
517 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
518
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
519 # GOAWAY on SYN_STREAM with backward StreamID
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
520
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
521 TODO: {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
522 local $TODO = 'not yet';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
523
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
524 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
525 $sid1 = spdy_stream($sess, { path => '/s' }, 3);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
526 spdy_read($sess);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
527
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
528 $sid2 = spdy_stream($sess, { path => '/s' }, 1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
529 $frames = spdy_read($sess);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
530
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
531 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
532 ok($frame, 'backward stream - GOAWAY frame');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
533 is($frame->{code}, 1, 'backward stream - error code');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
534 is($frame->{sid}, $sid1, 'backward stream - last used stream');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
535
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
536 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
537
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
538 # RST_STREAM on the second SYN_STREAM with same StreamID
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
539
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
540 TODO: {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
541 local $TODO = 'not yet';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
542
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
543 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
544 $sid1 = spdy_stream($sess, { path => '/s' }, 3);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
545 spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
546 $sid2 = spdy_stream($sess, { path => '/s' }, 3);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
547 $frames = spdy_read($sess);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
548
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
549 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
550 ok($frame, 'dup stream - RST_STREAM frame');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
551 is($frame->{code}, 1, 'dup stream - error code');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
552 is($frame->{sid}, $sid1, 'dup stream - stream');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
553
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
554 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
555
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
556 # awkward protocol version
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
557
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
558 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
559 $sid1 = spdy_stream($sess, { path => '/s', version => 'HTTP/1.10' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
560 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
561
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
562 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
563 is($frame->{headers}->{':status'}, 200, 'awkward version');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
564
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
565 # missing mandatory request header
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
566
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
567 $sess = new_session();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
568 $sid1 = spdy_stream($sess, { path => '/s', version => '' });
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
569 $frames = spdy_read($sess, all => [{ sid => $sid1, fin => 1 }]);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
570
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
571 ($frame) = grep { $_->{type} eq "SYN_REPLY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
572 is($frame->{headers}->{':status'}, 400, 'incomplete headers');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
573
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
574 # GOAWAY before closing a connection by server
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
575
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
576 $t->stop();
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
577
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
578 TODO: {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
579 local $TODO = 'not yet';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
580
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
581 $frames = spdy_read($sess);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
582
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
583 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
584 ok($frame, 'GOAWAY on connection close');
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
585
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
586 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
587
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
588 ###############################################################################
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
589
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
590 sub spdy_ping {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
591 my ($sess, $payload) = @_;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
592
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
593 raw_write($sess->{socket}, pack("N3", 0x80030006, 0x4, $payload));
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
594 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
595
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
596 sub spdy_rst {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
597 my ($sess, $sid, $error) = @_;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
598
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
599 raw_write($sess->{socket}, pack("N4", 0x80030003, 0x8, $sid, $error));
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
600 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
601
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
602 sub spdy_window {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
603 my ($sess, $win, $stream) = @_;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
604
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
605 $stream = 0 unless defined $stream;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
606 raw_write($sess->{socket}, pack("N4", 0x80030009, 8, $stream, $win));
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
607 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
608
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
609 sub spdy_settings {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
610 my ($sess, %extra) = @_;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
611
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
612 my $cnt = keys %extra;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
613 my $len = 4 + 8 * $cnt;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
614
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
615 my $buf = pack "N3", 0x80030004, $len, $cnt;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
616 $buf .= join '', map { pack "N2", $_, $extra{$_} } keys %extra;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
617 raw_write($sess->{socket}, $buf);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
618 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
619
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
620 sub spdy_read {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
621 my ($sess, %extra) = @_;
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
622 my ($length, @got);
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
623 my $s = $sess->{socket};
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
624 my $buf = '';
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
625
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
626 eval {
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
627 local $SIG{ALRM} = sub { die "timeout\n" };
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
628 local $SIG{PIPE} = sub { die "sigpipe\n" };
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
629 again:
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
630 alarm(1);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
631
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
632 $buf = raw_read($s, $buf, 8);
379
f42de3a9fd74 Tests: avoid uninitialized warnings in spdy.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 377
diff changeset
633
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
634 my $type = unpack("B", $buf);
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
635 $length = 8 + hex unpack("x5 H6", $buf);
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
636 $buf = raw_read($s, $buf, $length);
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
637
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
638 if ($type == 0) {
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
639 push @got, dframe($buf);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
640
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
641 } else {
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
642 my $ctype = unpack("x2 n", $buf);
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
643 push @got, $cframe{$ctype}($sess, $buf);
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
644 }
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
645 $buf = substr($buf, $length);
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
646
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
647 goto again if test_fin($got[-1], $extra{all});
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
648 alarm(0);
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
649 };
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
650 alarm(0);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
651 return \@got;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
652 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
653
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
654 sub test_fin {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
655 my ($frame, $all) = @_;
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
656 my @test = @{$all};
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
657
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
658 # wait for the specified DATA length
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
659
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
660 for (@test) {
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
661 if ($_->{length} && $frame->{type} eq 'DATA') {
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
662 # check also for StreamID if needed
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
663
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
664 if (!$_->{sid} || $_->{sid} == $frame->{sid}) {
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
665 $_->{length} -= $frame->{length};
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
666 }
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
667 }
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
668 }
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
669 @test = grep { !(defined $_->{length} && $_->{length} == 0) } @test;
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
670
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
671 # wait for the fin flag
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
672
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
673 @test = grep { !(defined $_->{fin}
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
674 && $_->{sid} == $frame->{sid} && $_->{fin} == $frame->{fin})
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
675 } @test if defined $frame->{fin};
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
676
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
677 # wait for the specified frame
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
678
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
679 @test = grep { !($_->{type} && $_->{type} eq $frame->{type}) } @test;
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
680
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
681 @{$all} = @test;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
682 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
683
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
684 sub dframe {
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
685 my ($buf) = @_;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
686 my %frame;
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
687 my $skip = 0;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
688
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
689 my $stream = unpack "\@$skip B32", $buf; $skip += 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
690 substr($stream, 0, 1) = 0;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
691 $stream = unpack("N", pack("B32", $stream));
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
692 $frame{sid} = $stream;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
693
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
694 my $flags = unpack "\@$skip B8", $buf; $skip += 1;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
695 $frame{fin} = substr($flags, 7, 1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
696
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
697 my $length = hex (unpack "\@$skip H6", $buf); $skip += 3;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
698 $frame{length} = $length;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
699
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
700 $frame{data} = substr($buf, $skip, $length);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
701 $frame{type} = "DATA";
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
702 return \%frame;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
703 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
704
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
705 sub spdy_stream {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
706 my ($ctx, $uri, $stream) = @_;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
707 my ($input, $output, $buf);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
708 my ($d, $status);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
709
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
710 my $host = $uri->{host} || '127.0.0.1:8080';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
711 my $method = $uri->{method} || 'GET';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
712 my $headers = $uri->{headers} || {};
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
713 my $body = $uri->{body};
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
714 my $prio = defined $uri->{prio} ? $uri->{prio} : 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
715 my $version = defined $uri->{version} ? $uri->{version} : "HTTP/1.1";
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
716
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
717 if ($stream) {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
718 $ctx->{last_stream} = $stream;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
719 } else {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
720 $ctx->{last_stream} += 2;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
721 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
722
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
723 $buf = pack("NC", 0x80030001, not $body);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
724 $buf .= pack("xxx"); # Length stub
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
725 $buf .= pack("N", $ctx->{last_stream}); # Stream-ID
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
726 $buf .= pack("N", 0); # Assoc. Stream-ID
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
727 $buf .= pack("n", $prio << 13);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
728
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
729 my $ent = 4 + keys %{$headers};
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
730 $ent++ if $body;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
731 $ent++ if $version;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
732
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
733 $input = pack("N", $ent);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
734 $input .= hpack(":host", $host);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
735 $input .= hpack(":method", $method);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
736 $input .= hpack(":path", $uri->{path});
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
737 $input .= hpack(":scheme", "http");
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
738 if ($version) {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
739 $input .= hpack(":version", $version);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
740 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
741 if ($body) {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
742 $input .= hpack("content-length", length $body);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
743 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
744 $input .= join '', map { hpack($_, $headers->{$_}) } keys %{$headers};
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
745
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
746 $d = $ctx->{zlib}->{d};
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
747 $status = $d->deflate($input => \my $start);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
748 $status == Compress::Raw::Zlib->Z_OK or fail "deflate failed";
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
749 $status = $d->flush(\my $tail => Compress::Raw::Zlib->Z_SYNC_FLUSH);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
750 $status == Compress::Raw::Zlib->Z_OK or fail "flush failed";
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
751 $output = $start . $tail;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
752
426
7cb6af00afdd Tests: fixed SPDY tests with large header length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 425
diff changeset
753 # set length, attach headers and optional body
7cb6af00afdd Tests: fixed SPDY tests with large header length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 425
diff changeset
754
7cb6af00afdd Tests: fixed SPDY tests with large header length.
Sergey Kandaurov <pluknet@nginx.com>
parents: 425
diff changeset
755 $buf |= pack "x4N", length($output) + 10;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
756 $buf .= $output;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
757
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
758 if (defined $body) {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
759 $buf .= pack "NCxn", $ctx->{last_stream}, 0x01, length $body;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
760 $buf .= $body;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
761 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
762
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
763 raw_write($ctx->{socket}, $buf);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
764 return $ctx->{last_stream};
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
765 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
766
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
767 sub syn_reply {
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
768 my ($ctx, $buf) = @_;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
769 my ($i, $status);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
770 my %payload;
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
771 my $skip = 4;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
772
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
773 my $flags = unpack "\@$skip B8", $buf; $skip += 1;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
774 $payload{fin} = substr($flags, 7, 1);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
775
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
776 my $length = hex unpack "\@$skip H6", $buf; $skip += 3;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
777 $payload{length} = $length;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
778 $payload{type} = 'SYN_REPLY';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
779
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
780 my $stream = unpack "\@$skip B32", $buf; $skip += 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
781 substr($stream, 0, 1) = 0;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
782 $stream = unpack("N", pack("B32", $stream));
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
783 $payload{sid} = $stream;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
784
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
785 my $input = substr($buf, $skip, $length - 4);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
786 $i = $ctx->{zlib}->{i};
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
787
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
788 $status = $i->inflate($input => \my $out);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
789 fail "Failed: $status" unless $status == Compress::Raw::Zlib->Z_OK;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
790 $payload{headers} = hunpack($out);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
791 return \%payload;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
792 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
793
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
794 sub rst_stream {
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
795 my ($ctx, $buf) = @_;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
796 my %payload;
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
797 my $skip = 5;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
798
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
799 $payload{length} = hex(unpack "\@$skip H6", $buf); $skip += 3;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
800 $payload{type} = 'RST_STREAM';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
801 $payload{sid} = unpack "\@$skip N", $buf; $skip += 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
802 $payload{code} = unpack "\@$skip N", $buf;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
803 return \%payload;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
804 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
805
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
806 sub settings {
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
807 my ($ctx, $buf) = @_;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
808 my %payload;
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
809 my $skip = 4;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
810
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
811 $payload{flags} = unpack "\@$skip H", $buf; $skip += 1;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
812 $payload{length} = hex(unpack "\@$skip H6", $buf); $skip += 3;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
813 $payload{type} = 'SETTINGS';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
814
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
815 my $nent = unpack "\@$skip N", $buf; $skip += 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
816 for (1 .. $nent) {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
817 my $flags = hex unpack "\@$skip H2", $buf; $skip += 1;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
818 my $id = hex unpack "\@$skip H6", $buf; $skip += 3;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
819 $payload{$id}{flags} = $flags;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
820 $payload{$id}{value} = unpack "\@$skip N", $buf; $skip += 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
821 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
822 return \%payload;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
823 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
824
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
825 sub ping {
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
826 my ($ctx, $buf) = @_;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
827 my %payload;
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
828 my $skip = 5;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
829
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
830 $payload{length} = hex(unpack "\@$skip H6", $buf); $skip += 3;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
831 $payload{type} = 'PING';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
832 $payload{value} = unpack "\@$skip N", $buf;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
833 return \%payload;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
834 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
835
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
836 sub goaway {
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
837 my ($ctx, $buf) = @_;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
838 my %payload;
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
839 my $skip = 5;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
840
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
841 $payload{length} = hex unpack "\@$skip H6", $buf; $skip += 3;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
842 $payload{type} = 'GOAWAY';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
843 $payload{sid} = unpack "\@$skip N", $buf; $skip += 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
844 $payload{code} = unpack "\@$skip N", $buf;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
845 return \%payload;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
846 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
847
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
848 sub window_update {
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
849 my ($ctx, $buf) = @_;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
850 my %payload;
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
851 my $skip = 5;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
852
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
853 $payload{length} = hex(unpack "\@$skip H6", $buf); $skip += 3;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
854 $payload{type} = 'WINDOW_UPDATE';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
855
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
856 my $stream = unpack "\@$skip B32", $buf; $skip += 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
857 substr($stream, 0, 1) = 0;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
858 $stream = unpack("N", pack("B32", $stream));
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
859 $payload{sid} = $stream;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
860
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
861 my $value = unpack "\@$skip B32", $buf;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
862 substr($value, 0, 1) = 0;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
863 $payload{wdelta} = unpack("N", pack("B32", $value));
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
864 return \%payload;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
865 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
866
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
867 sub hpack {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
868 my ($name, $value) = @_;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
869
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
870 pack("N", length($name)) . $name . pack("N", length($value)) . $value;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
871 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
872
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
873 sub hunpack {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
874 my ($data) = @_;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
875 my %headers;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
876 my $skip = 0;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
877
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
878 my $nent = unpack "\@$skip N", $data; $skip += 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
879 for (1 .. $nent) {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
880 my $len = unpack("\@$skip N", $data); $skip += 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
881 my $name = unpack("\@$skip A$len", $data); $skip += $len;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
882
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
883 $len = unpack("\@$skip N", $data); $skip += 4;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
884 my $value = unpack("\@$skip A$len", $data); $skip += $len;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
885
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
886 $headers{$name} = $value;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
887 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
888 return \%headers;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
889 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
890
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
891 sub raw_read {
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
892 my ($s, $buf, $len) = @_;
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
893 my $got = '';
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
894
425
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
895 while (length($buf) < $len) {
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
896 $s->sysread($got, $len - length($buf)) or die;
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
897 log_in($got);
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
898 $buf .= $got;
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
899 }
cc7da696a330 Tests: reduced execution time of SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 416
diff changeset
900 return $buf;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
901 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
902
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
903 sub raw_write {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
904 my ($s, $message) = @_;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
905
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
906 local $SIG{PIPE} = 'IGNORE';
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
907
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
908 while (IO::Select->new($s)->can_write(0.4)) {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
909 log_out($message);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
910 my $n = $s->syswrite($message);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
911 last unless $n;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
912 $message = substr($message, $n);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
913 last unless length $message;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
914 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
915 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
916
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
917 sub new_session {
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
918 my ($port, %extra) = @_;
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
919 my ($d, $i, $status, $s);
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
920
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
921 ($d, $status) = Compress::Raw::Zlib::Deflate->new(
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
922 -WindowBits => 12,
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
923 -Dictionary => dictionary(),
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
924 -Level => Compress::Raw::Zlib->Z_NO_COMPRESSION
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
925 );
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
926 fail "Zlib failure: $status" unless $d;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
927
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
928 ($i, $status) = Compress::Raw::Zlib::Inflate->new(
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
929 -WindowBits => Compress::Raw::Zlib->WANT_GZIP_OR_ZLIB,
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
930 -Dictionary => dictionary()
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
931 );
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
932 fail "Zlib failure: $status" unless $i;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
933
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
934 $s = new_socket($port);
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
935
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
936 if ($extra{proxy}) {
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
937 raw_write($s, $extra{proxy});
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
938 }
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
939
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
940 return { zlib => { i => $i, d => $d },
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
941 socket => $s, last_stream => -1 };
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
942 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
943
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
944 sub new_socket {
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
945 my ($port) = @_;
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
946 my $s;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
947
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
948 $port = 8080 unless defined $port;
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
949
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
950 eval {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
951 local $SIG{ALRM} = sub { die "timeout\n" };
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
952 local $SIG{PIPE} = sub { die "sigpipe\n" };
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
953 alarm(2);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
954 $s = IO::Socket::INET->new(
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
955 Proto => 'tcp',
427
daea9cf92c14 Tests: added proxy protocol tests over SPDY.
Sergey Kandaurov <pluknet@nginx.com>
parents: 426
diff changeset
956 PeerAddr => "127.0.0.1:$port",
374
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
957 );
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
958 alarm(0);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
959 };
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
960 alarm(0);
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
961
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
962 if ($@) {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
963 log_in("died: $@");
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
964 return undef;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
965 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
966
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
967 return $s;
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
968 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
969
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
970 sub dictionary {
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
971 join('', (map pack('N/a*', $_), qw(
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
972 options
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
973 head
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
974 post
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
975 put
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
976 delete
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
977 trace
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
978 accept
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
979 accept-charset
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
980 accept-encoding
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
981 accept-language
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
982 accept-ranges
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
983 age
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
984 allow
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
985 authorization
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
986 cache-control
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
987 connection
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
988 content-base
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
989 content-encoding
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
990 content-language
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
991 content-length
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
992 content-location
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
993 content-md5
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
994 content-range
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
995 content-type
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
996 date
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
997 etag
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
998 expect
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
999 expires
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1000 from
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1001 host
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1002 if-match
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1003 if-modified-since
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1004 if-none-match
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1005 if-range
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1006 if-unmodified-since
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1007 last-modified
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1008 location
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1009 max-forwards
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1010 pragma
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1011 proxy-authenticate
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1012 proxy-authorization
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1013 range
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1014 referer
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1015 retry-after
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1016 server
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1017 te
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1018 trailer
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1019 transfer-encoding
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1020 upgrade
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1021 user-agent
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1022 vary
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1023 via
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1024 warning
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1025 www-authenticate
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1026 method
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1027 get
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1028 status), "200 OK",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1029 qw(version HTTP/1.1 url public set-cookie keep-alive origin)),
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1030 "100101201202205206300302303304305306307402405406407408409410",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1031 "411412413414415416417502504505",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1032 "203 Non-Authoritative Information",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1033 "204 No Content",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1034 "301 Moved Permanently",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1035 "400 Bad Request",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1036 "401 Unauthorized",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1037 "403 Forbidden",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1038 "404 Not Found",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1039 "500 Internal Server Error",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1040 "501 Not Implemented",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1041 "503 Service Unavailable",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1042 "Jan Feb Mar Apr May Jun Jul Aug Sept Oct Nov Dec",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1043 " 00:00:00",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1044 " Mon, Tue, Wed, Thu, Fri, Sat, Sun, GMT",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1045 "chunked,text/html,image/png,image/jpg,image/gif,",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1046 "application/xml,application/xhtml+xml,text/plain,",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1047 "text/javascript,public", "privatemax-age=gzip,deflate,",
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1048 "sdchcharset=utf-8charset=iso-8859-1,utf-,*,enq=0."
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1049 );
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1050 }
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1051
ac804fd1eb56 Tests: basic SPDY tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1052 ###############################################################################