blob: 47c1fcf754ecb3e3c8ac45bfde474065e9e57d93 [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_process_enabled(1);
log_level('debug'); # to ensure any log-level can be outputed
repeat_each(2);
plan tests => repeat_each() * (blocks() * 3 + 4);
#no_diff();
#no_long_string();
run_tests();
__DATA__
=== TEST 1: test log-level STDERR
--- config
location /log {
content_by_lua '
ngx.say("before log")
ngx.log(ngx.STDERR, "hello, log", 1234, 3.14159)
ngx.say("after log")
';
}
--- request
GET /log
--- response_body
before log
after log
--- error_log eval
qr/\[\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:3: hello, log12343.14159/
=== TEST 2: test log-level EMERG
--- config
location /log {
content_by_lua '
ngx.say("before log")
ngx.log(ngx.EMERG, "hello, log", 1234, 3.14159)
ngx.say("after log")
';
}
--- request
GET /log
--- response_body
before log
after log
--- error_log eval
qr/\[emerg\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:3: hello, log12343.14159/
=== TEST 3: test log-level ALERT
--- config
location /log {
content_by_lua '
ngx.say("before log")
ngx.log(ngx.ALERT, "hello, log", 1234, 3.14159)
ngx.say("after log")
';
}
--- request
GET /log
--- response_body
before log
after log
--- error_log eval
qr/\[alert\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:3: hello, log12343.14159/
=== TEST 4: test log-level CRIT
--- config
location /log {
content_by_lua '
ngx.say("before log")
ngx.log(ngx.CRIT, "hello, log", 1234, 3.14159)
ngx.say("after log")
';
}
--- request
GET /log
--- response_body
before log
after log
--- error_log eval
qr/\[crit\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:3: hello, log12343.14159/
=== TEST 5: test log-level ERR
--- config
location /log {
content_by_lua '
ngx.say("before log")
ngx.log(ngx.ERR, "hello, log", 1234, 3.14159)
ngx.say("after log")
';
}
--- request
GET /log
--- response_body
before log
after log
--- error_log eval
qr/\[error\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:3: hello, log12343.14159/
=== TEST 6: test log-level WARN
--- config
location /log {
content_by_lua '
ngx.say("before log")
ngx.log(ngx.WARN, "hello, log", 1234, 3.14159)
ngx.say("after log")
';
}
--- request
GET /log
--- response_body
before log
after log
--- error_log eval
qr/\[warn\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:3: hello, log12343.14159/
=== TEST 7: test log-level NOTICE
--- config
location /log {
content_by_lua '
ngx.say("before log")
ngx.log(ngx.NOTICE, "hello, log", 1234, 3.14159)
ngx.say("after log")
';
}
--- request
GET /log
--- response_body
before log
after log
--- error_log eval
qr/\[notice\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:3: hello, log12343.14159/
=== TEST 8: test log-level INFO
--- config
location /log {
content_by_lua '
ngx.say("before log")
ngx.log(ngx.INFO, "hello, log", 1234, 3.14159)
ngx.say("after log")
';
}
--- request
GET /log
--- response_body
before log
after log
--- error_log eval
qr/\[info\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:3: hello, log12343.14159/
=== TEST 9: test log-level DEBUG
--- config
location /log {
content_by_lua '
ngx.say("before log")
ngx.log(ngx.DEBUG, "hello, log", 1234, 3.14159)
ngx.say("after log")
';
}
--- request
GET /log
--- response_body
before log
after log
--- error_log eval
qr/\[debug\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:3: hello, log12343.14159/
=== TEST 10: regression test print()
--- config
location /log {
content_by_lua '
ngx.say("before log")
print("hello, log", 1234, 3.14159)
ngx.say("after log")
';
}
--- request
GET /log
--- response_body
before log
after log
--- error_log eval
qr/\[notice\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:3: hello, log12343.14159/
=== TEST 11: print(nil)
--- config
location /log {
content_by_lua '
print()
print(nil)
print("nil: ", nil)
ngx.say("hi");
';
}
--- request
GET /log
--- response_body
hi
--- error_log eval
[
'[lua] [string "content_by_lua"]:2: ,',
'[lua] [string "content_by_lua"]:3: nil,',
'[lua] [string "content_by_lua"]:4: nil: nil,',
]
=== TEST 12: ngx.log in set_by_lua
--- config
location /log {
set_by_lua $a '
ngx.log(ngx.ERR, "HELLO")
return 32;
';
echo $a;
}
--- request
GET /log
--- response_body
32
--- error_log eval
qr/\[error\] \S+: \S+ \[lua\] \[string "set_by_lua"\]:2: HELLO,/
=== TEST 13: test booleans and nil
--- config
location /log {
set_by_lua $a '
ngx.log(ngx.ERR, true, false, nil)
return 32;
';
echo $a;
}
--- request
GET /log
--- response_body
32
--- error_log eval
qr/\[error\] \S+: \S+ \[lua\] \[string "set_by_lua"\]:2: truefalsenil,/
=== TEST 14: print() in header filter
--- config
location /log {
header_filter_by_lua '
print("hello world")
ngx.header.foo = 32
';
echo hi;
}
--- request
GET /log
--- response_headers
foo: 32
--- error_log eval
qr/\[notice\] .*? \[lua\] \[string "header_filter_by_lua"\]:2: hello world/
--- response_body
hi
=== TEST 15: ngx.log() in header filter
--- config
location /log {
header_filter_by_lua '
ngx.log(ngx.ERR, "howdy, lua!")
ngx.header.foo = 32
';
echo hi;
}
--- request
GET /log
--- response_headers
foo: 32
--- response_body
hi
--- error_log eval
qr/\[error\] .*? \[lua\] \[string "header_filter_by_lua"\]:2: howdy, lua!/
=== TEST 16: ngx.log() big data
--- config
location /log {
content_by_lua '
ngx.log(ngx.ERR, "a" .. string.rep("h", 1970) .. "b")
ngx.say("hi")
';
}
--- request
GET /log
--- response_headers
--- error_log eval
[qr/ah{1970}b/]
=== TEST 17: ngx.log in Lua function calls & inlined lua
--- config
location /log {
content_by_lua '
function foo()
bar()
end
function bar()
ngx.log(ngx.ERR, "hello, log", 1234, 3.14159)
end
foo()
ngx.say("done")
';
}
--- request
GET /log
--- response_body
done
--- error_log eval
qr/\[error\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:7: bar\(\): hello, log12343.14159/
=== TEST 18: ngx.log in Lua function tail-calls & inlined lua
--- config
location /log {
content_by_lua '
function foo()
return bar(5)
end
function bar(n)
if n < 1 then
ngx.log(ngx.ERR, "hello, log", 1234, 3.14159)
return n
end
return bar(n - 1)
end
foo()
ngx.say("done")
';
}
--- request
GET /log
--- response_body
done
--- error_log eval
qr/\[error\] \S+: \S+ \[lua\] \[string "content_by_lua"\]:8:(?: foo\(\):)? hello, log12343.14159/
=== TEST 19: ngx.log in Lua files
--- config
location /log {
content_by_lua_file 'html/test.lua';
}
--- user_files
>>> test.lua
function foo()
bar()
end
function bar()
ngx.log(ngx.ERR, "hello, log", 1234, 3.14159)
end
foo()
ngx.say("done")
--- request
GET /log
--- response_body
done
--- error_log eval
qr/\[error\] \S+: \S+ \[lua\] test.lua:6: bar\(\): hello, log12343.14159/
=== TEST 20: ngx.log with bad levels (ngx.ERROR, -1)
--- config
location /log {
content_by_lua '
ngx.log(ngx.ERROR, "hello lua")
ngx.say("done")
';
}
--- request
GET /log
--- response_body_like: 500 Internal Server Error
--- error_code: 500
--- error_log
bad log level: -1
=== TEST 21: ngx.log with bad levels (9)
--- config
location /log {
content_by_lua '
ngx.log(9, "hello lua")
ngx.say("done")
';
}
--- request
GET /log
--- response_body_like: 500 Internal Server Error
--- error_code: 500
--- error_log
bad log level: 9
=== TEST 22: \0 in the log message
--- config
location = /t {
content_by_lua '
ngx.log(ngx.WARN, "hello\\0world")
ngx.say("ok")
';
}
--- request
GET /t
--- response_body
ok
--- no_error_log
[error]
--- error_log eval
"2: hello\0world, client: "