nginx-sid/debian/modules/nginx-lua/t/047-match-jit.t
2015-11-13 16:07:02 +02:00

215 lines
4.2 KiB
Perl
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# vim:set ft= ts=4 sw=4 et fdm=marker:
use Test::Nginx::Socket::Lua;
#worker_connections(1014);
#master_on();
#workers(2);
#log_level('warn');
repeat_each(2);
plan tests => repeat_each() * (blocks() * 2 + 5);
#no_diff();
no_long_string();
run_tests();
__DATA__
=== TEST 1: matched with j
--- config
location /re {
content_by_lua '
m = ngx.re.match("hello, 1234", "([0-9]+)", "j")
if m then
ngx.say(m[0])
else
ngx.say("not matched!")
end
';
}
--- request
GET /re
--- response_body
1234
--- error_log
pcre JIT compiling result: 1
=== TEST 2: not matched with j
--- config
location /re {
content_by_lua '
m = ngx.re.match("hello, world", "([0-9]+)", "j")
if m then
ngx.say(m[0])
else
ngx.say("not matched!")
end
';
}
--- request
GET /re
--- response_body
not matched!
--- error_log
pcre JIT compiling result: 1
=== TEST 3: matched with jo
--- config
location /re {
content_by_lua '
m = ngx.re.match("hello, 1234", "([0-9]+)", "jo")
if m then
ngx.say(m[0])
else
ngx.say("not matched!")
end
';
}
--- request
GET /re
--- response_body
1234
--- grep_error_log eval
qr/pcre JIT compiling result: \d+/
--- grep_error_log_out eval
["pcre JIT compiling result: 1\n", ""]
=== TEST 4: not matched with jo
--- config
location /re {
content_by_lua '
m = ngx.re.match("hello, world", "([0-9]+)", "jo")
if m then
ngx.say(m[0])
else
ngx.say("not matched!")
end
';
}
--- request
GET /re
--- response_body
not matched!
--- grep_error_log eval
qr/pcre JIT compiling result: \d+/
--- grep_error_log_out eval
["pcre JIT compiling result: 1\n", ""]
=== TEST 5: bad pattern
--- config
location /re {
content_by_lua '
local m, err = ngx.re.match("hello\\nworld", "(abc", "j")
if m then
ngx.say(m[0])
else
if err then
ngx.say("error: ", err)
else
ngx.say("not matched: ", m)
end
end
';
}
--- request
GET /re
--- response_body
error: pcre_compile() failed: missing ) in "(abc"
--- no_error_log
[error]
=== TEST 6: just hit match limit
--- http_config
lua_regex_match_limit 2940;
--- config
location /re {
content_by_lua_file html/a.lua;
}
--- user_files
>>> a.lua
local re = [==[(?i:([\s'\"`´\(\)]*)?([\d\w]+)([\s'\"`´\(\)]*)?(?:=|<=>|r?like|sounds\s+like|regexp)([\s'\"`´\(\)]*)?\2|([\s'\"`´\(\)]*)?([\d\w]+)([\s'\"`´\(\)]*)?(?:!=|<=|>=|<>|<|>|\^|is\s+not|not\s+like|not\s+regexp)([\s'\"`´\(\)]*)?(?!\6)([\d\w]+))]==]
s = string.rep([[ABCDEFG]], 21)
local start = ngx.now()
local res, err = ngx.re.match(s, re, "jo")
--[[
ngx.update_time()
local elapsed = ngx.now() - start
ngx.say(elapsed, " sec elapsed.")
]]
if not res then
if err then
ngx.say("error: ", err)
return
end
ngx.say("failed to match")
return
end
--- request
GET /re
--- response_body
error: pcre_exec() failed: -8
=== TEST 7: just not hit match limit
--- http_config
lua_regex_match_limit 2950;
--- config
location /re {
content_by_lua_file html/a.lua;
}
--- user_files
>>> a.lua
local re = [==[(?i:([\s'\"`´\(\)]*)?([\d\w]+)([\s'\"`´\(\)]*)?(?:=|<=>|r?like|sounds\s+like|regexp)([\s'\"`´\(\)]*)?\2|([\s'\"`´\(\)]*)?([\d\w]+)([\s'\"`´\(\)]*)?(?:!=|<=|>=|<>|<|>|\^|is\s+not|not\s+like|not\s+regexp)([\s'\"`´\(\)]*)?(?!\6)([\d\w]+))]==]
s = string.rep([[ABCDEFG]], 21)
local start = ngx.now()
local res, err = ngx.re.match(s, re, "jo")
--[[
ngx.update_time()
local elapsed = ngx.now() - start
ngx.say(elapsed, " sec elapsed.")
]]
if not res then
if err then
ngx.say("error: ", err)
return
end
ngx.say("failed to match")
return
end
--- request
GET /re
--- response_body
failed to match