diff --git a/t/broadcast.t b/t/broadcast.t index 23ed76a2..e737b606 100644 --- a/t/broadcast.t +++ b/t/broadcast.t @@ -7,7 +7,7 @@ use Test::Nginx::Socket::Lua; #repeat_each(2); -plan tests => repeat_each() * (blocks() * 7) + 2; +plan tests => repeat_each() * (blocks() * 14) + 2; $ENV{TEST_NGINX_HTML_DIR} ||= html_dir(); @@ -19,7 +19,6 @@ run_tests(); __DATA__ - === TEST 1: posting events and handling events, broadcast --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -39,10 +38,13 @@ __DATA__ ngx.log(ngx.ERR, "failed to init_worker events: ", err) end + local i = 0 + ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, - ", data=", data) - end) + i = i + 1 + ngx.log(ngx.DEBUG, i, " worker-events: handler event; source=", source, ", event=", event, + ", wid=", wid, ", by=", ngx.worker.id(), ", data=", data) + end) _G.ev = ev } @@ -69,22 +71,25 @@ __DATA__ GET /test --- response_body ok ---- error_log -event published to 4 workers +--- error_log eval +[ + qr/event published to 4 workers/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=0, data=01234567890/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=1, data=01234567890/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=2, data=01234567890/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=3, data=01234567890/ +] --- no_error_log [error] [crit] [alert] ---- grep_error_log eval: qr/worker-events: .*/ +--- grep_error_log eval: qr/worker-events: handling event; .*/ --- grep_error_log_out eval qr/^worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890$/ +worker-events: handling event; source=content_by_lua, event=request1, wid=\d+$/ + === TEST 2: posting events and handling events, local @@ -106,10 +111,18 @@ worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, d ngx.log(ngx.ERR, "failed to init_worker events: ", err) end + local i = 0 + ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=", source,", event=", event, ", wid=", wid, - ", data=", data) - end) + if wid then + i = 3 + else + i = i + 1 + end + + ngx.log(ngx.DEBUG, i, " worker-events: handler event; source=", source, ", event=", event, + ", wid=", wid, ", by=", ngx.worker.id(), ", data=", data) + end) _G.ev = ev } @@ -127,9 +140,10 @@ worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, d content_by_lua_block { local ev = _G.ev - ev:publish("current", "content_by_lua","request1","01234567890") - ev:publish("current", "content_by_lua","request2","01234567890") - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("current", "content_by_lua", "request1", "ABCDEFGHIJK") + ev:publish("current", "content_by_lua", "request2", "LMNOPQRSTUV") + ngx.sleep(0.05) + ev:publish("all", "content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -138,26 +152,29 @@ worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, d GET /test --- response_body ok ---- error_log -event published to 4 workers +--- error_log eval +[ + qr/event published to 4 workers/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=nil, by=\d+, data=ABCDEFGHIJK/, + qr/2 worker-events: handler event; source=content_by_lua, event=request2, wid=nil, by=\d+, data=LMNOPQRSTUV/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=0, data=01234567890/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=1, data=01234567890/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=2, data=01234567890/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=3, data=01234567890/ +] --- no_error_log [error] [crit] [alert] ---- grep_error_log eval: qr/worker-events: .*/ +--- grep_error_log eval: qr/worker-events: handling event; .*/ --- grep_error_log_out eval qr/^worker-events: handling event; source=content_by_lua, event=request1, wid=nil -worker-events: handler event; source=content_by_lua, event=request1, wid=nil, data=01234567890 worker-events: handling event; source=content_by_lua, event=request2, wid=nil -worker-events: handler event; source=content_by_lua, event=request2, wid=nil, data=01234567890 worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890 -worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ +worker-events: handling event; source=content_by_lua, event=request3, wid=\d+$/ + === TEST 3: worker.events 'one' being done, and only once @@ -181,9 +198,9 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d end ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=", source, ", event=", event, ", wid=", wid, - ", data=", tostring(data)) - end) + ngx.log(ngx.DEBUG, "worker-events: handler event; source=", source, ", event=", event, + ", wid=", wid, ", by=", ngx.worker.id(), ", data=", data) + end) _G.ev = ev } @@ -201,21 +218,17 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d content_by_lua_block { local ev = _G.ev - ev:publish("all", "content_by_lua","request1","01234567890") - - ngx.sleep(0.05) -- wait for logs + ev:publish("all", "content_by_lua", "request1", "01234567890") - ev:publish("unique_value", "content_by_lua", "request2", "01234567890") - ev:publish("unique_value", "content_by_lua", "request3", "01234567890") + ev:publish("unique_value", "content_by_lua", "request2", "ABCDEFGHIJK") + ev:publish("unique_value", "content_by_lua", "request3", "LMNOPQRSTUV") ngx.sleep(0.1) -- wait for unique timeout to expire - ev:publish("unique_value", "content_by_lua", "request4", "01234567890") - ev:publish("unique_value", "content_by_lua", "request5", "01234567890") + ev:publish("unique_value", "content_by_lua", "request4", "WXYZABCDEFG") + ev:publish("unique_value", "content_by_lua", "request5", "HIJKLMNOPQR") - ngx.sleep(0.05) -- wait for logs - - ev:publish("all", "content_by_lua", "request6", "01234567890") + ev:publish("all", "content_by_lua", "request6", "STUVWXYZABC") ngx.say("ok") } @@ -224,26 +237,25 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d GET /test --- response_body ok ---- error_log -event published to 1 workers -unique event is duplicate: unique_value -event published to 4 workers +--- error_log eval +[ + qr/event published to 1 workers/, + qr/unique event is duplicate: unique_value/, + qr/event published to 4 workers/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=0, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=1, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=2, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=3, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request2, wid=\d+, by=\d+, data=ABCDEFGHIJK/, + qr/worker-events: handler event; source=content_by_lua, event=request4, wid=\d+, by=\d+, data=WXYZABCDEFG/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=0, data=STUVWXYZABC/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=1, data=STUVWXYZABC/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=2, data=STUVWXYZABC/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=3, data=STUVWXYZABC/ +] --- no_error_log [error] [crit] [alert] ---- grep_error_log eval: qr/worker-events: handler .*/ ---- grep_error_log_out eval -qr/^worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request2, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request4, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890$/ - - - +LMNOPQRSTUV +HIJKLMNOPQR diff --git a/t/callback.t b/t/callback.t index 67a56abf..f46f338a 100644 --- a/t/callback.t +++ b/t/callback.t @@ -19,7 +19,7 @@ run_tests(); __DATA__ -=== TEST 1: registering and unsubscribeing event handlers at different levels +=== TEST 1: registering and unsubscribing event handlers at different levels --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?.lua;;"; --- config @@ -29,7 +29,7 @@ __DATA__ local wid = ngx.worker.id() local cb = function(extra, data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", data, ", callback=",extra) end @@ -48,36 +48,36 @@ __DATA__ ec:do_event({source = s, event = e, data = d, wid = wid}) end - post("content_by_lua","request1","123") - post("content_by_lua","request2","123") - post("content_by_lua","request3","123") + post("content_by_lua", "request1", "123") + post("content_by_lua", "request2", "123") + post("content_by_lua", "request3", "123") --ec.unsubscribe("*", "*") ec:unsubscribe(id1) - post("content_by_lua","request1","124") - post("content_by_lua","request2","124") - post("content_by_lua","request3","124") + post("content_by_lua", "request1", "124") + post("content_by_lua", "request2", "124") + post("content_by_lua", "request3", "124") --ec:unsubscribe("content_by_lua", "*") ec:unsubscribe(id2) - post("content_by_lua","request1","125") - post("content_by_lua","request2","125") - post("content_by_lua","request3","125") + post("content_by_lua", "request1", "125") + post("content_by_lua", "request2", "125") + post("content_by_lua", "request3", "125") ec:unsubscribe(id3) ec:unsubscribe(id4) - post("content_by_lua","request1","126") - post("content_by_lua","request2","126") - post("content_by_lua","request3","126") + post("content_by_lua", "request1", "126") + post("content_by_lua", "request2", "126") + post("content_by_lua", "request3", "126") ec:unsubscribe(id5) - post("content_by_lua","request1","127") - post("content_by_lua","request2","127") - post("content_by_lua","request3","127") + post("content_by_lua", "request1", "127") + post("content_by_lua", "request2", "127") + post("content_by_lua", "request3", "127") ngx.say("ok") } @@ -128,6 +128,7 @@ worker-events: handling event; source=content_by_lua, event=request2, wid=\d+ worker-events: handling event; source=content_by_lua, event=request3, wid=\d+$/ + === TEST 2: callback error handling --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?.lua;;"; @@ -150,7 +151,7 @@ worker-events: handling event; source=content_by_lua, event=request3, wid=\d+$/ -- non-serializable test data containing a function value -- use "nil" as data, reproducing issue #5 - post("content_by_lua","test_event", nil) + post("content_by_lua", "test_event", nil) ngx.say("ok") } @@ -167,6 +168,7 @@ something went wrong here! [emerg] + === TEST 3: callback error stacktrace --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?.lua;;"; @@ -190,7 +192,7 @@ something went wrong here! end ec:subscribe("*", "*", test_callback) - post("content_by_lua","test_event") + post("content_by_lua", "test_event") ngx.say("ok") } @@ -207,5 +209,3 @@ in function 'in_between' [crit] [alert] [emerg] - - diff --git a/t/events-compat.t b/t/events-compat.t index 88fe7132..11220f2d 100644 --- a/t/events-compat.t +++ b/t/events-compat.t @@ -37,7 +37,7 @@ __DATA__ assert(ev.configured()) ev.register(function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", data) end) } @@ -55,9 +55,9 @@ __DATA__ content_by_lua_block { local ev = require "resty.events.compat" - ev.post("content_by_lua","request1","01234567890") - ev.post_local("content_by_lua","request2","01234567890") - ev.post("content_by_lua","request3","01234567890") + ev.post("content_by_lua", "request1", "01234567890") + ev.post_local("content_by_lua", "request2", "01234567890") + ev.post("content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -82,6 +82,7 @@ worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ + === TEST 2: worker.events handling remote events --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -100,7 +101,7 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d assert(ev.configured()) ev.register(function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", tostring(data)) end) } @@ -118,9 +119,9 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d content_by_lua_block { local ev = require "resty.events.compat" - ev.post("content_by_lua","request1","01234567890") - ev.post_local("content_by_lua","request2","01234567890") - ev.post("content_by_lua","request3","01234567890") + ev.post("content_by_lua", "request1", "01234567890") + ev.post_local("content_by_lua", "request2", "01234567890") + ev.post("content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -145,6 +146,7 @@ worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ + === TEST 3: worker.events 'one' being done, and only once --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -164,7 +166,7 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d assert(ev.configured()) ev.register(function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", tostring(data)) end) } @@ -182,15 +184,15 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d content_by_lua_block { local ev = require "resty.events.compat" - ev.post("content_by_lua","request1","01234567890") - ev.post("content_by_lua","request2","01234567890", "unique_value") - ev.post("content_by_lua","request3","01234567890", "unique_value") + ev.post("content_by_lua", "request1", "01234567890") + ev.post("content_by_lua", "request2", "01234567890", "unique_value") + ev.post("content_by_lua", "request3", "01234567890", "unique_value") ngx.sleep(0.1) -- wait for unique timeout to expire - ev.post("content_by_lua","request4","01234567890", "unique_value") - ev.post("content_by_lua","request5","01234567890", "unique_value") - ev.post("content_by_lua","request6","01234567890") + ev.post("content_by_lua", "request4", "01234567890", "unique_value") + ev.post("content_by_lua", "request5", "01234567890", "unique_value") + ev.post("content_by_lua", "request6", "01234567890") ngx.say("ok") } @@ -216,6 +218,3 @@ worker-events: handling event; source=content_by_lua, event=request4, wid=\d+ worker-events: handler event; source=content_by_lua, event=request4, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request6, wid=\d+ worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890$/ - - - diff --git a/t/events.t b/t/events.t index a972779f..62b5d3d4 100644 --- a/t/events.t +++ b/t/events.t @@ -41,7 +41,7 @@ __DATA__ assert(not ev:is_ready()) ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", data) end) @@ -63,9 +63,9 @@ __DATA__ assert(ev:is_ready()) - ev:publish("all", "content_by_lua","request1","01234567890") - ev:publish("current", "content_by_lua","request2","01234567890") - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") + ev:publish("current", "content_by_lua", "request2", "01234567890") + ev:publish("all", "content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -90,6 +90,7 @@ worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ + === TEST 2: worker.events handling remote events --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -112,7 +113,7 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d assert(not ev:is_ready()) ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", tostring(data)) end) @@ -134,9 +135,9 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d assert(ev:is_ready()) - ev:publish("all", "content_by_lua","request1","01234567890") - ev:publish("current", "content_by_lua","request2","01234567890") - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") + ev:publish("current", "content_by_lua", "request2", "01234567890") + ev:publish("all", "content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -161,6 +162,7 @@ worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ + === TEST 3: worker.events 'one' being done, and only once --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -184,7 +186,7 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d assert(not ev:is_ready()) ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", tostring(data)) end) @@ -206,15 +208,15 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d assert(ev:is_ready()) - ev:publish("all", "content_by_lua","request1","01234567890") - ev:publish("unique_value", "content_by_lua","request2","01234567890") - ev:publish("unique_value", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") + ev:publish("unique_value", "content_by_lua", "request2", "01234567890") + ev:publish("unique_value", "content_by_lua", "request3", "01234567890") ngx.sleep(0.1) -- wait for unique timeout to expire - ev:publish("unique_value", "content_by_lua","request4","01234567890") - ev:publish("unique_value", "content_by_lua","request5","01234567890") - ev:publish("all", "content_by_lua","request6","01234567890") + ev:publish("unique_value", "content_by_lua", "request4", "01234567890") + ev:publish("unique_value", "content_by_lua", "request5", "01234567890") + ev:publish("all", "content_by_lua", "request6", "01234567890") ngx.say("ok") } @@ -242,6 +244,7 @@ worker-events: handling event; source=content_by_lua, event=request6, wid=\d+ worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890$/ + === TEST 4: publish events at anywhere --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -256,7 +259,7 @@ worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, d ngx.log(ngx.ERR, "failed to new events") end - ev:publish("all", "content_by_lua","request1","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") local ok, err = ev:init_worker() if not ok then @@ -265,14 +268,14 @@ worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, d assert(not ev:is_ready()) - ev:publish("current", "content_by_lua","request2","01234567890") + ev:publish("current", "content_by_lua", "request2", "01234567890") ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", tostring(data)) end) - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request3", "01234567890") _G.ev = ev } @@ -311,6 +314,7 @@ worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ + === TEST 5: configure with wrong params --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -399,6 +403,7 @@ optional "unique_timeout" option must be a number [emerg] + === TEST 6: publish events exceeding 65535 bytes --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -422,7 +427,7 @@ optional "unique_timeout" option must be a number assert(not ev:is_ready()) ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", big=", #data > 65535) end) @@ -456,7 +461,7 @@ optional "unique_timeout" option must be a number string.rep("a", 1024*1024)) ngx.say(err) - ok, err = ev:publish("all", "content_by_lua","request4","01234567890") + ok, err = ev:publish("all", "content_by_lua", "request4", "01234567890") ngx.say(err) ngx.say("ok") @@ -487,6 +492,7 @@ worker-events: handling event; source=content_by_lua, event=request4, wid=\d+ worker-events: handler event; source=content_by_lua, event=request4, wid=\d+, big=false$/ + === TEST 7: customize publish events limitation --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -510,7 +516,7 @@ worker-events: handler event; source=content_by_lua, event=request4, wid=\d+, b assert(not ev:is_ready()) ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", data) end) @@ -562,4 +568,3 @@ ok --- grep_error_log_out eval qr/^worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ - diff --git a/t/listening-off.t b/t/listening-off.t index 835b6d9f..46b9872a 100644 --- a/t/listening-off.t +++ b/t/listening-off.t @@ -42,7 +42,7 @@ __DATA__ assert(not ev:is_ready()) ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", data) end) @@ -55,9 +55,9 @@ __DATA__ assert(ev:is_ready()) - ev:publish("all", "content_by_lua","request1","01234567890") - ev:publish("current", "content_by_lua","request2","01234567890") - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") + ev:publish("current", "content_by_lua", "request2", "01234567890") + ev:publish("all", "content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -82,6 +82,7 @@ worker-events: handling event; source=content_by_lua, event=request3, wid=nil worker-events: handler event; source=content_by_lua, event=request3, wid=nil, data=01234567890$/ + === TEST 2: worker.events handling remote events --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -105,7 +106,7 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=nil, d assert(not ev:is_ready()) ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", tostring(data)) end) @@ -118,9 +119,9 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=nil, d assert(ev:is_ready()) - ev:publish("all", "content_by_lua","request1","01234567890") - ev:publish("current", "content_by_lua","request2","01234567890") - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") + ev:publish("current", "content_by_lua", "request2", "01234567890") + ev:publish("all", "content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -145,6 +146,7 @@ worker-events: handling event; source=content_by_lua, event=request3, wid=nil worker-events: handler event; source=content_by_lua, event=request3, wid=nil, data=01234567890$/ + === TEST 3: worker.events 'one' being done, and only once --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -169,7 +171,7 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=nil, d assert(not ev:is_ready()) ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", tostring(data)) end) @@ -182,15 +184,15 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=nil, d assert(ev:is_ready()) - ev:publish("all", "content_by_lua","request1","01234567890") - ev:publish("unique_value", "content_by_lua","request2","01234567890") - ev:publish("unique_value", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") + ev:publish("unique_value", "content_by_lua", "request2", "01234567890") + ev:publish("unique_value", "content_by_lua", "request3", "01234567890") ngx.sleep(0.1) -- wait for unique timeout to expire - ev:publish("unique_value", "content_by_lua","request4","01234567890") - ev:publish("unique_value", "content_by_lua","request5","01234567890") - ev:publish("all", "content_by_lua","request6","01234567890") + ev:publish("unique_value", "content_by_lua", "request4", "01234567890") + ev:publish("unique_value", "content_by_lua", "request5", "01234567890") + ev:publish("all", "content_by_lua", "request6", "01234567890") ngx.say("ok") } @@ -221,6 +223,7 @@ worker-events: handling event; source=content_by_lua, event=request6, wid=nil worker-events: handler event; source=content_by_lua, event=request6, wid=nil, data=01234567890$/ + === TEST 4: publish events at anywhere --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -237,11 +240,11 @@ worker-events: handler event; source=content_by_lua, event=request6, wid=nil, d end ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", tostring(data)) end) - ev:publish("all", "content_by_lua","request1","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") local ok, err = ev:init_worker() if not ok then @@ -250,9 +253,9 @@ worker-events: handler event; source=content_by_lua, event=request6, wid=nil, d assert(not ev:is_ready()) - ev:publish("current", "content_by_lua","request2","01234567890") + ev:publish("current", "content_by_lua", "request2", "01234567890") - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request3", "01234567890") _G.ev = ev } @@ -280,5 +283,3 @@ worker-events: handling event; source=content_by_lua, event=request2, wid=nil worker-events: handler event; source=content_by_lua, event=request2, wid=nil, data=01234567890 worker-events: handling event; source=content_by_lua, event=request3, wid=nil worker-events: handler event; source=content_by_lua, event=request3, wid=nil, data=01234567890$/ - - diff --git a/t/privileged.t b/t/privileged.t index 7b40bd3b..55bade17 100644 --- a/t/privileged.t +++ b/t/privileged.t @@ -7,7 +7,7 @@ use Test::Nginx::Socket::Lua; #repeat_each(2); -plan tests => repeat_each() * (blocks() * 8) + 2; +plan tests => repeat_each() * (blocks() * 15) + 2; $ENV{TEST_NGINX_HTML_DIR} ||= html_dir(); @@ -19,7 +19,6 @@ run_tests(); __DATA__ - === TEST 1: posting events and handling events, broadcast --- http_config lua_package_path "../lua-resty-core/lib/?.lua;lualib/?/init.lua;lualib/?.lua;;"; @@ -43,10 +42,13 @@ __DATA__ ngx.log(ngx.ERR, "failed to init_worker events: ", err) end + local i = 0 + ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, - ", data=", data) - end) + i = i + 1 + ngx.log(ngx.DEBUG, i, " worker-events: handler event; source=", source, ", event=", event, + ", wid=", wid, ", by=", (ngx.worker.id() or "nil"), ", data=", data) + end) _G.ev = ev } @@ -73,23 +75,26 @@ __DATA__ GET /test --- response_body ok ---- error_log -event published to 4 workers -setproctitle: "nginx: privileged agent process" +--- error_log eval +[ + qr/privileged agent process/, + qr/event published to 4 workers/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=0, data=01234567890/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=1, data=01234567890/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=2, data=01234567890/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=nil, data=01234567890/ +] --- no_error_log [error] [crit] [alert] ---- grep_error_log eval: qr/worker-events: .*/ +--- grep_error_log eval: qr/worker-events: handling event; .*/ --- grep_error_log_out eval qr/^worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890$/ +worker-events: handling event; source=content_by_lua, event=request1, wid=\d+$/ + === TEST 2: posting events and handling events, local @@ -115,10 +120,18 @@ worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, d ngx.log(ngx.ERR, "failed to init_worker events: ", err) end + local i = 0 + ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=", source,", event=", event, ", wid=", wid, - ", data=", data) - end) + if wid then + i = 3 + else + i = i + 1 + end + + ngx.log(ngx.DEBUG, i, " worker-events: handler event; source=", source, ", event=", event, + ", wid=", wid, ", by=", (ngx.worker.id() or "nil"), ", data=", data) + end) _G.ev = ev } @@ -136,9 +149,9 @@ worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, d content_by_lua_block { local ev = _G.ev - ev:publish("current", "content_by_lua","request1","01234567890") - ev:publish("current", "content_by_lua","request2","01234567890") - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("current", "content_by_lua", "request1", "ABCDEFGHIJK") + ev:publish("current", "content_by_lua", "request2", "LMNOPQRSTUV") + ev:publish("all", "content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -147,27 +160,30 @@ worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, d GET /test --- response_body ok ---- error_log -event published to 4 workers -setproctitle: "nginx: privileged agent process" +--- error_log eval +[ + qr/privileged agent process/, + qr/event published to 4 workers/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=nil, by=\d+, data=ABCDEFGHIJK/, + qr/2 worker-events: handler event; source=content_by_lua, event=request2, wid=nil, by=\d+, data=LMNOPQRSTUV/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=0, data=01234567890/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=1, data=01234567890/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=2, data=01234567890/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=nil, data=01234567890/ +] --- no_error_log [error] [crit] [alert] ---- grep_error_log eval: qr/worker-events: .*/ +--- grep_error_log eval: qr/worker-events: handling event; .*/ --- grep_error_log_out eval qr/^worker-events: handling event; source=content_by_lua, event=request1, wid=nil -worker-events: handler event; source=content_by_lua, event=request1, wid=nil, data=01234567890 worker-events: handling event; source=content_by_lua, event=request2, wid=nil -worker-events: handler event; source=content_by_lua, event=request2, wid=nil, data=01234567890 worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890 -worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ +worker-events: handling event; source=content_by_lua, event=request3, wid=\d+$/ + === TEST 3: worker.events 'one' being done, and only once @@ -195,9 +211,9 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d end ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=", source, ", event=", event, ", wid=", wid, - ", data=", tostring(data)) - end) + ngx.log(ngx.DEBUG, "worker-events: handler event; source=", source, ", event=", event, + ", wid=", wid, ", by=", (ngx.worker.id() or "nil"), ", data=", data) + end) _G.ev = ev } @@ -215,21 +231,17 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d content_by_lua_block { local ev = _G.ev - ev:publish("all", "content_by_lua","request1","01234567890") - - ngx.sleep(0.05) -- wait for logs + ev:publish("all", "content_by_lua", "request1", "01234567890") - ev:publish("unique_value", "content_by_lua", "request2", "01234567890") - ev:publish("unique_value", "content_by_lua", "request3", "01234567890") + ev:publish("unique_value", "content_by_lua", "request2", "ABCDEFGHIJK") + ev:publish("unique_value", "content_by_lua", "request3", "LMNOPQRSTUV") ngx.sleep(0.1) -- wait for unique timeout to expire - ev:publish("unique_value", "content_by_lua", "request4", "01234567890") - ev:publish("unique_value", "content_by_lua", "request5", "01234567890") + ev:publish("unique_value", "content_by_lua", "request4", "WXYZABCDEFG") + ev:publish("unique_value", "content_by_lua", "request5", "HIJKLMNOPQR") - ngx.sleep(0.05) -- wait for logs - - ev:publish("all", "content_by_lua", "request6", "01234567890") + ev:publish("all", "content_by_lua", "request6", "STUVWXYZABC") ngx.say("ok") } @@ -238,27 +250,27 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d GET /test --- response_body ok ---- error_log -event published to 1 workers -unique event is duplicate: unique_value -event published to 4 workers -setproctitle: "nginx: privileged agent process" +--- error_log eval +[ + qr/privileged agent process/, + qr/event published to 1 workers/, + qr/unique event is duplicate: unique_value/, + qr/event published to 4 workers/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=0, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=1, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=2, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=nil, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request2, wid=\d+, by=(\d+|nil), data=ABCDEFGHIJK/, + qr/worker-events: handler event; source=content_by_lua, event=request4, wid=\d+, by=(\d+|nil), data=WXYZABCDEFG/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=0, data=STUVWXYZABC/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=1, data=STUVWXYZABC/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=2, data=STUVWXYZABC/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=nil, data=STUVWXYZABC/ +] + --- no_error_log [error] [crit] [alert] ---- grep_error_log eval: qr/worker-events: handler .*/ ---- grep_error_log_out eval -qr/^worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request2, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request4, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890$/ - - - +LMNOPQRSTUV +HIJKLMNOPQR diff --git a/t/stream-broadcast.t b/t/stream-broadcast.t index 13599125..10aa4fdc 100644 --- a/t/stream-broadcast.t +++ b/t/stream-broadcast.t @@ -7,7 +7,7 @@ use Test::Nginx::Socket::Lua; #repeat_each(2); -plan tests => repeat_each() * (blocks() * 7) + 2; +plan tests => repeat_each() * (blocks() * 14) + 2; $ENV{TEST_NGINX_HTML_DIR} ||= html_dir(); @@ -19,7 +19,6 @@ run_tests(); __DATA__ - === TEST 1: posting events and handling events, broadcast --- main_config stream { @@ -40,10 +39,13 @@ __DATA__ ngx.log(ngx.ERR, "failed to init_worker events: ", err) end + local i = 0 + ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, - ", data=", data) - end) + i = i + 1 + ngx.log(ngx.DEBUG, i, " worker-events: handler event; source=", source, ", event=", event, + ", wid=", wid, ", by=", ngx.worker.id(), ", data=", data) + end) _G.ev = ev } @@ -59,7 +61,7 @@ __DATA__ content_by_lua_block { local ev = _G.ev - ev:publish("all", "content_by_lua","request1","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") ngx.say("ok") } @@ -91,22 +93,25 @@ __DATA__ GET /test --- response_body ok ---- error_log -event published to 4 workers +--- error_log eval +[ + qr/event published to 4 workers/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=0, data=01234567890/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=1, data=01234567890/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=2, data=01234567890/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=3, data=01234567890/ +] --- no_error_log [error] [crit] [alert] ---- grep_error_log eval: qr/worker-events: .*/ +--- grep_error_log eval: qr/worker-events: handling event; .*/ --- grep_error_log_out eval qr/^worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handling event; source=content_by_lua, event=request1, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890$/ +worker-events: handling event; source=content_by_lua, event=request1, wid=\d+$/ + === TEST 2: posting events and handling events, local @@ -129,10 +134,18 @@ worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, d ngx.log(ngx.ERR, "failed to init_worker events: ", err) end + local i = 0 + ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, - ", data=", data) - end) + if wid then + i = 3 + else + i = i + 1 + end + + ngx.log(ngx.DEBUG, i, " worker-events: handler event; source=", source, ", event=", event, + ", wid=", wid, ", by=", ngx.worker.id(), ", data=", data) + end) _G.ev = ev } @@ -148,9 +161,9 @@ worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, d content_by_lua_block { local ev = _G.ev - ev:publish("current", "content_by_lua","request1","01234567890") - ev:publish("current", "content_by_lua","request2","01234567890") - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("current", "content_by_lua", "request1", "ABCDEFGHIJK") + ev:publish("current", "content_by_lua", "request2", "LMNOPQRSTUV") + ev:publish("all", "content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -182,26 +195,29 @@ worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, d GET /test --- response_body ok ---- error_log -event published to 4 workers +--- error_log eval +[ + qr/event published to 4 workers/, + qr/1 worker-events: handler event; source=content_by_lua, event=request1, wid=nil, by=\d+, data=ABCDEFGHIJK/, + qr/2 worker-events: handler event; source=content_by_lua, event=request2, wid=nil, by=\d+, data=LMNOPQRSTUV/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=0, data=01234567890/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=1, data=01234567890/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=2, data=01234567890/, + qr/3 worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, by=3, data=01234567890/ +] --- no_error_log [error] [crit] [alert] ---- grep_error_log eval: qr/worker-events: .*/ +--- grep_error_log eval: qr/worker-events: handling event; .*/ --- grep_error_log_out eval qr/^worker-events: handling event; source=content_by_lua, event=request1, wid=nil -worker-events: handler event; source=content_by_lua, event=request1, wid=nil, data=01234567890 worker-events: handling event; source=content_by_lua, event=request2, wid=nil -worker-events: handler event; source=content_by_lua, event=request2, wid=nil, data=01234567890 -worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ -worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ +worker-events: handling event; source=content_by_lua, event=request3, wid=\d+$/ + === TEST 3: worker.events 'one' being done, and only once @@ -226,9 +242,9 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d end ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, - ", data=", tostring(data)) - end) + ngx.log(ngx.DEBUG, "worker-events: handler event; source=", source, ", event=", event, + ", wid=", wid, ", by=", ngx.worker.id(), ", data=", data) + end) _G.ev = ev } @@ -244,21 +260,17 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d content_by_lua_block { local ev = _G.ev - ev:publish("all", "content_by_lua","request1","01234567890") - - ngx.sleep(0.05) -- wait for logs + ev:publish("all", "content_by_lua", "request1", "01234567890") - ev:publish("unique_value", "content_by_lua","request2","01234567890") - ev:publish("unique_value", "content_by_lua","request3","01234567890") + ev:publish("unique_value", "content_by_lua", "request2", "ABCDEFGHIJK") + ev:publish("unique_value", "content_by_lua", "request3", "LMNOPQRSTUV") ngx.sleep(0.1) -- wait for unique timeout to expire - ev:publish("unique_value", "content_by_lua","request4","01234567890") - ev:publish("unique_value", "content_by_lua","request5","01234567890") + ev:publish("unique_value", "content_by_lua", "request4", "WXYZABCDEFG") + ev:publish("unique_value", "content_by_lua", "request5", "HIJKLMNOPQR") - ngx.sleep(0.05) -- wait for logs - - ev:publish("all", "content_by_lua","request6","01234567890") + ev:publish("all", "content_by_lua", "request6", "STUVWXYZABC") ngx.say("ok") } @@ -290,26 +302,25 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d GET /test --- response_body ok ---- error_log -event published to 1 workers -unique event is duplicate: unique_value -event published to 4 workers +--- error_log eval +[ + qr/event published to 1 workers/, + qr/unique event is duplicate: unique_value/, + qr/event published to 4 workers/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=0, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=1, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=2, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, by=3, data=01234567890/, + qr/worker-events: handler event; source=content_by_lua, event=request2, wid=\d+, by=\d+, data=ABCDEFGHIJK/, + qr/worker-events: handler event; source=content_by_lua, event=request4, wid=\d+, by=\d+, data=WXYZABCDEFG/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=0, data=STUVWXYZABC/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=1, data=STUVWXYZABC/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=2, data=STUVWXYZABC/, + qr/worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, by=3, data=STUVWXYZABC/ +] --- no_error_log [error] [crit] [alert] ---- grep_error_log eval: qr/worker-events: handler .*/ ---- grep_error_log_out eval -qr/^worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request1, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request2, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request4, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890 -worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890$/ - - - +LMNOPQRSTUV +HIJKLMNOPQR diff --git a/t/stream-events.t b/t/stream-events.t index cc14dbce..c5500de2 100644 --- a/t/stream-events.t +++ b/t/stream-events.t @@ -40,7 +40,7 @@ __DATA__ end ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", data) end) @@ -58,9 +58,9 @@ __DATA__ content_by_lua_block { local ev = _G.ev - ev:publish("all", "content_by_lua","request1","01234567890") - ev:publish("current", "content_by_lua","request2","01234567890") - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") + ev:publish("current", "content_by_lua", "request2", "01234567890") + ev:publish("all", "content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -108,6 +108,7 @@ worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ + === TEST 2: worker.events handling remote events --- main_config stream { @@ -129,7 +130,7 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d end ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", tostring(data)) end) @@ -148,9 +149,9 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d content_by_lua_block { local ev = _G.ev - ev:publish("all", "content_by_lua","request1","01234567890") - ev:publish("current", "content_by_lua","request2","01234567890") - ev:publish("all", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") + ev:publish("current", "content_by_lua", "request2", "01234567890") + ev:publish("all", "content_by_lua", "request3", "01234567890") ngx.say("ok") } @@ -198,6 +199,7 @@ worker-events: handling event; source=content_by_lua, event=request3, wid=\d+ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, data=01234567890$/ + === TEST 3: worker.events 'one' being done, and only once --- main_config stream { @@ -220,7 +222,7 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d end ev:subscribe("*", "*", function(data, event, source, wid) - ngx.log(ngx.DEBUG, "worker-events: handler event; ","source=",source,", event=",event, ", wid=", wid, + ngx.log(ngx.DEBUG, "worker-events: handler event; ", "source=",source,", event=",event, ", wid=", wid, ", data=", tostring(data)) end) @@ -238,15 +240,15 @@ worker-events: handler event; source=content_by_lua, event=request3, wid=\d+, d content_by_lua_block { local ev = _G.ev - ev:publish("all", "content_by_lua","request1","01234567890") - ev:publish("unique_value", "content_by_lua","request2","01234567890") - ev:publish("unique_value", "content_by_lua","request3","01234567890") + ev:publish("all", "content_by_lua", "request1", "01234567890") + ev:publish("unique_value", "content_by_lua", "request2", "01234567890") + ev:publish("unique_value", "content_by_lua", "request3", "01234567890") ngx.sleep(0.1) -- wait for unique timeout to expire - ev:publish("unique_value", "content_by_lua","request4","01234567890") - ev:publish("unique_value", "content_by_lua","request5","01234567890") - ev:publish("all", "content_by_lua","request6","01234567890") + ev:publish("unique_value", "content_by_lua", "request4", "01234567890") + ev:publish("unique_value", "content_by_lua", "request5", "01234567890") + ev:publish("all", "content_by_lua", "request6", "01234567890") ngx.say("ok") } @@ -295,6 +297,3 @@ worker-events: handling event; source=content_by_lua, event=request4, wid=\d+ worker-events: handler event; source=content_by_lua, event=request4, wid=\d+, data=01234567890 worker-events: handling event; source=content_by_lua, event=request6, wid=\d+ worker-events: handler event; source=content_by_lua, event=request6, wid=\d+, data=01234567890$/ - - -