215 lines
4.2 KiB
Perl
215 lines
4.2 KiB
Perl
# 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
|
||
|