From 9c1972020c47124dd3f9a7595502a1ab58b75c98 Mon Sep 17 00:00:00 2001 From: Zaiming Shi Date: Wed, 10 Nov 2021 22:49:34 +0100 Subject: [PATCH 1/2] test: fix flaky test emqx_stomp_SUITE:t_rest_clienit_inf --- apps/emqx/src/emqx_pool.erl | 14 +++++++++++++- apps/emqx_gateway/test/emqx_stomp_SUITE.erl | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/emqx/src/emqx_pool.erl b/apps/emqx/src/emqx_pool.erl index 8b9508768..c34ae61ae 100644 --- a/apps/emqx/src/emqx_pool.erl +++ b/apps/emqx/src/emqx_pool.erl @@ -32,7 +32,7 @@ ]). -ifdef(TEST). --export([worker/0]). +-export([worker/0, flush_async_tasks/0]). -endif. %% gen_server callbacks @@ -139,3 +139,15 @@ run({F, A}) when is_function(F), is_list(A) -> run(Fun) when is_function(Fun) -> Fun(). +-ifdef(TEST). +%% This help function creates a large enough number of async tasks +%% to force flush the pool workers. +%% The number of tasks should be large enough to ensure all workers have +%% the chance to work on at least one of the tasks. +flush_async_tasks() -> + Ref = make_ref(), + Self = self(), + L = lists:seq(1, 997), + lists:foreach(fun(I) -> emqx_pool:async_submit(fun() -> Self ! {done, Ref, I} end, []) end, L), + lists:foreach(fun(I) -> receive {done, Ref, I} -> ok end end, L). +-endif. diff --git a/apps/emqx_gateway/test/emqx_stomp_SUITE.erl b/apps/emqx_gateway/test/emqx_stomp_SUITE.erl index 8436b7312..13fced1c2 100644 --- a/apps/emqx_gateway/test/emqx_stomp_SUITE.erl +++ b/apps/emqx_gateway/test/emqx_stomp_SUITE.erl @@ -403,6 +403,7 @@ t_rest_clienit_info(_) -> %% kickout {204, _} = request(delete, ClientPath), + ok = emqx_pool:flush_async_tasks(), {200, Clients2} = request(get, "/gateway/stomp/clients"), ?assertEqual(0, length(maps:get(data, Clients2))) end). From b96a106463502654927dcbb04f569a250dc6b12d Mon Sep 17 00:00:00 2001 From: Zaiming Shi Date: Wed, 10 Nov 2021 22:54:58 +0100 Subject: [PATCH 2/2] style: make elvis happy --- apps/emqx_gateway/test/emqx_stomp_SUITE.erl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/emqx_gateway/test/emqx_stomp_SUITE.erl b/apps/emqx_gateway/test/emqx_stomp_SUITE.erl index 13fced1c2..8d1a0cd75 100644 --- a/apps/emqx_gateway/test/emqx_stomp_SUITE.erl +++ b/apps/emqx_gateway/test/emqx_stomp_SUITE.erl @@ -97,7 +97,8 @@ t_connect(_) -> % {ok, Data} = gen_tcp:recv(Sock, 0), % {ok, #stomp_frame{command = <<"ERROR">>, % headers = _, - % body = <<"Login or passcode error!">>}, _, _} = parse(Data) + % body = <<"Login or passcode error!">>}, _, _} = + % parse(Data) % end), %% Connect will be failed, because of bad version @@ -109,9 +110,12 @@ t_connect(_) -> {<<"passcode">>, <<"guest">>}, {<<"heart-beat">>, <<"1000,2000">>}])), {ok, Data} = gen_tcp:recv(Sock, 0), - {ok, #stomp_frame{command = <<"ERROR">>, - headers = _, - body = <<"Login Failed: Supported protocol versions < 1.2">>}, _, _} = parse(Data) + {ok, + #stomp_frame{command = <<"ERROR">>, + headers = _, + body = <<"Login Failed: Supported protocol versions < 1.2">>}, + _, + _ } = parse(Data) end). t_heartbeat(_) ->