# vim:set ts=4 sts=4 sw=4 et ft=: use Test::Nginx::Socket::Lua; use Cwd qw(cwd); workers(2); #repeat_each(2); plan tests => repeat_each() * (blocks() * 3); my $pwd = cwd(); our $HttpConfig = qq{ lua_package_path "$pwd/lib/?.lua;;"; lua_shared_dict cache_shm 1m; lua_shared_dict ipc_shm 1m; init_by_lua_block { -- local verbose = true local verbose = false local outfile = "$Test::Nginx::Util::ErrLogFile" -- local outfile = "/tmp/v.log" if verbose then local dump = require "jit.dump" dump.on(nil, outfile) else local v = require "jit.v" v.on(outfile) end require "resty.core" -- jit.opt.start("hotloop=1") -- jit.opt.start("loopunroll=1000000") -- jit.off() } }; run_tests(); __DATA__ === TEST 1: update() errors if no ipc --- http_config eval: $::HttpConfig --- config location = /t { content_by_lua_block { local mlcache = require "kong.resty.mlcache" local cache = assert(mlcache.new("my_mlcache", "cache_shm")) local ok, err = pcall(cache.update, cache, "foo") ngx.say(err) } } --- request GET /t --- response_body no polling configured, specify opts.ipc_shm or opts.ipc.poll --- no_error_log [error] === TEST 2: update() calls ipc poll() with timeout arg --- http_config eval: $::HttpConfig --- config location = /t { content_by_lua_block { local mlcache = require "kong.resty.mlcache" local cache = assert(mlcache.new("my_mlcache", "cache_shm", { ipc = { register_listeners = function() end, broadcast = function() end, poll = function(...) ngx.say("called poll() with args: ", ...) return true end, } })) assert(cache:update(3.5, "not me")) } } --- request GET /t --- response_body called poll() with args: 3.5 --- no_error_log [error] === TEST 3: update() JITs when no events to catch up --- http_config eval: $::HttpConfig --- config location = /t { content_by_lua_block { local mlcache = require "kong.resty.mlcache" local cache = assert(mlcache.new("my_mlcache", "cache_shm", { ipc_shm = "ipc_shm", })) for i = 1, 10e3 do assert(cache:update()) end } } --- request GET /t --- ignore_response_body --- no_error_log [error] --- error_log eval qr/\[TRACE\s+\d+ content_by_lua\(nginx\.conf:\d+\):8 loop\]/