blob: 1b04c2448e803f5a68c248d41e3d1a9f74ee7a5f [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() * 51;
#no_diff();
no_long_string();
run_tests();
__DATA__
=== TEST 1: sanity
--- config
location /lua {
content_by_lua
' function bar()
return lua_concat(3)
end
function foo()
bar()
end
foo()
';
}
--- request
GET /lua
--- ignore_response
--- error_log
attempt to call global 'lua_concat'
: in function 'bar'
:5: in function 'foo'
:7: in function
=== TEST 2: error(nil)
--- config
location /lua {
content_by_lua
' function bar()
error(nil)
end
function foo()
bar()
end
foo()
';
}
--- request
GET /lua
--- ignore_response
--- error_log
lua entry thread aborted: runtime error: unknown reason
stack traceback:
in function 'error'
: in function 'bar'
:5: in function 'foo'
:7: in function <[string "content_by_lua"]:1>
=== TEST 3: deep backtrace in a single coroutine (more than 15)
--- config eval
my $s = "
location /lua {
content_by_lua '
";
my $prev;
for my $i (1..18) {
if (!defined $prev) {
$s .= "
local function func$i()
return error([[blah]])
end";
} else {
$s .= "
local function func$i()
local v = func$prev()
return v
end";
}
$prev = $i;
}
$s .= "
func$prev()
';
}
";
--- request
GET /lua
--- stap2
probe process("$LIBLUA_PATH").function("lua_concat") {
println("lua concat")
//print_ubacktrace()
}
--- stap_out2
--- ignore_response
--- error_log
: blah
: in function 'func1'
:7: in function 'func2'
:11: in function 'func3'
:15: in function 'func4'
:19: in function 'func5'
:23: in function 'func6'
:27: in function 'func7'
:31: in function 'func8'
:35: in function 'func9'
:39: in function 'func10'
:43: in function 'func11'
:47: in function 'func12'
:51: in function 'func13'
:55: in function 'func14'
:59: in function 'func15'
:63: in function 'func16'
:67: in function 'func17'
:71: in function 'func18'
:74: in function
=== TEST 4: deep backtrace in a single coroutine (more than 22)
--- config eval
my $s = "
location /lua {
content_by_lua '
";
my $prev;
for my $i (1..23) {
if (!defined $prev) {
$s .= "
local function func$i()
return error([[blah]])
end";
} else {
$s .= "
local function func$i()
local v = func$prev()
return v
end";
}
$prev = $i;
}
$s .= "
func$prev()
';
}
";
--- request
GET /lua
--- stap2
probe process("$LIBLUA_PATH").function("lua_concat") {
println("lua concat")
//print_ubacktrace()
}
--- stap_out2
--- ignore_response
--- error_log
: blah
: in function 'func1'
:7: in function 'func2'
:11: in function 'func3'
:15: in function 'func4'
:19: in function 'func5'
:23: in function 'func6'
:27: in function 'func7'
:31: in function 'func8'
:35: in function 'func9'
:39: in function 'func10'
:43: in function 'func11'
:47: in function 'func12'
:59: in function 'func15'
:63: in function 'func16'
:67: in function 'func17'
:71: in function 'func18'
:75: in function 'func19'
:79: in function 'func20'
:83: in function 'func21'
...