diff --git a/apps/emqx/test/emqx_message_SUITE.erl b/apps/emqx/test/emqx_message_SUITE.erl index c97c0d899..7bf6c9a7e 100644 --- a/apps/emqx/test/emqx_message_SUITE.erl +++ b/apps/emqx/test/emqx_message_SUITE.erl @@ -141,18 +141,50 @@ t_undefined_headers(_) -> Msg2 = emqx_message:set_header(c, 3, Msg), ?assertEqual(3, emqx_message:get_header(c, Msg2)). -t_is_expired(_) -> +t_is_expired_1(_) -> + test_msg_expired_property(?MODULE). + +t_is_expired_2(_) -> + %% if the 'Message-Expiry-Interval' property is set, the message_expiry_interval should be ignored + try + emqx_config:put( + maps:from_list([{list_to_atom(Root), #{}} || Root <- emqx_zone_schema:roots()]) + ), + emqx_config:put_zone_conf(?MODULE, [mqtt, message_expiry_interval], timer:seconds(10)), + test_msg_expired_property(?MODULE) + after + emqx_config:erase_all() + end. + +t_is_expired_3(_) -> + try + emqx_config:put( + maps:from_list([{list_to_atom(Root), #{}} || Root <- emqx_zone_schema:roots()]) + ), + emqx_config:put_zone_conf(?MODULE, [mqtt, message_expiry_interval], 100), + Msg = emqx_message:make(<<"clientid">>, <<"topic">>, <<"payload">>), + ?assertNot(emqx_message:is_expired(Msg, ?MODULE)), + timer:sleep(120), + ?assert(emqx_message:is_expired(Msg, ?MODULE)) + after + emqx_config:erase_all() + end. + +test_msg_expired_property(Zone) -> Msg = emqx_message:make(<<"clientid">>, <<"topic">>, <<"payload">>), - ?assertNot(emqx_message:is_expired(Msg, ?MODULE)), + ?assertNot(emqx_message:is_expired(Msg, Zone)), Msg1 = emqx_message:set_headers(#{properties => #{'Message-Expiry-Interval' => 1}}, Msg), timer:sleep(500), - ?assertNot(emqx_message:is_expired(Msg1, ?MODULE)), + ?assertNot(emqx_message:is_expired(Msg1, Zone)), timer:sleep(600), - ?assert(emqx_message:is_expired(Msg1, ?MODULE)), + ?assert(emqx_message:is_expired(Msg1, Zone)). + +t_update_expired(_) -> + Msg = emqx_message:make(<<"clientid">>, <<"topic">>, <<"payload">>), timer:sleep(1000), - Msg = emqx_message:update_expiry(Msg), - Msg2 = emqx_message:update_expiry(Msg1), - Props = emqx_message:get_header(properties, Msg2), + ?assertEqual(Msg, emqx_message:update_expiry(Msg)), + Msg1 = emqx_message:set_headers(#{properties => #{'Message-Expiry-Interval' => 1}}, Msg), + Props = emqx_message:get_header(properties, emqx_message:update_expiry(Msg1)), ?assertEqual(1, maps:get('Message-Expiry-Interval', Props)). % t_to_list(_) ->