test(gw): fix the mqtt-sn frame tests

This commit is contained in:
JianBo He 2021-07-20 15:16:59 +08:00
parent 18eaadae08
commit 61473b8a5b
2 changed files with 42 additions and 37 deletions

View File

@ -22,10 +22,6 @@
-include_lib("emqx_gateway/src/mqttsn/include/emqx_sn.hrl"). -include_lib("emqx_gateway/src/mqttsn/include/emqx_sn.hrl").
-include_lib("eunit/include/eunit.hrl"). -include_lib("eunit/include/eunit.hrl").
-import(emqx_sn_frame, [ parse/1
, serialize/1
]).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Setups %% Setups
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
@ -33,122 +29,129 @@
all() -> all() ->
emqx_ct:all(?MODULE). emqx_ct:all(?MODULE).
parse(D) ->
{ok, P, _Rest, _State} = emqx_sn_frame:parse(D, #{}),
P.
serialize_pkt(P) ->
emqx_sn_frame:serialize_pkt(P, #{}).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Test cases %% Test cases
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
t_advertise(_) -> t_advertise(_) ->
Adv = ?SN_ADVERTISE_MSG(1, 100), Adv = ?SN_ADVERTISE_MSG(1, 100),
?assertEqual({ok, Adv}, parse(serialize(Adv))). ?assertEqual(Adv, parse(serialize_pkt(Adv))).
t_searchgw(_) -> t_searchgw(_) ->
Sgw = #mqtt_sn_message{type = ?SN_SEARCHGW, variable = 1}, Sgw = #mqtt_sn_message{type = ?SN_SEARCHGW, variable = 1},
?assertEqual({ok, Sgw}, parse(serialize(Sgw))). ?assertEqual(Sgw, parse(serialize_pkt(Sgw))).
t_gwinfo(_) -> t_gwinfo(_) ->
GwInfo = #mqtt_sn_message{type = ?SN_GWINFO, variable = {2, <<"EMQGW">>}}, GwInfo = #mqtt_sn_message{type = ?SN_GWINFO, variable = {2, <<"EMQGW">>}},
?assertEqual({ok, GwInfo}, parse(serialize(GwInfo))). ?assertEqual(GwInfo, parse(serialize_pkt(GwInfo))).
t_connect(_) -> t_connect(_) ->
Flags = #mqtt_sn_flags{will = true, clean_start = true}, Flags = #mqtt_sn_flags{will = true, clean_start = true},
Conn = #mqtt_sn_message{type = ?SN_CONNECT, variable = {Flags, 4, 300, <<"ClientId">>}}, Conn = #mqtt_sn_message{type = ?SN_CONNECT, variable = {Flags, 4, 300, <<"ClientId">>}},
?assertEqual({ok, Conn}, parse(serialize(Conn))). ?assertEqual(Conn, parse(serialize_pkt(Conn))).
t_connack(_) -> t_connack(_) ->
ConnAck = #mqtt_sn_message{type = ?SN_CONNACK, variable = 2}, ConnAck = #mqtt_sn_message{type = ?SN_CONNACK, variable = 2},
?assertEqual({ok, ConnAck}, parse(serialize(ConnAck))). ?assertEqual(ConnAck, parse(serialize_pkt(ConnAck))).
t_willtopicreq(_) -> t_willtopicreq(_) ->
WtReq = #mqtt_sn_message{type = ?SN_WILLTOPICREQ}, WtReq = #mqtt_sn_message{type = ?SN_WILLTOPICREQ},
?assertEqual({ok, WtReq}, parse(serialize(WtReq))). ?assertEqual(WtReq, parse(serialize_pkt(WtReq))).
t_willtopic(_) -> t_willtopic(_) ->
Flags = #mqtt_sn_flags{qos = 1, retain = false}, Flags = #mqtt_sn_flags{qos = 1, retain = false},
Wt = #mqtt_sn_message{type = ?SN_WILLTOPIC, variable = {Flags, <<"WillTopic">>}}, Wt = #mqtt_sn_message{type = ?SN_WILLTOPIC, variable = {Flags, <<"WillTopic">>}},
?assertEqual({ok, Wt}, parse(serialize(Wt))). ?assertEqual(Wt, parse(serialize_pkt(Wt))).
t_willmsgreq(_) -> t_willmsgreq(_) ->
WmReq = #mqtt_sn_message{type = ?SN_WILLMSGREQ}, WmReq = #mqtt_sn_message{type = ?SN_WILLMSGREQ},
?assertEqual({ok, WmReq}, parse(serialize(WmReq))). ?assertEqual(WmReq, parse(serialize_pkt(WmReq))).
t_willmsg(_) -> t_willmsg(_) ->
WlMsg = #mqtt_sn_message{type = ?SN_WILLMSG, variable = <<"WillMsg">>}, WlMsg = #mqtt_sn_message{type = ?SN_WILLMSG, variable = <<"WillMsg">>},
?assertEqual({ok, WlMsg}, parse(serialize(WlMsg))). ?assertEqual(WlMsg, parse(serialize_pkt(WlMsg))).
t_register(_) -> t_register(_) ->
RegMsg = ?SN_REGISTER_MSG(1, 2, <<"Topic">>), RegMsg = ?SN_REGISTER_MSG(1, 2, <<"Topic">>),
?assertEqual({ok, RegMsg}, parse(serialize(RegMsg))). ?assertEqual(RegMsg, parse(serialize_pkt(RegMsg))).
t_regack(_) -> t_regack(_) ->
RegAck = ?SN_REGACK_MSG(1, 2, 0), RegAck = ?SN_REGACK_MSG(1, 2, 0),
?assertEqual({ok, RegAck}, parse(serialize(RegAck))). ?assertEqual(RegAck, parse(serialize_pkt(RegAck))).
t_publish(_) -> t_publish(_) ->
Flags = #mqtt_sn_flags{dup = false, qos = 1, retain = false, topic_id_type = 2#01}, Flags = #mqtt_sn_flags{dup = false, qos = 1, retain = false, topic_id_type = 2#01},
PubMsg = #mqtt_sn_message{type = ?SN_PUBLISH, variable = {Flags, 1, 2, <<"Payload">>}}, PubMsg = #mqtt_sn_message{type = ?SN_PUBLISH, variable = {Flags, 1, 2, <<"Payload">>}},
?assertEqual({ok, PubMsg}, parse(serialize(PubMsg))). ?assertEqual(PubMsg, parse(serialize_pkt(PubMsg))).
t_puback(_) -> t_puback(_) ->
PubAck = #mqtt_sn_message{type = ?SN_PUBACK, variable = {1, 2, 0}}, PubAck = #mqtt_sn_message{type = ?SN_PUBACK, variable = {1, 2, 0}},
?assertEqual({ok, PubAck}, parse(serialize(PubAck))). ?assertEqual(PubAck, parse(serialize_pkt(PubAck))).
t_pubrec(_) -> t_pubrec(_) ->
PubRec = #mqtt_sn_message{type = ?SN_PUBREC, variable = 16#1234}, PubRec = #mqtt_sn_message{type = ?SN_PUBREC, variable = 16#1234},
?assertEqual({ok, PubRec}, parse(serialize(PubRec))). ?assertEqual(PubRec, parse(serialize_pkt(PubRec))).
t_pubrel(_) -> t_pubrel(_) ->
PubRel = #mqtt_sn_message{type = ?SN_PUBREL, variable = 16#1234}, PubRel = #mqtt_sn_message{type = ?SN_PUBREL, variable = 16#1234},
?assertEqual({ok, PubRel}, parse(serialize(PubRel))). ?assertEqual(PubRel, parse(serialize_pkt(PubRel))).
t_pubcomp(_) -> t_pubcomp(_) ->
PubComp = #mqtt_sn_message{type = ?SN_PUBCOMP, variable = 16#1234}, PubComp = #mqtt_sn_message{type = ?SN_PUBCOMP, variable = 16#1234},
?assertEqual({ok, PubComp}, parse(serialize(PubComp))). ?assertEqual(PubComp, parse(serialize_pkt(PubComp))).
t_subscribe(_) -> t_subscribe(_) ->
Flags = #mqtt_sn_flags{dup = false, qos = 1, topic_id_type = 16#01}, Flags = #mqtt_sn_flags{dup = false, qos = 1, topic_id_type = 16#01},
SubMsg = #mqtt_sn_message{type = ?SN_SUBSCRIBE, variable = {Flags, 16#4321, 16}}, SubMsg = #mqtt_sn_message{type = ?SN_SUBSCRIBE, variable = {Flags, 16#4321, 16}},
?assertEqual({ok, SubMsg}, parse(serialize(SubMsg))). ?assertEqual(SubMsg, parse(serialize_pkt(SubMsg))).
t_suback(_) -> t_suback(_) ->
Flags = #mqtt_sn_flags{qos = 1}, Flags = #mqtt_sn_flags{qos = 1},
SubAck = #mqtt_sn_message{type = ?SN_SUBACK, variable = {Flags, 98, 89, 0}}, SubAck = #mqtt_sn_message{type = ?SN_SUBACK, variable = {Flags, 98, 89, 0}},
?assertEqual({ok, SubAck}, parse(serialize(SubAck))). ?assertEqual(SubAck, parse(serialize_pkt(SubAck))).
t_unsubscribe(_) -> t_unsubscribe(_) ->
Flags = #mqtt_sn_flags{dup = false, qos = 1, topic_id_type = 16#01}, Flags = #mqtt_sn_flags{dup = false, qos = 1, topic_id_type = 16#01},
UnSub = #mqtt_sn_message{type = ?SN_UNSUBSCRIBE, variable = {Flags, 16#4321, 16}}, UnSub = #mqtt_sn_message{type = ?SN_UNSUBSCRIBE, variable = {Flags, 16#4321, 16}},
?assertEqual({ok, UnSub}, parse(serialize(UnSub))). ?assertEqual(UnSub, parse(serialize_pkt(UnSub))).
t_unsuback(_) -> t_unsuback(_) ->
UnsubAck = #mqtt_sn_message{type = ?SN_UNSUBACK, variable = 72}, UnsubAck = #mqtt_sn_message{type = ?SN_UNSUBACK, variable = 72},
?assertEqual({ok, UnsubAck}, parse(serialize(UnsubAck))). ?assertEqual(UnsubAck, parse(serialize_pkt(UnsubAck))).
t_pingreq(_) -> t_pingreq(_) ->
Ping = #mqtt_sn_message{type = ?SN_PINGREQ, variable = <<>>}, Ping = #mqtt_sn_message{type = ?SN_PINGREQ, variable = <<>>},
?assertEqual({ok, Ping}, parse(serialize(Ping))), ?assertEqual(Ping, parse(serialize_pkt(Ping))),
Ping1 = #mqtt_sn_message{type = ?SN_PINGREQ, variable = <<"ClientId">>}, Ping1 = #mqtt_sn_message{type = ?SN_PINGREQ, variable = <<"ClientId">>},
?assertEqual({ok, Ping1}, parse(serialize(Ping1))). ?assertEqual(Ping1, parse(serialize_pkt(Ping1))).
t_pingresp(_) -> t_pingresp(_) ->
PingResp = #mqtt_sn_message{type = ?SN_PINGRESP}, PingResp = #mqtt_sn_message{type = ?SN_PINGRESP},
?assertEqual({ok, PingResp}, parse(serialize(PingResp))). ?assertEqual(PingResp, parse(serialize_pkt(PingResp))).
t_disconnect(_) -> t_disconnect(_) ->
Disconn = #mqtt_sn_message{type = ?SN_DISCONNECT}, Disconn = #mqtt_sn_message{type = ?SN_DISCONNECT},
?assertEqual({ok, Disconn}, parse(serialize(Disconn))). ?assertEqual(Disconn, parse(serialize_pkt(Disconn))).
t_willtopicupd(_) -> t_willtopicupd(_) ->
Flags = #mqtt_sn_flags{qos = 1, retain = true}, Flags = #mqtt_sn_flags{qos = 1, retain = true},
WtUpd = #mqtt_sn_message{type = ?SN_WILLTOPICUPD, variable = {Flags, <<"Topic">>}}, WtUpd = #mqtt_sn_message{type = ?SN_WILLTOPICUPD, variable = {Flags, <<"Topic">>}},
?assertEqual({ok, WtUpd}, parse(serialize(WtUpd))). ?assertEqual(WtUpd, parse(serialize_pkt(WtUpd))).
t_willmsgupd(_) -> t_willmsgupd(_) ->
WlMsgUpd = #mqtt_sn_message{type = ?SN_WILLMSGUPD, variable = <<"WillMsg">>}, WlMsgUpd = #mqtt_sn_message{type = ?SN_WILLMSGUPD, variable = <<"WillMsg">>},
?assertEqual({ok, WlMsgUpd}, parse(serialize(WlMsgUpd))). ?assertEqual(WlMsgUpd, parse(serialize_pkt(WlMsgUpd))).
t_willmsgresp(_) -> t_willmsgresp(_) ->
UpdResp = #mqtt_sn_message{type = ?SN_WILLMSGRESP, variable = 0}, UpdResp = #mqtt_sn_message{type = ?SN_WILLMSGRESP, variable = 0},
?assertEqual({ok, UpdResp}, parse(serialize(UpdResp))). ?assertEqual(UpdResp, parse(serialize_pkt(UpdResp))).
t_random_test(_) -> t_random_test(_) ->
random_test_body(), random_test_body(),

View File

@ -21,17 +21,19 @@
-compile({no_auto_import, [register/1]}). -compile({no_auto_import, [register/1]}).
-import(emqx_sn_frame,
[ parse/1
, serialize/1
]).
-define(ALL(Vars, Types, Exprs), -define(ALL(Vars, Types, Exprs),
?SETUP(fun() -> ?SETUP(fun() ->
State = do_setup(), State = do_setup(),
fun() -> do_teardown(State) end fun() -> do_teardown(State) end
end, ?FORALL(Vars, Types, Exprs))). end, ?FORALL(Vars, Types, Exprs))).
parse(D) ->
{ok, P, _Rest, _State} = emqx_sn_frame:parse(D, #{}),
P.
serialize(P) ->
emqx_sn_frame:serialize_pkt(P, #{}).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Properties %% Properties
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
@ -39,7 +41,7 @@
prop_parse_and_serialize() -> prop_parse_and_serialize() ->
?ALL(Msg, mqtt_sn_message(), ?ALL(Msg, mqtt_sn_message(),
begin begin
{ok, Msg} = parse(serialize(Msg)), Msg = parse(serialize(Msg)),
true true
end). end).