blob: 209af69633f44bf0fda7b8bc783c8ace47364d24 [file] [log] [blame] [raw]
# vim:set ft= ts=4 sw=4 et fdm=marker:
use lib 'lib';
use Test::Nginx::Socket::Lua;
#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