comparison h2.t @ 684:96666f621dbc

Tests: added http2_max_field_size and http2_max_header_size tests.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 08 Sep 2015 21:19:35 +0300
parents 85e368105c8b
children fdc748de6fad
comparison
equal deleted inserted replaced
683:49aea425392d 684:96666f621dbc
30 eval { IO::Socket::SSL::SSL_VERIFY_NONE(); }; 30 eval { IO::Socket::SSL::SSL_VERIFY_NONE(); };
31 plan(skip_all => 'IO::Socket::SSL too old') if $@; 31 plan(skip_all => 'IO::Socket::SSL too old') if $@;
32 32
33 my $t = Test::Nginx->new()->has(qw/http http_ssl http_v2 proxy cache/) 33 my $t = Test::Nginx->new()->has(qw/http http_ssl http_v2 proxy cache/)
34 ->has(qw/limit_conn rewrite realip shmem/) 34 ->has(qw/limit_conn rewrite realip shmem/)
35 ->has_daemon('openssl')->plan(170); 35 ->has_daemon('openssl')->plan(178);
36 36
37 $t->write_file_expand('nginx.conf', <<'EOF'); 37 $t->write_file_expand('nginx.conf', <<'EOF');
38 38
39 %%TEST_GLOBALS%% 39 %%TEST_GLOBALS%%
40 40
157 listen 127.0.0.1:8086 http2; 157 listen 127.0.0.1:8086 http2;
158 server_name localhost; 158 server_name localhost;
159 159
160 http2_max_concurrent_streams 1; 160 http2_max_concurrent_streams 1;
161 } 161 }
162
163 server {
164 listen 127.0.0.1:8087 http2;
165 server_name localhost;
166
167 http2_max_field_size 32;
168 }
169
170 server {
171 listen 127.0.0.1:8088 http2;
172 server_name localhost;
173
174 http2_max_header_size 64;
175 }
162 } 176 }
163 177
164 EOF 178 EOF
165 179
166 $t->write_file('openssl.conf', <<EOF); 180 $t->write_file('openssl.conf', <<EOF);
1066 h2_window($sess, 2**18); 1080 h2_window($sess, 2**18);
1067 1081
1068 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); 1082 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
1069 @data = grep { $_->{type} eq "DATA" } @$frames; 1083 @data = grep { $_->{type} eq "DATA" } @$frames;
1070 is($data[0]->{length}, 2**15, 'max frame size - custom'); 1084 is($data[0]->{length}, 2**15, 'max frame size - custom');
1085
1086 # max_field_size
1087
1088 $sess = new_session(8087);
1089 $sid = new_stream($sess, { headers => [
1090 { name => ':method', value => 'GET', mode => 0 },
1091 { name => ':scheme', value => 'http', mode => 0 },
1092 { name => ':path', value => '/t2.html', mode => 1 },
1093 { name => ':authority', value => 'localhost', mode => 1 },
1094 { name => 'longname10', value => 'valu5' x 4 . 'x', mode => 2 }]});
1095 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
1096
1097 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
1098 ok($frame, 'field size less');
1099
1100 $sid = new_stream($sess, { headers => [
1101 { name => ':method', value => 'GET', mode => 0 },
1102 { name => ':scheme', value => 'http', mode => 0 },
1103 { name => ':path', value => '/t2.html', mode => 1 },
1104 { name => ':authority', value => 'localhost', mode => 1 },
1105 { name => 'longname10', value => 'valu5' x 4 . 'x', mode => 2 }]});
1106 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
1107
1108 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
1109 ok($frame, 'field size second');
1110
1111 $sess = new_session(8087);
1112 $sid = new_stream($sess, { headers => [
1113 { name => ':method', value => 'GET', mode => 0 },
1114 { name => ':scheme', value => 'http', mode => 0 },
1115 { name => ':path', value => '/t2.html', mode => 1 },
1116 { name => ':authority', value => 'localhost', mode => 1 },
1117 { name => 'longname10', value => 'valu5' x 4 . 'xx', mode => 2 }]});
1118 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
1119
1120 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
1121 ok($frame, 'field size equal');
1122
1123 $sess = new_session(8087);
1124 $sid = new_stream($sess, { headers => [
1125 { name => ':method', value => 'GET', mode => 0 },
1126 { name => ':scheme', value => 'http', mode => 0 },
1127 { name => ':path', value => '/t2.html', mode => 1 },
1128 { name => ':authority', value => 'localhost', mode => 1 },
1129 { name => 'longname10', value => 'valu5' x 4 . 'xxx', mode => 2 }]});
1130 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
1131
1132 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
1133 is($frame, undef, 'field size greater');
1134
1135 # max_header_size
1136
1137 $sess = new_session(8088);
1138 $sid = new_stream($sess, { headers => [
1139 { name => ':method', value => 'GET', mode => 0 },
1140 { name => ':scheme', value => 'http', mode => 0 },
1141 { name => ':path', value => '/t2.html', mode => 1 },
1142 { name => ':authority', value => 'localhost', mode => 1 },
1143 { name => 'longname9', value => 'x', mode => 2 }]});
1144 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
1145
1146 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
1147 ok($frame, 'header size less');
1148
1149 $sid = new_stream($sess, { headers => [
1150 { name => ':method', value => 'GET', mode => 0 },
1151 { name => ':scheme', value => 'http', mode => 0 },
1152 { name => ':path', value => '/t2.html', mode => 1 },
1153 { name => ':authority', value => 'localhost', mode => 1 },
1154 { name => 'longname9', value => 'x', mode => 2 }]});
1155 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
1156
1157 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
1158 ok($frame, 'header size second');
1159
1160 $sess = new_session(8088);
1161 $sid = new_stream($sess, { headers => [
1162 { name => ':method', value => 'GET', mode => 0 },
1163 { name => ':scheme', value => 'http', mode => 0 },
1164 { name => ':path', value => '/t2.html', mode => 1 },
1165 { name => ':authority', value => 'localhost', mode => 1 },
1166 { name => 'longname9', value => 'xx', mode => 2 }]});
1167 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
1168
1169 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
1170 ok($frame, 'header size equal');
1171
1172 $sess = new_session(8088);
1173 $sid = new_stream($sess, { headers => [
1174 { name => ':method', value => 'GET', mode => 0 },
1175 { name => ':scheme', value => 'http', mode => 0 },
1176 { name => ':path', value => '/t2.html', mode => 1 },
1177 { name => ':authority', value => 'localhost', mode => 1 },
1178 { name => 'longname9', value => 'xxx', mode => 2 }]});
1179 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]);
1180
1181 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
1182 is($frame, undef, 'header size greater');
1071 1183
1072 # stream multiplexing + WINDOW_UPDATE 1184 # stream multiplexing + WINDOW_UPDATE
1073 1185
1074 $sess = new_session(); 1186 $sess = new_session();
1075 $sid = new_stream($sess, { path => '/t1.html' }); 1187 $sid = new_stream($sess, { path => '/t1.html' });