327 строки
6.2 KiB
Perl
327 строки
6.2 KiB
Perl
# vim:set ft= ts=4 sw=4 et fdm=marker:
|
|
use lib 'lib';
|
|
use t::TestNginxLua;
|
|
|
|
#worker_connections(1014);
|
|
#master_on();
|
|
#workers(2);
|
|
#log_level('warn');
|
|
|
|
repeat_each(2);
|
|
#repeat_each(1);
|
|
|
|
plan tests => repeat_each() * (blocks() * 2 + 5);
|
|
|
|
#no_diff();
|
|
#no_long_string();
|
|
run_tests();
|
|
|
|
__DATA__
|
|
|
|
=== TEST 1: sanity
|
|
--- config
|
|
location /lua {
|
|
lua_need_request_body on;
|
|
content_by_lua '
|
|
local args = ngx.req.get_post_args()
|
|
local keys = {}
|
|
for key, val in pairs(args) do
|
|
table.insert(keys, key)
|
|
end
|
|
|
|
table.sort(keys)
|
|
for i, key in ipairs(keys) do
|
|
ngx.say(key, " = ", args[key])
|
|
end
|
|
';
|
|
}
|
|
--- request
|
|
POST /lua
|
|
a=3&b=4&c
|
|
--- response_body
|
|
a = 3
|
|
b = 4
|
|
c = true
|
|
|
|
|
|
|
|
=== TEST 2: lua_need_request_body off
|
|
--- config
|
|
location /lua {
|
|
lua_need_request_body off;
|
|
content_by_lua '
|
|
local args = ngx.req.get_post_args()
|
|
local keys = {}
|
|
for key, val in pairs(args) do
|
|
table.insert(keys, key)
|
|
end
|
|
|
|
table.sort(keys)
|
|
for i, key in ipairs(keys) do
|
|
ngx.say(key, " = ", args[key])
|
|
end
|
|
';
|
|
}
|
|
--- request
|
|
POST /lua
|
|
a=3&b=4&c
|
|
--- response_body_like: 500 Internal Server Error
|
|
--- error_code: 500
|
|
|
|
|
|
|
|
=== TEST 3: empty request body
|
|
--- config
|
|
location /lua {
|
|
lua_need_request_body on;
|
|
content_by_lua '
|
|
local args = ngx.req.get_post_args()
|
|
local keys = {}
|
|
for key, val in pairs(args) do
|
|
table.insert(keys, key)
|
|
end
|
|
|
|
table.sort(keys)
|
|
for i, key in ipairs(keys) do
|
|
local val = args[key]
|
|
if type(val) == "table" then
|
|
ngx.say(key, ": ", table.concat(val, ", "))
|
|
else
|
|
ngx.say(key, ": ", val)
|
|
end
|
|
end
|
|
';
|
|
}
|
|
--- request
|
|
POST /lua
|
|
--- response_body
|
|
|
|
|
|
|
|
=== TEST 4: max args (limited after normal key=value)
|
|
--- config
|
|
location /lua {
|
|
content_by_lua '
|
|
ngx.req.read_body();
|
|
local args = ngx.req.get_post_args(2)
|
|
local keys = {}
|
|
for key, val in pairs(args) do
|
|
table.insert(keys, key)
|
|
end
|
|
|
|
table.sort(keys)
|
|
for i, key in ipairs(keys) do
|
|
ngx.say(key, " = ", args[key])
|
|
end
|
|
';
|
|
}
|
|
--- request
|
|
POST /lua
|
|
foo=3&bar=4&baz=2
|
|
--- response_body
|
|
bar = 4
|
|
foo = 3
|
|
--- error_log
|
|
lua hit query args limit 2
|
|
|
|
|
|
|
|
=== TEST 5: max args (limited after an orphan key)
|
|
--- config
|
|
location /lua {
|
|
content_by_lua '
|
|
ngx.req.read_body();
|
|
local args = ngx.req.get_post_args(2)
|
|
local keys = {}
|
|
for key, val in pairs(args) do
|
|
table.insert(keys, key)
|
|
end
|
|
|
|
table.sort(keys)
|
|
for i, key in ipairs(keys) do
|
|
ngx.say(key, " = ", args[key])
|
|
end
|
|
';
|
|
}
|
|
--- request
|
|
POST /lua
|
|
foo=3&bar&baz=2
|
|
--- response_body
|
|
bar = true
|
|
foo = 3
|
|
--- error_log
|
|
lua hit query args limit 2
|
|
|
|
|
|
|
|
=== TEST 6: max args (limited after an empty key, but non-emtpy values)
|
|
--- config
|
|
location /lua {
|
|
content_by_lua '
|
|
ngx.req.read_body();
|
|
local args = ngx.req.get_post_args(2)
|
|
local keys = {}
|
|
for key, val in pairs(args) do
|
|
table.insert(keys, key)
|
|
end
|
|
|
|
table.sort(keys)
|
|
for i, key in ipairs(keys) do
|
|
ngx.say(key, " = ", args[key])
|
|
end
|
|
|
|
ngx.say("done")
|
|
';
|
|
}
|
|
--- request
|
|
POST /lua
|
|
foo=3&=hello&=world
|
|
--- response_body
|
|
foo = 3
|
|
done
|
|
--- error_log
|
|
lua hit query args limit 2
|
|
|
|
|
|
|
|
=== TEST 7: default max 100 args
|
|
--- config
|
|
location /lua {
|
|
content_by_lua '
|
|
ngx.req.read_body();
|
|
local args = ngx.req.get_post_args()
|
|
local keys = {}
|
|
for key, val in pairs(args) do
|
|
table.insert(keys, key)
|
|
end
|
|
|
|
table.sort(keys)
|
|
for i, key in ipairs(keys) do
|
|
ngx.say(key, " = ", args[key])
|
|
end
|
|
';
|
|
}
|
|
--- request eval
|
|
my $s = "POST /lua\n";
|
|
my $i = 1;
|
|
while ($i <= 102) {
|
|
if ($i != 1) {
|
|
$s .= '&';
|
|
}
|
|
$s .= "a$i=$i";
|
|
$i++;
|
|
}
|
|
$s
|
|
--- response_body eval
|
|
my @k;
|
|
my $i = 1;
|
|
while ($i <= 100) {
|
|
push @k, "a$i";
|
|
$i++;
|
|
}
|
|
@k = sort @k;
|
|
for my $k (@k) {
|
|
if ($k =~ /\d+/) {
|
|
$k .= " = $&\n";
|
|
}
|
|
}
|
|
CORE::join("", @k);
|
|
--- timeout: 4
|
|
--- error_log
|
|
lua hit query args limit 100
|
|
|
|
|
|
|
|
=== TEST 8: custom max 102 args
|
|
--- config
|
|
location /lua {
|
|
content_by_lua '
|
|
ngx.req.read_body()
|
|
local args = ngx.req.get_post_args(102)
|
|
local keys = {}
|
|
for key, val in pairs(args) do
|
|
table.insert(keys, key)
|
|
end
|
|
|
|
table.sort(keys)
|
|
for i, key in ipairs(keys) do
|
|
ngx.say(key, " = ", args[key])
|
|
end
|
|
';
|
|
}
|
|
--- request eval
|
|
my $s = "POST /lua\n";
|
|
my $i = 1;
|
|
while ($i <= 103) {
|
|
if ($i != 1) {
|
|
$s .= '&';
|
|
}
|
|
$s .= "a$i=$i";
|
|
$i++;
|
|
}
|
|
$s
|
|
--- response_body eval
|
|
my @k;
|
|
my $i = 1;
|
|
while ($i <= 102) {
|
|
push @k, "a$i";
|
|
$i++;
|
|
}
|
|
@k = sort @k;
|
|
for my $k (@k) {
|
|
if ($k =~ /\d+/) {
|
|
$k .= " = $&\n";
|
|
}
|
|
}
|
|
CORE::join("", @k);
|
|
--- timeout: 4
|
|
--- error_log
|
|
lua hit query args limit 102
|
|
|
|
|
|
|
|
=== TEST 9: custom unlimited args
|
|
--- config
|
|
location /lua {
|
|
content_by_lua '
|
|
ngx.req.read_body()
|
|
local args = ngx.req.get_post_args(0)
|
|
local keys = {}
|
|
for key, val in pairs(args) do
|
|
table.insert(keys, key)
|
|
end
|
|
|
|
table.sort(keys)
|
|
for i, key in ipairs(keys) do
|
|
ngx.say(key, " = ", args[key])
|
|
end
|
|
';
|
|
}
|
|
--- request eval
|
|
my $s = "POST /lua\n";
|
|
my $i = 1;
|
|
while ($i <= 105) {
|
|
if ($i != 1) {
|
|
$s .= '&';
|
|
}
|
|
$s .= "a$i=$i";
|
|
$i++;
|
|
}
|
|
$s
|
|
--- response_body eval
|
|
my @k;
|
|
my $i = 1;
|
|
while ($i <= 105) {
|
|
push @k, "a$i";
|
|
$i++;
|
|
}
|
|
@k = sort @k;
|
|
for my $k (@k) {
|
|
if ($k =~ /\d+/) {
|
|
$k .= " = $&\n";
|
|
}
|
|
}
|
|
CORE::join("", @k);
|
|
--- timeout: 4
|
|
|