forked from nginx/nginx-tests
-
Notifications
You must be signed in to change notification settings - Fork 0
/
h2_variables.t
134 lines (95 loc) · 3.39 KB
/
h2_variables.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/usr/bin/perl
# (C) Sergey Kandaurov
# (C) Nginx, Inc.
# Tests for HTTP/2 protocol with variables.
###############################################################################
use warnings;
use strict;
use Test::More;
BEGIN { use FindBin; chdir($FindBin::Bin); }
use lib 'lib';
use Test::Nginx;
use Test::Nginx::HTTP2;
###############################################################################
select STDERR; $| = 1;
select STDOUT; $| = 1;
my $t = Test::Nginx->new()->has(qw/http http_v2 rewrite/)->plan(6)
->write_file_expand('nginx.conf', <<'EOF');
%%TEST_GLOBALS%%
daemon off;
events {
}
http {
%%TEST_GLOBALS_HTTP%%
server {
listen 127.0.0.1:8080 http2;
server_name localhost;
location /h2 {
return 200 $http2;
}
location /sp {
return 200 $server_protocol;
}
location /scheme {
return 200 $scheme;
}
location /https {
return 200 "body $https";
}
location /rl {
return 200 $request_length;
}
}
}
EOF
# suppress deprecation warning
open OLDERR, ">&", \*STDERR; close STDERR;
$t->run();
open STDERR, ">&", \*OLDERR;
###############################################################################
# $http2
my $s = Test::Nginx::HTTP2->new();
my $sid = $s->new_stream({ path => '/h2' });
my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
my ($frame) = grep { $_->{type} eq "DATA" } @$frames;
is($frame->{data}, 'h2c', 'http variable - h2c');
# $server_protocol
$s = Test::Nginx::HTTP2->new();
$sid = $s->new_stream({ path => '/sp' });
$frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
($frame) = grep { $_->{type} eq "DATA" } @$frames;
is($frame->{data}, 'HTTP/2.0', 'server_protocol variable');
# $scheme
$s = Test::Nginx::HTTP2->new();
$sid = $s->new_stream({ path => '/scheme' });
$frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
($frame) = grep { $_->{type} eq "DATA" } @$frames;
is($frame->{data}, 'http', 'scheme variable');
# $https
$s = Test::Nginx::HTTP2->new();
$sid = $s->new_stream({ path => '/https' });
$frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
($frame) = grep { $_->{type} eq "DATA" } @$frames;
is($frame->{data}, 'body ', 'https variable');
# $request_length, HEADERS payload length
$s = Test::Nginx::HTTP2->new();
$sid = $s->new_stream({ headers => [
{ name => ':method', value => 'GET', mode => 0 }, # 1
{ name => ':scheme', value => 'http', mode => 0 }, # 1
{ name => ':authority', value => 'localhost', mode => 1 }, # 1+1+9
{ name => ':path', value => '/rl', mode => 1 }]}); # 1+1+3
$frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
($frame) = grep { $_->{type} eq "DATA" } @$frames;
is($frame->{data}, '18', 'request length');
# $request_length, HEADERS+CONTINUATION payload length
$s = Test::Nginx::HTTP2->new();
$sid = $s->new_stream({ continuation => 1, headers => [
{ name => ':method', value => 'GET', mode => 0 }, # 1
{ name => ':authority', value => 'localhost', mode => 1 }, # 1+1+9
{ name => ':path', value => '/rl', mode => 1 }]}); # 1+1+3
$s->h2_continue($sid, { headers => [
{ name => ':scheme', value => 'http', mode => 0 }]}); # 1
$frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
($frame) = grep { $_->{type} eq "DATA" } @$frames;
is($frame->{data}, '18', 'request length');
###############################################################################