From dc95c1476a93c53b2c9b952993f0104d29123864 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Thu, 15 Apr 2021 18:05:45 +0800 Subject: [PATCH] fix(emqx_sn): willmsgs not sent --- apps/emqx_sn/src/emqx_sn_gateway.erl | 7 ++++--- apps/emqx_sn/test/emqx_sn_protocol_SUITE.erl | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/apps/emqx_sn/src/emqx_sn_gateway.erl b/apps/emqx_sn/src/emqx_sn_gateway.erl index cc96036de..2cef103bd 100644 --- a/apps/emqx_sn/src/emqx_sn_gateway.erl +++ b/apps/emqx_sn/src/emqx_sn_gateway.erl @@ -792,9 +792,10 @@ stop(Reason, State) -> ?LOG(stop_log_level(Reason), "stop due to ~p", [Reason]), case Reason of %% FIXME: The Will-Msg should publish when a Session terminated! - asleep_timeout -> do_publish_will(State); - keepalive_timeout -> do_publish_will(State); - _ -> ok + Reason when Reason =:= normal -> + ok; + _ -> + do_publish_will(State) end, {stop, {shutdown, Reason}, State}. diff --git a/apps/emqx_sn/test/emqx_sn_protocol_SUITE.erl b/apps/emqx_sn/test/emqx_sn_protocol_SUITE.erl index 097b4b5a4..836a06f23 100644 --- a/apps/emqx_sn/test/emqx_sn_protocol_SUITE.erl +++ b/apps/emqx_sn/test/emqx_sn_protocol_SUITE.erl @@ -808,25 +808,34 @@ t_publish_qos2_case03(_) -> t_will_case01(_) -> QoS = 1, Duration = 1, + WillMsg = <<10, 11, 12, 13, 14>>, + WillTopic = <<"abc">>, {ok, Socket} = gen_udp:open(0, [binary]), ClientId = <<"test">>, + + ok = emqx_broker:subscribe(WillTopic), + send_connect_msg_with_will(Socket, Duration, ClientId), ?assertEqual(<<2, ?SN_WILLTOPICREQ>>, receive_response(Socket)), - send_willtopic_msg(Socket, <<"abc">>, QoS), + send_willtopic_msg(Socket, WillTopic, QoS), ?assertEqual(<<2, ?SN_WILLMSGREQ>>, receive_response(Socket)), - send_willmsg_msg(Socket, <<10, 11, 12, 13, 14>>), + send_willmsg_msg(Socket, WillMsg), ?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)), send_pingreq_msg(Socket, undefined), ?assertEqual(<<2, ?SN_PINGRESP>>, receive_response(Socket)), % wait udp client keepalive timeout - timer:sleep(10000), - - receive_response(Socket), % ignore PUBACK + timer:sleep(2000), + receive + {deliver, WillTopic, #message{payload = WillMsg}} -> ok; + Msg -> ct:print("recevived --- unex: ~p", [Msg]) + after + 1000 -> ct:fail(wait_willmsg_timeout) + end, send_disconnect_msg(Socket, undefined), ?assertEqual(udp_receive_timeout, receive_response(Socket)),