blob: 7846971a8836aefebc41864fdd6a13b635c1bff6 [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('debug');
repeat_each(2);
plan tests => repeat_each() * 43;
#no_diff();
#no_long_string();
run_tests();
__DATA__
=== TEST 1: sleep 0.5 - content
--- config
location /test {
content_by_lua '
ngx.update_time()
local before = ngx.now()
ngx.sleep(0.5)
local now = ngx.now()
ngx.say(now - before)
';
}
--- request
GET /test
--- response_body_like chop
^0\.(?:4[5-9]\d*|5[0-5]\d*|5)$
--- error_log
lua ready to sleep for
lua sleep timer expired: "/test?"
lua sleep timer expired: "/test?"
=== TEST 2: sleep a - content
--- config
location /test {
content_by_lua '
ngx.update_time()
local before = ngx.now()
ngx.sleep("a")
local now = ngx.now()
ngx.say(now - before)
';
}
--- request
GET /test
--- error_code: 500
--- response_body_like: 500 Internal Server Error
--- error_log
bad argument #1 to 'sleep'
=== TEST 3: sleep 0.5 in subrequest - content
--- config
location /test {
content_by_lua '
ngx.update_time()
local before = ngx.now()
ngx.location.capture("/sleep")
local now = ngx.now()
local delay = now - before
ngx.say(delay)
';
}
location /sleep {
content_by_lua 'ngx.sleep(0.5)';
}
--- request
GET /test
--- response_body_like chop
^0\.(?:4[5-9]\d*|5[0-9]\d*|5)$
--- error_log
lua ready to sleep for
lua sleep timer expired: "/sleep?"
--- no_error_log
[error]
=== TEST 4: sleep a in subrequest with bad argument
--- config
location /test {
content_by_lua '
local res = ngx.location.capture("/sleep");
';
}
location /sleep {
content_by_lua 'ngx.sleep("a")';
}
--- request
GET /test
--- response_body_like:
--- error_log
bad argument #1 to 'sleep'
=== TEST 5: sleep 0.33 - multi-times in content
--- config
location /test {
content_by_lua '
ngx.update_time()
local start = ngx.now()
ngx.sleep(0.33)
ngx.sleep(0.33)
ngx.sleep(0.33)
ngx.say(ngx.now() - start)
';
}
--- request
GET /test
--- response_body_like chop
^(?:0\.9\d*|1\.[0-2]\d*|1)$
--- error_log
lua ready to sleep for
lua sleep timer expired: "/test?"
--- no_error_log
[error]
=== TEST 6: sleep 0.5 - interleaved by ngx.say() - ended by ngx.sleep
--- config
location /test {
content_by_lua '
ngx.send_headers()
-- ngx.location.capture("/sleep")
ngx.sleep(1)
ngx.say("blah")
ngx.sleep(1)
-- ngx.location.capture("/sleep")
';
}
location = /sleep {
echo_sleep 0.1;
}
--- request
GET /test
--- response_body
blah
--- error_log
lua ready to sleep
lua sleep timer expired: "/test?"
--- no_error_log
[error]
=== TEST 7: sleep 0.5 - interleaved by ngx.say() - not ended by ngx.sleep
--- config
location /test {
content_by_lua '
ngx.send_headers()
-- ngx.location.capture("/sleep")
ngx.sleep(0.3)
ngx.say("blah")
ngx.sleep(0.5)
-- ngx.location.capture("/sleep")
ngx.say("hiya")
';
}
location = /sleep {
echo_sleep 0.1;
}
--- request
GET /test
--- response_body
blah
hiya
--- error_log
lua ready to sleep for
lua sleep timer expired: "/test?"
--- no_error_log
[error]
=== TEST 8: ngx.location.capture before and after ngx.sleep
--- config
location /test {
content_by_lua '
local res = ngx.location.capture("/sub")
ngx.print(res.body)
ngx.sleep(0.1)
res = ngx.location.capture("/sub")
ngx.print(res.body)
';
}
location = /hello {
echo hello world;
}
location = /sub {
proxy_pass http://127.0.0.1:$server_port/hello;
}
--- request
GET /test
--- response_body
hello world
hello world
--- no_error_log
[error]
=== TEST 9: sleep 0
--- config
location /test {
content_by_lua '
ngx.update_time()
local before = ngx.now()
ngx.sleep(0)
local now = ngx.now()
ngx.say("elapsed: ", now - before)
';
}
--- request
GET /test
--- response_body_like chop
elapsed: 0
--- error_log
lua ready to sleep for
lua sleep timer expired: "/test?"
lua sleep timer expired: "/test?"
--- no_error_log
[error]
=== TEST 10: ngx.sleep unavailable in log_by_lua
--- config
location /t {
echo hello;
log_by_lua '
ngx.sleep(0.1)
';
}
--- request
GET /t
--- response_body
hello
--- wait: 0.1
--- error_log
API disabled in the context of log_by_lua*