Initial Commit
This commit is contained in:
393
headers-more-nginx-module-0.32/t/bug.t
Normal file
393
headers-more-nginx-module-0.32/t/bug.t
Normal file
@@ -0,0 +1,393 @@
|
||||
# vi:filetype=
|
||||
|
||||
use Test::Nginx::Socket; # 'no_plan';
|
||||
|
||||
repeat_each(2);
|
||||
|
||||
plan tests => 53 * repeat_each();
|
||||
|
||||
no_diff;
|
||||
|
||||
run_tests();
|
||||
|
||||
__DATA__
|
||||
|
||||
=== TEST 1: set Server
|
||||
--- config
|
||||
#more_set_headers 'Last-Modified: x';
|
||||
more_clear_headers 'Last-Modified';
|
||||
--- request
|
||||
GET /index.html
|
||||
--- response_headers
|
||||
! Last-Modified
|
||||
--- response_body_like: It works!
|
||||
|
||||
|
||||
|
||||
=== TEST 2: variables in the Ranges header
|
||||
--- config
|
||||
location /index.html {
|
||||
set $rfrom 1;
|
||||
set $rto 3;
|
||||
more_set_input_headers 'Range: bytes=$rfrom - $rto';
|
||||
#more_set_input_headers 'Range: bytes=1 - 3';
|
||||
#echo $http_range;
|
||||
}
|
||||
--- request
|
||||
GET /index.html
|
||||
--- error_code: 206
|
||||
--- response_body chomp
|
||||
htm
|
||||
|
||||
|
||||
|
||||
=== TEST 3: mime type overriding (inlined types)
|
||||
--- config
|
||||
more_clear_headers 'X-Powered-By' 'X-Runtime' 'ETag';
|
||||
|
||||
types {
|
||||
text/html html htm shtml;
|
||||
text/css css;
|
||||
}
|
||||
--- user_files
|
||||
>>> a.css
|
||||
hello
|
||||
--- request
|
||||
GET /a.css
|
||||
--- error_code: 200
|
||||
--- response_headers
|
||||
Content-Type: text/css
|
||||
--- response_body
|
||||
hello
|
||||
|
||||
|
||||
|
||||
=== TEST 4: mime type overriding (included types file)
|
||||
--- config
|
||||
more_clear_headers 'X-Powered-By' 'X-Runtime' 'ETag';
|
||||
include mime.types;
|
||||
--- user_files
|
||||
>>> a.css
|
||||
hello
|
||||
>>> ../conf/mime.types
|
||||
types {
|
||||
text/html html htm shtml;
|
||||
text/css css;
|
||||
}
|
||||
--- request
|
||||
GET /a.css
|
||||
--- error_code: 200
|
||||
--- response_headers
|
||||
Content-Type: text/css
|
||||
--- response_body
|
||||
hello
|
||||
|
||||
|
||||
|
||||
=== TEST 5: empty variable as the header value
|
||||
--- config
|
||||
location /foo {
|
||||
more_set_headers 'X-Foo: $arg_foo';
|
||||
echo hi;
|
||||
}
|
||||
--- request
|
||||
GET /foo
|
||||
--- response_headers
|
||||
! X-Foo
|
||||
--- response_body
|
||||
hi
|
||||
|
||||
|
||||
|
||||
=== TEST 6: range bug
|
||||
--- config
|
||||
location /index.html {
|
||||
more_clear_input_headers "Range*" ;
|
||||
more_clear_input_headers "Content-Range*" ;
|
||||
|
||||
more_set_input_headers 'Range: bytes=1-5';
|
||||
more_set_headers 'Content-Range: bytes 1-5/1000';
|
||||
}
|
||||
--- request
|
||||
GET /index.html
|
||||
--- more_headers
|
||||
Range: bytes=1-3
|
||||
--- raw_response_headers_like: Content-Range: bytes 1-5/1000$
|
||||
--- response_body chop
|
||||
html>
|
||||
--- error_code: 206
|
||||
--- SKIP
|
||||
|
||||
|
||||
|
||||
=== TEST 7: Allow-Ranges
|
||||
--- config
|
||||
location /index.html {
|
||||
more_clear_headers 'Accept-Ranges';
|
||||
}
|
||||
--- request
|
||||
GET /index.html
|
||||
--- response_headers
|
||||
! Accept-Ranges
|
||||
--- response_body_like: It works
|
||||
|
||||
|
||||
|
||||
=== TEST 8: clear hand-written Allow-Ranges headers
|
||||
--- config
|
||||
location /index.html {
|
||||
more_set_headers 'Accept-Ranges: bytes';
|
||||
more_clear_headers 'Accept-Ranges';
|
||||
}
|
||||
--- request
|
||||
GET /index.html
|
||||
--- response_headers
|
||||
! Accept-Ranges
|
||||
--- response_body_like: It works
|
||||
|
||||
|
||||
|
||||
=== TEST 9: clear first, then add
|
||||
--- config
|
||||
location /bug {
|
||||
more_clear_headers 'Foo';
|
||||
more_set_headers 'Foo: a';
|
||||
echo hello;
|
||||
}
|
||||
--- request
|
||||
GET /bug
|
||||
--- raw_response_headers_like eval
|
||||
".*Foo: a.*"
|
||||
--- response_body
|
||||
hello
|
||||
|
||||
|
||||
|
||||
=== TEST 10: first add, then clear, then add again
|
||||
--- config
|
||||
location /bug {
|
||||
more_set_headers 'Foo: a';
|
||||
more_clear_headers 'Foo';
|
||||
more_set_headers 'Foo: b';
|
||||
echo hello;
|
||||
}
|
||||
--- request
|
||||
GET /bug
|
||||
--- raw_response_headers_like eval
|
||||
".*Foo: b.*"
|
||||
--- response_body
|
||||
hello
|
||||
|
||||
|
||||
|
||||
=== TEST 11: override charset
|
||||
--- config
|
||||
location /foo {
|
||||
charset iso-8859-1;
|
||||
default_type "text/html";
|
||||
echo hiya;
|
||||
}
|
||||
|
||||
location /bug {
|
||||
more_set_headers "Content-Type: text/html; charset=UTF-8";
|
||||
proxy_pass http://127.0.0.1:$server_port/foo;
|
||||
}
|
||||
--- request
|
||||
GET /bug
|
||||
--- response_body
|
||||
hiya
|
||||
--- response_headers
|
||||
Content-Type: text/html; charset=UTF-8
|
||||
|
||||
|
||||
|
||||
=== TEST 12: set multi-value header to a single value
|
||||
--- config
|
||||
location /main {
|
||||
set $footer '';
|
||||
proxy_pass http://127.0.0.1:$server_port/foo;
|
||||
more_set_headers 'Foo: b';
|
||||
header_filter_by_lua '
|
||||
ngx.var.footer = ngx.header.Foo
|
||||
';
|
||||
echo_after_body $footer;
|
||||
}
|
||||
location /foo {
|
||||
echo foo;
|
||||
add_header Foo a;
|
||||
add_header Foo c;
|
||||
}
|
||||
--- request
|
||||
GET /main
|
||||
--- response_headers
|
||||
Foo: b
|
||||
--- response_body
|
||||
foo
|
||||
b
|
||||
|
||||
|
||||
|
||||
=== TEST 13: set multi values to cache-control and override it with multiple values (to reproduce a bug)
|
||||
--- config
|
||||
location /lua {
|
||||
content_by_lua '
|
||||
ngx.header.cache_control = { "private", "no-store", "foo", "bar", "baz" }
|
||||
ngx.send_headers()
|
||||
ngx.say("Cache-Control: ", ngx.var.sent_http_cache_control)
|
||||
';
|
||||
more_clear_headers Cache-Control;
|
||||
add_header Cache-Control "blah";
|
||||
}
|
||||
--- request
|
||||
GET /lua
|
||||
--- response_headers
|
||||
Cache-Control: blah
|
||||
--- response_body
|
||||
Cache-Control: blah
|
||||
|
||||
|
||||
|
||||
=== TEST 14: set 20+ headers
|
||||
--- config
|
||||
location /test {
|
||||
more_clear_input_headers "Authorization";
|
||||
echo $http_a1;
|
||||
echo $http_authorization;
|
||||
echo $http_a2;
|
||||
echo $http_a3;
|
||||
echo $http_a23;
|
||||
echo $http_a24;
|
||||
echo $http_a25;
|
||||
}
|
||||
--- request
|
||||
GET /test
|
||||
--- more_headers eval
|
||||
my $i = 1;
|
||||
my $s;
|
||||
while ($i <= 25) {
|
||||
$s .= "A$i: $i\n";
|
||||
if ($i == 22) {
|
||||
$s .= "Authorization: blah\n";
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
#warn $s;
|
||||
$s
|
||||
--- response_body
|
||||
1
|
||||
|
||||
2
|
||||
3
|
||||
23
|
||||
24
|
||||
25
|
||||
|
||||
|
||||
|
||||
=== TEST 15: github #20: segfault caused by the nasty optimization in the nginx core (set)
|
||||
--- config
|
||||
location = /t/ {
|
||||
more_set_headers "Foo: 1";
|
||||
proxy_pass http://127.0.0.1:$server_port;
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- more_headers
|
||||
Foo: bar
|
||||
Bah: baz
|
||||
--- response_body_like: 301 Moved Permanently
|
||||
--- error_code: 301
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 16: github #20: segfault caused by the nasty optimization in the nginx core (clear)
|
||||
--- config
|
||||
location = /t/ {
|
||||
more_clear_headers Foo;
|
||||
proxy_pass http://127.0.0.1:$server_port;
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- more_headers
|
||||
Foo: bar
|
||||
Bah: baz
|
||||
--- response_body_like: 301 Moved Permanently
|
||||
--- error_code: 301
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 17: Content-Type response headers with a charset param (correct -t values)
|
||||
--- config
|
||||
location = /t {
|
||||
more_set_headers -t 'text/html' 'X-Foo: Bar';
|
||||
proxy_pass http://127.0.0.1:$server_port/fake;
|
||||
}
|
||||
|
||||
location = /fake {
|
||||
default_type text/html;
|
||||
charset utf-8;
|
||||
echo ok;
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_headers
|
||||
X-Foo: Bar
|
||||
--- response_body
|
||||
ok
|
||||
|
||||
|
||||
|
||||
=== TEST 18: Content-Type response headers with a charset param (WRONG -t values)
|
||||
--- config
|
||||
location = /t {
|
||||
more_set_headers -t 'text/html; charset=utf-8' 'X-Foo: Bar';
|
||||
proxy_pass http://127.0.0.1:$server_port/fake;
|
||||
}
|
||||
|
||||
location = /fake {
|
||||
default_type text/html;
|
||||
charset utf-8;
|
||||
echo ok;
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_headers
|
||||
X-Foo: Bar
|
||||
--- response_body
|
||||
ok
|
||||
|
||||
|
||||
|
||||
=== TEST 19: for bad requests (bad request method letter case)
|
||||
--- config
|
||||
error_page 400 = /err;
|
||||
|
||||
location = /err {
|
||||
more_set_input_headers "Foo: bar";
|
||||
echo ok;
|
||||
}
|
||||
--- raw_request
|
||||
GeT / HTTP/1.1
|
||||
--- response_body
|
||||
ok
|
||||
--- no_check_leak
|
||||
|
||||
|
||||
|
||||
=== TEST 20: for bad requests (bad request method names)
|
||||
--- config
|
||||
error_page 400 = /err;
|
||||
|
||||
location = /err {
|
||||
more_set_input_headers "Foo: bar";
|
||||
echo ok;
|
||||
}
|
||||
--- raw_request
|
||||
GET x HTTP/1.1
|
||||
--- response_body
|
||||
ok
|
||||
--- no_check_leak
|
||||
Reference in New Issue
Block a user