Skip to content

Commit

Permalink
change: we now avoid running init_by_lua* in signaller processes and …
Browse files Browse the repository at this point in the history
…when testing the nginx configuration.

Signed-off-by: Thibault Charbonnier <[email protected]>
  • Loading branch information
spacewander authored and thibaultcha committed Jan 8, 2019
1 parent e76292d commit 7c2b58e
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/ngx_http_lua_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,10 @@ ngx_http_lua_init(ngx_conf_t *cf)
#endif
ngx_str_t name = ngx_string("host");

if (ngx_process == NGX_PROCESS_SIGNALLER || ngx_test_config) {
return NGX_OK;
}

lmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_lua_module);

lmcf->host_var_index = ngx_http_get_variable_index(cf, &name);
Expand Down
131 changes: 131 additions & 0 deletions t/160-disable-init-by-lua.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
use Test::Nginx::Socket::Lua;

repeat_each(2);

plan tests => repeat_each() * (blocks() * 2);

$ENV{TEST_NGINX_HTML_DIR} ||= html_dir();

my $html_dir = $ENV{TEST_NGINX_HTML_DIR};
my $http_config = <<_EOC_;
init_by_lua_block {
function set_up_ngx_tmp_conf()
local conf = [[
events {
worker_connections 64;
}
http {
init_by_lua_block {
ngx.log(ngx.ERR, "run init_by_lua")
}
}
]]

assert(os.execute("mkdir -p $html_dir/logs"))

local conf_file = "$html_dir/nginx.conf"
local f, err = io.open(conf_file, "w")
if not f then
ngx.log(ngx.ERR, err)
return
end

assert(f:write(conf))

return conf_file
end

function get_ngx_bin_path()
local ffi = require "ffi"
ffi.cdef[[char **ngx_argv;]]
return ffi.string(ffi.C.ngx_argv[0])
end
}
_EOC_

add_block_preprocessor(sub {
my $block = shift;

if (!defined $block->http_config) {
$block->set_value("http_config", $http_config);
}

if (!defined $block->request) {
$block->set_value("request", "GET /t");
}
});

log_level("warn");
no_long_string();
run_tests();

__DATA__

=== TEST 1: ensure init_by_lua* is not run in signaller process
--- config
location = /t {
content_by_lua_block {
local conf_file = set_up_ngx_tmp_conf()
local nginx = get_ngx_bin_path()

local cmd = nginx .. " -p $TEST_NGINX_HTML_DIR -c " .. conf_file .. " -s reopen"
local p, err = io.popen(cmd)
if not p then
ngx.log(ngx.ERR, err)
return
end

local out, err = p:read("*a")
if not out then
ngx.log(ngx.ERR, err)

else
ngx.log(ngx.WARN, out)
end
}
}
--- no_error_log eval
qr/\[error\] .*? init_by_lua:\d+: run init_by_lua/



=== TEST 2: init_by_lua* does not run when testing Nginx configuration
--- config
location = /t {
content_by_lua_block {
local conf_file = set_up_ngx_tmp_conf()
local nginx = get_ngx_bin_path()

local cmd = nginx .. " -p $TEST_NGINX_HTML_DIR -c " .. conf_file .. " -t"
local p, err = io.popen(cmd)
if not p then
ngx.log(ngx.ERR, err)
return
end

local out, err = p:read("*a")
if not out then
ngx.log(ngx.ERR, err)

else
ngx.log(ngx.WARN, out)
end

local cmd = nginx .. " -p $TEST_NGINX_HTML_DIR -c " .. conf_file .. " -T"
local p, err = io.popen(cmd)
if not p then
ngx.log(ngx.ERR, err)
return
end

local out, err = p:read("*a")
if not out then
ngx.log(ngx.ERR, err)

else
ngx.log(ngx.WARN, out)
end
}
}
--- no_error_log eval
qr/\[error\] .*? init_by_lua:\d+: run init_by_lua/

0 comments on commit 7c2b58e

Please sign in to comment.