Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(tests): fix tests to not be order dependent on multi-worker scenario #46

Merged
merged 1 commit into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 73 additions & 61 deletions t/broadcast.t
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand All @@ -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;;";
Expand All @@ -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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems the i here is used only once. I assume it is for test style consistency.

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
}
Expand All @@ -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
Expand All @@ -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
}
Expand All @@ -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")
}
Expand All @@ -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
Expand All @@ -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
}
Expand All @@ -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")
}
Expand All @@ -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
42 changes: 21 additions & 21 deletions t/callback.t
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Expand All @@ -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")
}
Expand Down Expand Up @@ -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;;";
Expand All @@ -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")
}
Expand All @@ -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;;";
Expand All @@ -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")
}
Expand All @@ -207,5 +209,3 @@ in function 'in_between'
[crit]
[alert]
[emerg]


Loading
Loading