From 2e50985f359ddca61ce1839b480fb46002931d40 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Fri, 24 Mar 2023 11:40:36 +0800 Subject: [PATCH] fix: update testcase t_discard_session_race --- src/emqx_cm.erl | 4 ++++ test/emqx_cm_SUITE.erl | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/emqx_cm.erl b/src/emqx_cm.erl index dc9aa6c3e..1c14fec43 100644 --- a/src/emqx_cm.erl +++ b/src/emqx_cm.erl @@ -84,6 +84,10 @@ , get_connected_client_count/0 ]). +-ifdef(TEST). +-export([request_stepdown/3]). +-endif. + -type(chan_pid() :: pid()). %% Tables for channel management. diff --git a/test/emqx_cm_SUITE.erl b/test/emqx_cm_SUITE.erl index 1e075efe1..122ca81f5 100644 --- a/test/emqx_cm_SUITE.erl +++ b/test/emqx_cm_SUITE.erl @@ -314,16 +314,19 @@ flush_emqx_pool() -> t_discard_session_race(_) -> ClientId = rand_client_id(), + ConnMod = emqx_ws_connection, ?check_trace( begin #{conninfo := ConnInfo0} = ?ChanInfo, - ConnInfo = ConnInfo0#{conn_mod := emqx_ws_connection}, + ConnInfo = ConnInfo0#{conn_mod := ConnMod}, {Pid, Ref} = spawn_monitor(fun() -> receive stop -> exit(normal) end end), ok = emqx_cm:register_channel(ClientId, Pid, ConnInfo), Pid ! stop, receive {'DOWN', Ref, process, Pid, normal} -> ok end, - ok = emqx_cm:discard_session(ClientId), - {ok, _} = ?block_until(#{?snk_kind := "session_already_gone", pid := Pid}, 1000) + %% Here we simulate the situation where we are going to emqx_cm:discard_session/1 + %% but the session has died. + emqx_cm:request_stepdown(discard, ConnMod, Pid), + {ok, _} = ?block_until(#{?snk_kind := "session_already_gone", stale_pid := Pid}, 2000) end, fun(_, _) -> true