From b0aa7f25aa0fee5ea2b632c681e2cf87f7fa595d Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 14 May 2024 16:59:33 -0300 Subject: [PATCH 1/3] test: add more context to help debug flaky test Ex: https://github.com/emqx/emqx/actions/runs/9084293110/job/24967912514?pr=13050#step:6:18330 --- apps/emqx/include/asserts.hrl | 7 ++++++- apps/emqx/test/emqx_takeover_SUITE.erl | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/emqx/include/asserts.hrl b/apps/emqx/include/asserts.hrl index a200394e4..2d492f825 100644 --- a/apps/emqx/include/asserts.hrl +++ b/apps/emqx/include/asserts.hrl @@ -45,6 +45,10 @@ ). -define(assertReceive(PATTERN, TIMEOUT), + ?assertReceive(PATTERN, TIMEOUT, #{}) +). + +-define(assertReceive(PATTERN, TIMEOUT, EXTRA), (fun() -> receive X__V = PATTERN -> X__V @@ -54,7 +58,8 @@ {module, ?MODULE}, {line, ?LINE}, {expression, (??PATTERN)}, - {mailbox, ?drainMailbox()} + {mailbox, ?drainMailbox()}, + {extra_info, EXTRA} ]} ) end diff --git a/apps/emqx/test/emqx_takeover_SUITE.erl b/apps/emqx/test/emqx_takeover_SUITE.erl index b9fce3b7f..3303ab9b1 100644 --- a/apps/emqx/test/emqx_takeover_SUITE.erl +++ b/apps/emqx/test/emqx_takeover_SUITE.erl @@ -1045,9 +1045,9 @@ assert_client_exit(Pid, v5, takenover) -> %% @ref: MQTT 5.0 spec [MQTT-3.1.4-3] ?assertReceive({'EXIT', Pid, {disconnected, ?RC_SESSION_TAKEN_OVER, _}}); assert_client_exit(Pid, v3, takenover) -> - ?assertReceive({'EXIT', Pid, {shutdown, tcp_closed}}); + ?assertReceive({'EXIT', Pid, {shutdown, tcp_closed}}, 1_000, #{pid => Pid}); assert_client_exit(Pid, v3, kicked) -> - ?assertReceive({'EXIT', Pid, _}); + ?assertReceive({'EXIT', Pid, _}, 1_000, #{pid => Pid}); assert_client_exit(Pid, v5, kicked) -> ?assertReceive({'EXIT', Pid, {disconnected, ?RC_ADMINISTRATIVE_ACTION, _}}); assert_client_exit(Pid, _, killed) -> From f062517ccb9339660a978fdca384c15ce36e8a5f Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 14 May 2024 17:11:05 -0300 Subject: [PATCH 2/3] test: stabilize flaky test --- apps/emqx/test/emqx_takeover_SUITE.erl | 35 ++++++++++++-------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/apps/emqx/test/emqx_takeover_SUITE.erl b/apps/emqx/test/emqx_takeover_SUITE.erl index 3303ab9b1..597274258 100644 --- a/apps/emqx/test/emqx_takeover_SUITE.erl +++ b/apps/emqx/test/emqx_takeover_SUITE.erl @@ -884,26 +884,23 @@ t_kick_session(Config) -> {will_qos, 1} ], Commands = - %% GIVEN: client connect with willmsg payload <<"willpayload_kick">> - [{fun start_client/5, [ClientId, ClientId, ?QOS_1, WillOpts]}] ++ - [ - {fun start_client/5, [ - <>/binary>>, WillTopic, ?QOS_1, [] - ]} - ] ++ - [ - %% kick may fail (not found) without this delay - { - fun(CTX) -> - timer:sleep(100), - CTX - end, - [] - } - ] ++ + lists:flatten([ + %% GIVEN: client connect with willmsg payload <<"willpayload_kick">> + {fun start_client/5, [ClientId, ClientId, ?QOS_1, WillOpts]}, + {fun start_client/5, [ + <>/binary>>, WillTopic, ?QOS_1, [] + ]}, + %% kick may fail (not found) without this delay + { + fun(CTX) -> + timer:sleep(300), + CTX + end, + [] + }, %% WHEN: client is kicked with kick_session - [{fun kick_client/2, [ClientId]}], - + {fun kick_client/2, [ClientId]} + ]), FCtx = lists:foldl( fun({Fun, Args}, Ctx) -> ct:pal("COMMAND: ~p ~p", [element(2, erlang:fun_info(Fun, name)), Args]), From bcbeadd4af04b1c44fd13778ab32ac5cff413512 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 14 May 2024 17:16:00 -0300 Subject: [PATCH 3/3] test: stabilize flaky test --- apps/emqx/test/emqx_takeover_SUITE.erl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/emqx/test/emqx_takeover_SUITE.erl b/apps/emqx/test/emqx_takeover_SUITE.erl index 597274258..345492d9e 100644 --- a/apps/emqx/test/emqx_takeover_SUITE.erl +++ b/apps/emqx/test/emqx_takeover_SUITE.erl @@ -1042,7 +1042,13 @@ assert_client_exit(Pid, v5, takenover) -> %% @ref: MQTT 5.0 spec [MQTT-3.1.4-3] ?assertReceive({'EXIT', Pid, {disconnected, ?RC_SESSION_TAKEN_OVER, _}}); assert_client_exit(Pid, v3, takenover) -> - ?assertReceive({'EXIT', Pid, {shutdown, tcp_closed}}, 1_000, #{pid => Pid}); + ?assertReceive( + {'EXIT', Pid, {shutdown, Reason}} when + Reason =:= tcp_closed orelse + Reason =:= closed, + 1_000, + #{pid => Pid} + ); assert_client_exit(Pid, v3, kicked) -> ?assertReceive({'EXIT', Pid, _}, 1_000, #{pid => Pid}); assert_client_exit(Pid, v5, kicked) ->