|
|
|
@ -51,6 +51,8 @@
|
|
|
|
|
-define(CLIENTID, iolist_to_binary([atom_to_list(?FUNCTION_NAME), "-",
|
|
|
|
|
integer_to_list(erlang:system_time())])).
|
|
|
|
|
|
|
|
|
|
-elvis([{elvis_style, dont_repeat_yourself, disable}]).
|
|
|
|
|
|
|
|
|
|
-define(CONF_DEFAULT, <<"
|
|
|
|
|
gateway.mqttsn {
|
|
|
|
|
gateway_id = 1
|
|
|
|
@ -177,7 +179,7 @@ t_subscribe_case02(_) ->
|
|
|
|
|
Will = 0,
|
|
|
|
|
CleanSession = 0,
|
|
|
|
|
MsgId = 1,
|
|
|
|
|
TopicId = ?PREDEF_TOPIC_ID1, %this TopicId is the predefined topic id corresponding to ?PREDEF_TOPIC_NAME1
|
|
|
|
|
TopicId = ?PREDEF_TOPIC_ID1,
|
|
|
|
|
ReturnCode = 0,
|
|
|
|
|
{ok, Socket} = gen_udp:open(0, [binary]),
|
|
|
|
|
|
|
|
|
@ -227,8 +229,14 @@ t_subscribe_case03(_) ->
|
|
|
|
|
?assertEqual(<<2, ?SN_DISCONNECT>>, receive_response(Socket)),
|
|
|
|
|
gen_udp:close(Socket).
|
|
|
|
|
|
|
|
|
|
%%In this case We use predefined topic name to register and subcribe, and expect to receive the corresponding predefined topic id but not a new generated topic id from broker. We design this case to illustrate
|
|
|
|
|
%% emqx_sn_gateway's compatibility of dealing with predefined and normal topics. Once we give more restrictions to different topic id type, this case would be deleted or modified.
|
|
|
|
|
%% In this case We use predefined topic name to register and subcribe,
|
|
|
|
|
%% and expect to receive the corresponding predefined topic id but not a new
|
|
|
|
|
%% generated topic id from broker. We design this case to illustrate
|
|
|
|
|
%% emqx_sn_gateway's compatibility of dealing with predefined and normal
|
|
|
|
|
%% topics.
|
|
|
|
|
%%
|
|
|
|
|
%% Once we give more restrictions to different topic id type, this case
|
|
|
|
|
%% would be deleted or modified.
|
|
|
|
|
t_subscribe_case04(_) ->
|
|
|
|
|
Dup = 0,
|
|
|
|
|
QoS = 0,
|
|
|
|
@ -236,7 +244,7 @@ t_subscribe_case04(_) ->
|
|
|
|
|
Will = 0,
|
|
|
|
|
CleanSession = 0,
|
|
|
|
|
MsgId = 1,
|
|
|
|
|
TopicId = ?PREDEF_TOPIC_ID1, %this TopicId is the predefined topic id corresponding to ?PREDEF_TOPIC_NAME1
|
|
|
|
|
TopicId = ?PREDEF_TOPIC_ID1,
|
|
|
|
|
ReturnCode = 0,
|
|
|
|
|
{ok, Socket} = gen_udp:open(0, [binary]),
|
|
|
|
|
ClientId = ?CLIENTID,
|
|
|
|
@ -246,8 +254,12 @@ t_subscribe_case04(_) ->
|
|
|
|
|
send_register_msg(Socket, Topic1, MsgId),
|
|
|
|
|
?assertEqual(<<7, ?SN_REGACK, TopicId:16, MsgId:16, 0:8>>, receive_response(Socket)),
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, Topic1, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_unsubscribe_msg_normal_topic(Socket, Topic1, MsgId),
|
|
|
|
|
?assertEqual(<<4, ?SN_UNSUBACK, MsgId:16>>, receive_response(Socket)),
|
|
|
|
@ -277,21 +289,36 @@ t_subscribe_case05(_) ->
|
|
|
|
|
?assertEqual(<<7, ?SN_REGACK, TopicId1:16, MsgId:16, 0:8>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, <<"abcD">>, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId1:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId1:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, <<"/sport/#">>, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId0:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId0:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, <<"/a/+/water">>, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId0:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId0:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, <<"/Tom/Home">>, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1,
|
|
|
|
|
?SN_NORMAL_TOPIC:2, TopicId2:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId2:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
send_unsubscribe_msg_normal_topic(Socket, <<"abcD">>, MsgId),
|
|
|
|
|
?assertEqual(<<4, ?SN_UNSUBACK, MsgId:16>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
@ -316,19 +343,37 @@ t_subscribe_case06(_) ->
|
|
|
|
|
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
send_register_msg(Socket, <<"abc">>, MsgId),
|
|
|
|
|
?assertEqual(<<7, ?SN_REGACK, TopicId1:16, MsgId:16, 0:8>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<7, ?SN_REGACK, TopicId1:16, MsgId:16, 0:8>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_register_msg(Socket, <<"/blue/#">>, MsgId),
|
|
|
|
|
?assertEqual(<<7, ?SN_REGACK, TopicId0:16, MsgId:16, ?SN_RC_NOT_SUPPORTED:8>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<7, ?SN_REGACK, TopicId0:16,
|
|
|
|
|
MsgId:16, ?SN_RC_NOT_SUPPORTED:8>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_register_msg(Socket, <<"/blue/+/white">>, MsgId),
|
|
|
|
|
?assertEqual(<<7, ?SN_REGACK, TopicId0:16, MsgId:16, ?SN_RC_NOT_SUPPORTED:8>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<7, ?SN_REGACK, TopicId0:16,
|
|
|
|
|
MsgId:16, ?SN_RC_NOT_SUPPORTED:8>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
send_register_msg(Socket, <<"/$sys/rain">>, MsgId),
|
|
|
|
|
?assertEqual(<<7, ?SN_REGACK, TopicId2:16, MsgId:16, 0:8>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<7, ?SN_REGACK, TopicId2:16, MsgId:16, 0:8>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_short_topic(Socket, QoS, <<"Q2">>, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId0:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1,
|
|
|
|
|
CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId0:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_unsubscribe_msg_normal_topic(Socket, <<"Q2">>, MsgId),
|
|
|
|
|
?assertEqual(<<4, ?SN_UNSUBACK, MsgId:16>>, receive_response(Socket)),
|
|
|
|
@ -352,8 +397,12 @@ t_subscribe_case07(_) ->
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_predefined_topic(Socket, QoS, TopicId1, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, ?SN_INVALID_TOPIC_ID:16, MsgId:16, ?SN_RC_INVALID_TOPIC_ID>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
?SN_INVALID_TOPIC_ID:16, MsgId:16, ?SN_RC_INVALID_TOPIC_ID>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_unsubscribe_msg_predefined_topic(Socket, TopicId2, MsgId),
|
|
|
|
|
?assertEqual(<<4, ?SN_UNSUBACK, MsgId:16>>, receive_response(Socket)),
|
|
|
|
@ -375,8 +424,12 @@ t_subscribe_case08(_) ->
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_reserved_topic(Socket, QoS, TopicId2, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, ?SN_INVALID_TOPIC_ID:16, MsgId:16, ?SN_RC_NOT_SUPPORTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
?SN_INVALID_TOPIC_ID:16, MsgId:16, ?SN_RC_NOT_SUPPORTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_disconnect_msg(Socket, undefined),
|
|
|
|
|
?assertEqual(<<2, ?SN_DISCONNECT>>, receive_response(Socket)),
|
|
|
|
@ -400,15 +453,21 @@ t_publish_negqos_case09(_) ->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, Topic, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId1:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId1:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
MsgId1 = 3,
|
|
|
|
|
Payload1 = <<20, 21, 22, 23>>,
|
|
|
|
|
send_publish_msg_normal_topic(Socket, NegQoS, MsgId1, TopicId1, Payload1),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
case ?ENABLE_QOS3 of
|
|
|
|
|
true ->
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId1:16, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId1:16, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
What = receive_response(Socket),
|
|
|
|
|
?assertEqual(Eexp, What)
|
|
|
|
|
end,
|
|
|
|
@ -441,7 +500,9 @@ t_publish_qos0_case01(_) ->
|
|
|
|
|
send_publish_msg_normal_topic(Socket, QoS, MsgId1, TopicId1, Payload1),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId1:16, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId1:16, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
What = receive_response(Socket),
|
|
|
|
|
?assertEqual(Eexp, What),
|
|
|
|
|
|
|
|
|
@ -463,15 +524,21 @@ t_publish_qos0_case02(_) ->
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_predefined_topic(Socket, QoS, PredefTopicId, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, PredefTopicId:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
PredefTopicId:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
MsgId1 = 3,
|
|
|
|
|
Payload1 = <<20, 21, 22, 23>>,
|
|
|
|
|
send_publish_msg_predefined_topic(Socket, QoS, MsgId1, PredefTopicId, Payload1),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_PREDEFINED_TOPIC:2, PredefTopicId:16, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_PREDEFINED_TOPIC:2,
|
|
|
|
|
PredefTopicId:16, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
What = receive_response(Socket),
|
|
|
|
|
?assertEqual(Eexp, What),
|
|
|
|
|
|
|
|
|
@ -494,15 +561,21 @@ t_publish_qos0_case3(_) ->
|
|
|
|
|
|
|
|
|
|
Topic = <<"/a/b/c">>,
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, Topic, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
MsgId1 = 3,
|
|
|
|
|
Payload1 = <<20, 21, 22, 23>>,
|
|
|
|
|
send_publish_msg_predefined_topic(Socket, QoS, MsgId1, TopicId, Payload1),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId:16, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId:16, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
What = receive_response(Socket),
|
|
|
|
|
?assertEqual(Eexp, What),
|
|
|
|
|
|
|
|
|
@ -524,8 +597,12 @@ t_publish_qos0_case04(_) ->
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, <<"#">>, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId0:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId0:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
MsgId1 = 2,
|
|
|
|
|
Payload1 = <<20, 21, 22, 23>>,
|
|
|
|
@ -533,7 +610,9 @@ t_publish_qos0_case04(_) ->
|
|
|
|
|
send_publish_msg_short_topic(Socket, QoS, MsgId1, Topic, Payload1),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_SHORT_TOPIC:2, Topic/binary, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_SHORT_TOPIC:2,
|
|
|
|
|
Topic/binary, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
What = receive_response(Socket),
|
|
|
|
|
?assertEqual(Eexp, What),
|
|
|
|
|
|
|
|
|
@ -554,8 +633,12 @@ t_publish_qos0_case05(_) ->
|
|
|
|
|
send_connect_msg(Socket, ClientId),
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
send_subscribe_msg_short_topic(Socket, QoS, <<"/#">>, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId0:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId0:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
send_disconnect_msg(Socket, undefined),
|
|
|
|
|
?assertEqual(<<2, ?SN_DISCONNECT>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
@ -577,15 +660,21 @@ t_publish_qos0_case06(_) ->
|
|
|
|
|
|
|
|
|
|
Topic = <<"abc">>,
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, Topic, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId1:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId1:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
MsgId1 = 3,
|
|
|
|
|
Payload1 = <<20, 21, 22, 23>>,
|
|
|
|
|
send_publish_msg_normal_topic(Socket, QoS, MsgId1, TopicId1, Payload1),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId1:16, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
Eexp = <<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId1:16, (mid(0)):16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
What = receive_response(Socket),
|
|
|
|
|
?assertEqual(Eexp, What),
|
|
|
|
|
|
|
|
|
@ -607,16 +696,24 @@ t_publish_qos1_case01(_) ->
|
|
|
|
|
send_connect_msg(Socket, ClientId),
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, Topic, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1,
|
|
|
|
|
?SN_NORMAL_TOPIC:2, TopicId1:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId1:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
Payload1 = <<20, 21, 22, 23>>,
|
|
|
|
|
send_publish_msg_normal_topic(Socket, QoS, MsgId, TopicId1, Payload1),
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, TopicId1:16, MsgId:16, ?SN_RC_ACCEPTED>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, TopicId1:16,
|
|
|
|
|
MsgId:16, ?SN_RC_ACCEPTED>>, receive_response(Socket)),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
|
|
|
|
|
?assertEqual(<<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId1:16, MsgId:16, <<20, 21, 22, 23>>/binary>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(<<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId1:16, MsgId:16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
send_disconnect_msg(Socket, undefined),
|
|
|
|
|
gen_udp:close(Socket).
|
|
|
|
@ -635,12 +732,17 @@ t_publish_qos1_case02(_) ->
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_predefined_topic(Socket, QoS, PredefTopicId, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, PredefTopicId:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
PredefTopicId:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
Payload1 = <<20, 21, 22, 23>>,
|
|
|
|
|
send_publish_msg_predefined_topic(Socket, QoS, MsgId, PredefTopicId, Payload1),
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, PredefTopicId:16, MsgId:16, ?SN_RC_ACCEPTED>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, PredefTopicId:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
|
|
|
|
|
send_disconnect_msg(Socket, undefined),
|
|
|
|
@ -655,7 +757,8 @@ t_publish_qos1_case03(_) ->
|
|
|
|
|
send_connect_msg(Socket, ClientId),
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
send_publish_msg_predefined_topic(Socket, QoS, MsgId, tid(5), <<20, 21, 22, 23>>),
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, TopicId5:16, MsgId:16, ?SN_RC_INVALID_TOPIC_ID>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, TopicId5:16, MsgId:16, ?SN_RC_INVALID_TOPIC_ID>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_disconnect_msg(Socket, undefined),
|
|
|
|
|
?assertEqual(<<2, ?SN_DISCONNECT>>, receive_response(Socket)),
|
|
|
|
@ -674,15 +777,19 @@ t_publish_qos1_case04(_) ->
|
|
|
|
|
send_connect_msg(Socket, ClientId),
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
send_subscribe_msg_short_topic(Socket, QoS, <<"ab">>, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1,
|
|
|
|
|
?SN_NORMAL_TOPIC:2, TopicId0:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId0:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
Topic = <<"ab">>,
|
|
|
|
|
Payload1 = <<20, 21, 22, 23>>,
|
|
|
|
|
send_publish_msg_short_topic(Socket, QoS, MsgId, Topic, Payload1),
|
|
|
|
|
<<TopicIdShort:16>> = Topic,
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, TopicIdShort:16, MsgId:16, ?SN_RC_ACCEPTED>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, TopicIdShort:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
|
|
|
|
|
send_disconnect_msg(Socket, undefined),
|
|
|
|
@ -708,7 +815,9 @@ t_publish_qos1_case05(_) ->
|
|
|
|
|
|
|
|
|
|
send_publish_msg_short_topic(Socket, QoS, MsgId, <<"/#">>, <<20, 21, 22, 23>>),
|
|
|
|
|
<<TopicIdShort:16>> = <<"/#">>,
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, TopicIdShort:16, MsgId:16, ?SN_RC_NOT_SUPPORTED>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, TopicIdShort:16,
|
|
|
|
|
MsgId:16, ?SN_RC_NOT_SUPPORTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_disconnect_msg(Socket, undefined),
|
|
|
|
|
?assertEqual(<<2, ?SN_DISCONNECT>>, receive_response(Socket)),
|
|
|
|
@ -734,7 +843,8 @@ t_publish_qos1_case06(_) ->
|
|
|
|
|
|
|
|
|
|
send_publish_msg_short_topic(Socket, QoS, MsgId, <<"/+">>, <<20, 21, 22, 23>>),
|
|
|
|
|
<<TopicIdShort:16>> = <<"/+">>,
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, TopicIdShort:16, MsgId:16, ?SN_RC_NOT_SUPPORTED>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(<<7, ?SN_PUBACK, TopicIdShort:16,
|
|
|
|
|
MsgId:16, ?SN_RC_NOT_SUPPORTED>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_disconnect_msg(Socket, undefined),
|
|
|
|
|
?assertEqual(<<2, ?SN_DISCONNECT>>, receive_response(Socket)),
|
|
|
|
@ -761,7 +871,12 @@ t_publish_qos2_case01(_) ->
|
|
|
|
|
send_publish_msg_normal_topic(Socket, QoS, MsgId, TopicId1, Payload1),
|
|
|
|
|
?assertEqual(<<4, ?SN_PUBREC, MsgId:16>>, receive_response(Socket)),
|
|
|
|
|
send_pubrel_msg(Socket, MsgId),
|
|
|
|
|
?assertEqual(<<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId1:16, 1:16, <<20, 21, 22, 23>>/binary>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
TopicId1:16, 1:16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
?assertEqual(<<4, ?SN_PUBCOMP, MsgId:16>>, receive_response(Socket)),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
|
|
|
|
@ -783,15 +898,23 @@ t_publish_qos2_case02(_) ->
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_predefined_topic(Socket, QoS, PredefTopicId, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, ?FNU:1, QoS:2, ?FNU:5, PredefTopicId:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, ?FNU:1, QoS:2,
|
|
|
|
|
?FNU:5, PredefTopicId:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
Payload1 = <<20, 21, 22, 23>>,
|
|
|
|
|
send_publish_msg_predefined_topic(Socket, QoS, MsgId, PredefTopicId, Payload1),
|
|
|
|
|
?assertEqual(<<4, ?SN_PUBREC, MsgId:16>>, receive_response(Socket)),
|
|
|
|
|
send_pubrel_msg(Socket, MsgId),
|
|
|
|
|
|
|
|
|
|
?assertEqual(<<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_PREDEFINED_TOPIC :2, PredefTopicId:16, 1:16, <<20, 21, 22, 23>>/binary>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_PREDEFINED_TOPIC:2,
|
|
|
|
|
PredefTopicId:16, 1:16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
?assertEqual(<<4, ?SN_PUBCOMP, MsgId:16>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
timer:sleep(100),
|
|
|
|
@ -814,15 +937,23 @@ t_publish_qos2_case03(_) ->
|
|
|
|
|
?assertEqual(<<3, ?SN_CONNACK, 0>>, receive_response(Socket)),
|
|
|
|
|
|
|
|
|
|
send_subscribe_msg_normal_topic(Socket, QoS, <<"/#">>, MsgId),
|
|
|
|
|
?assertEqual(<<8, ?SN_SUBACK, ?FNU:1, QoS:2, ?FNU:5, TopicId0:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<8, ?SN_SUBACK, ?FNU:1, QoS:2,
|
|
|
|
|
?FNU:5, TopicId0:16, MsgId:16, ?SN_RC_ACCEPTED>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
Payload1 = <<20, 21, 22, 23>>,
|
|
|
|
|
send_publish_msg_short_topic(Socket, QoS, MsgId, <<"/a">>, Payload1),
|
|
|
|
|
?assertEqual(<<4, ?SN_PUBREC, MsgId:16>>, receive_response(Socket)),
|
|
|
|
|
send_pubrel_msg(Socket, MsgId),
|
|
|
|
|
|
|
|
|
|
?assertEqual(<<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, Will:1, CleanSession:1, ?SN_SHORT_TOPIC :2, <<"/a">>/binary, 1:16, <<20, 21, 22, 23>>/binary>>, receive_response(Socket)),
|
|
|
|
|
?assertEqual(
|
|
|
|
|
<<11, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
Will:1, CleanSession:1, ?SN_SHORT_TOPIC:2,
|
|
|
|
|
<<"/a">>/binary, 1:16, <<20, 21, 22, 23>>/binary>>,
|
|
|
|
|
receive_response(Socket)
|
|
|
|
|
),
|
|
|
|
|
?assertEqual(<<4, ?SN_PUBCOMP, MsgId:16>>, receive_response(Socket)),
|
|
|
|
|
timer:sleep(100),
|
|
|
|
|
|
|
|
|
@ -1095,7 +1226,12 @@ t_will_case06(_) ->
|
|
|
|
|
% send_register_msg(Socket, TopicName1, MsgId1),
|
|
|
|
|
% ?assertEqual(<<7, ?SN_REGACK, TopicId1:16, MsgId1:16, 0:8>>, receive_response(Socket)),
|
|
|
|
|
% send_subscribe_msg_predefined_topic(Socket, QoS, TopicId1, MsgId),
|
|
|
|
|
% ?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, WillBit:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId1:16, MsgId:16, ReturnCode>>, receive_response(Socket)),
|
|
|
|
|
% ?assertEqual(
|
|
|
|
|
% <<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
% WillBit:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
% TopicId1:16, MsgId:16, ReturnCode>>,
|
|
|
|
|
% receive_response(Socket)
|
|
|
|
|
% ),
|
|
|
|
|
%
|
|
|
|
|
% % goto asleep state
|
|
|
|
|
% send_disconnect_msg(Socket, 1),
|
|
|
|
@ -1121,7 +1257,9 @@ t_will_case06(_) ->
|
|
|
|
|
%
|
|
|
|
|
% %% the broker should sent dl msgs to the awake client before sending the pingresp
|
|
|
|
|
% UdpData = receive_response(Socket),
|
|
|
|
|
% MsgId_udp = check_publish_msg_on_udp({Dup, QoS, Retain, WillBit, CleanSession, ?SN_NORMAL_TOPIC, TopicId1, Payload1}, UdpData),
|
|
|
|
|
% MsgId_udp = check_publish_msg_on_udp(
|
|
|
|
|
% {Dup, QoS, Retain, WillBit, CleanSession,
|
|
|
|
|
% ?SN_NORMAL_TOPIC, TopicId1, Payload1}, UdpData),
|
|
|
|
|
% send_puback_msg(Socket, TopicId1, MsgId_udp),
|
|
|
|
|
%
|
|
|
|
|
% %% check the pingresp is received at last
|
|
|
|
@ -1153,8 +1291,12 @@ t_will_case06(_) ->
|
|
|
|
|
% CleanSession = 0,
|
|
|
|
|
% ReturnCode = 0,
|
|
|
|
|
% send_subscribe_msg_normal_topic(Socket, QoS, TopicName1, MsgId1),
|
|
|
|
|
% ?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, WillBit:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId0:16, MsgId1:16, ReturnCode>>,
|
|
|
|
|
% receive_response(Socket)),
|
|
|
|
|
% ?assertEqual(
|
|
|
|
|
% <<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
% WillBit:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
% TopicId0:16, MsgId1:16, ReturnCode>>,
|
|
|
|
|
% receive_response(Socket)
|
|
|
|
|
% ),
|
|
|
|
|
%
|
|
|
|
|
% % goto asleep state
|
|
|
|
|
% send_disconnect_msg(Socket, 1),
|
|
|
|
@ -1188,11 +1330,15 @@ t_will_case06(_) ->
|
|
|
|
|
% send_regack_msg(Socket, TopicIdNew, MsgId3),
|
|
|
|
|
%
|
|
|
|
|
% UdpData2 = receive_response(Socket),
|
|
|
|
|
% MsgId_udp2 = check_publish_msg_on_udp({Dup, QoS, Retain, WillBit, CleanSession, ?SN_NORMAL_TOPIC, TopicIdNew, Payload1}, UdpData2),
|
|
|
|
|
% MsgId_udp2 = check_publish_msg_on_udp(
|
|
|
|
|
% {Dup, QoS, Retain, WillBit, CleanSession,
|
|
|
|
|
% ?SN_NORMAL_TOPIC, TopicIdNew, Payload1}, UdpData2),
|
|
|
|
|
% send_puback_msg(Socket, TopicIdNew, MsgId_udp2),
|
|
|
|
|
%
|
|
|
|
|
% UdpData3 = receive_response(Socket),
|
|
|
|
|
% MsgId_udp3 = check_publish_msg_on_udp({Dup, QoS, Retain, WillBit, CleanSession, ?SN_NORMAL_TOPIC, TopicIdNew, Payload2}, UdpData3),
|
|
|
|
|
% MsgId_udp3 = check_publish_msg_on_udp(
|
|
|
|
|
% {Dup, QoS, Retain, WillBit, CleanSession,
|
|
|
|
|
% ?SN_NORMAL_TOPIC, TopicIdNew, Payload2}, UdpData3),
|
|
|
|
|
% send_puback_msg(Socket, TopicIdNew, MsgId_udp3),
|
|
|
|
|
%
|
|
|
|
|
% ?assertEqual(<<2, ?SN_PINGRESP>>, receive_response(Socket)),
|
|
|
|
@ -1228,8 +1374,12 @@ receive_publish(Socket) ->
|
|
|
|
|
% CleanSession = 0,
|
|
|
|
|
% ReturnCode = 0,
|
|
|
|
|
% send_subscribe_msg_normal_topic(Socket, QoS, TopicName1, MsgId1),
|
|
|
|
|
% ?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, WillBit:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId0:16, MsgId1:16, ReturnCode>>,
|
|
|
|
|
% receive_response(Socket)),
|
|
|
|
|
% ?assertEqual(
|
|
|
|
|
% <<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
% WillBit:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
% TopicId0:16, MsgId1:16, ReturnCode>>,
|
|
|
|
|
% receive_response(Socket)
|
|
|
|
|
% ),
|
|
|
|
|
%
|
|
|
|
|
% % goto asleep state
|
|
|
|
|
% SleepDuration = 30,
|
|
|
|
@ -1262,12 +1412,16 @@ receive_publish(Socket) ->
|
|
|
|
|
% send_regack_msg(Socket, TopicIdNew, MsgId_reg),
|
|
|
|
|
%
|
|
|
|
|
% UdpData2 = receive_response(Socket),
|
|
|
|
|
% MsgId2 = check_publish_msg_on_udp({Dup, QoS, Retain, WillBit, CleanSession, ?SN_NORMAL_TOPIC, TopicIdNew, Payload2}, UdpData2),
|
|
|
|
|
% MsgId2 = check_publish_msg_on_udp(
|
|
|
|
|
% {Dup, QoS, Retain, WillBit, CleanSession,
|
|
|
|
|
% ?SN_NORMAL_TOPIC, TopicIdNew, Payload2}, UdpData2),
|
|
|
|
|
% send_puback_msg(Socket, TopicIdNew, MsgId2),
|
|
|
|
|
% timer:sleep(50),
|
|
|
|
|
%
|
|
|
|
|
% UdpData3 = wrap_receive_response(Socket),
|
|
|
|
|
% MsgId3 = check_publish_msg_on_udp({Dup, QoS, Retain, WillBit, CleanSession, ?SN_NORMAL_TOPIC, TopicIdNew, Payload3}, UdpData3),
|
|
|
|
|
% MsgId3 = check_publish_msg_on_udp(
|
|
|
|
|
% {Dup, QoS, Retain, WillBit, CleanSession,
|
|
|
|
|
% ?SN_NORMAL_TOPIC, TopicIdNew, Payload3}, UdpData3),
|
|
|
|
|
% send_puback_msg(Socket, TopicIdNew, MsgId3),
|
|
|
|
|
% timer:sleep(50),
|
|
|
|
|
%
|
|
|
|
@ -1334,7 +1488,9 @@ receive_publish(Socket) ->
|
|
|
|
|
% send_pingreq_msg(Socket, ClientId),
|
|
|
|
|
%
|
|
|
|
|
% UdpData = wrap_receive_response(Socket),
|
|
|
|
|
% MsgId_udp = check_publish_msg_on_udp({Dup, QoS, Retain, WillBit, CleanSession, ?SN_NORMAL_TOPIC, TopicId_tom, Payload1}, UdpData),
|
|
|
|
|
% MsgId_udp = check_publish_msg_on_udp(
|
|
|
|
|
% {Dup, QoS, Retain, WillBit, CleanSession,
|
|
|
|
|
% ?SN_NORMAL_TOPIC, TopicId_tom, Payload1}, UdpData),
|
|
|
|
|
% send_pubrec_msg(Socket, MsgId_udp),
|
|
|
|
|
% ?assertMatch(<<_:8, ?SN_PUBREL:8, _/binary>>, receive_response(Socket)),
|
|
|
|
|
% send_pubcomp_msg(Socket, MsgId_udp),
|
|
|
|
@ -1369,8 +1525,12 @@ receive_publish(Socket) ->
|
|
|
|
|
% send_register_msg(Socket, TopicName_tom, MsgId1),
|
|
|
|
|
% TopicId_tom = check_regack_msg_on_udp(MsgId1, receive_response(Socket)),
|
|
|
|
|
% send_subscribe_msg_predefined_topic(Socket, QoS, TopicId_tom, MsgId1),
|
|
|
|
|
% ?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, WillBit:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId_tom:16, MsgId1:16, ReturnCode>>,
|
|
|
|
|
% receive_response(Socket)),
|
|
|
|
|
% ?assertEqual(
|
|
|
|
|
% <<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
% WillBit:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
% TopicId_tom:16, MsgId1:16, ReturnCode>>,
|
|
|
|
|
% receive_response(Socket)
|
|
|
|
|
% ),
|
|
|
|
|
%
|
|
|
|
|
% % goto asleep state
|
|
|
|
|
% send_disconnect_msg(Socket, SleepDuration),
|
|
|
|
@ -1448,8 +1608,12 @@ receive_publish(Socket) ->
|
|
|
|
|
% CleanSession = 0,
|
|
|
|
|
% ReturnCode = 0,
|
|
|
|
|
% send_subscribe_msg_normal_topic(Socket, QoS, TopicName1, MsgId1),
|
|
|
|
|
% ?assertEqual(<<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1, WillBit:1, CleanSession:1, ?SN_NORMAL_TOPIC:2, TopicId0:16, MsgId1:16, ReturnCode>>,
|
|
|
|
|
% receive_response(Socket)),
|
|
|
|
|
% ?assertEqual(
|
|
|
|
|
% <<8, ?SN_SUBACK, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
% WillBit:1, CleanSession:1, ?SN_NORMAL_TOPIC:2,
|
|
|
|
|
% TopicId0:16, MsgId1:16, ReturnCode>>,
|
|
|
|
|
% receive_response(Socket)
|
|
|
|
|
% ),
|
|
|
|
|
% % goto asleep state
|
|
|
|
|
% SleepDuration = 30,
|
|
|
|
|
% send_disconnect_msg(Socket, SleepDuration),
|
|
|
|
@ -1483,7 +1647,9 @@ receive_publish(Socket) ->
|
|
|
|
|
% udp_receive_timeout ->
|
|
|
|
|
% ok;
|
|
|
|
|
% UdpData2 ->
|
|
|
|
|
% MsgId2 = check_publish_msg_on_udp({Dup, QoS, Retain, WillBit, CleanSession, ?SN_NORMAL_TOPIC, TopicIdNew, Payload2}, UdpData2),
|
|
|
|
|
% MsgId2 = check_publish_msg_on_udp(
|
|
|
|
|
% {Dup, QoS, Retain, WillBit, CleanSession,
|
|
|
|
|
% ?SN_NORMAL_TOPIC, TopicIdNew, Payload2}, UdpData2),
|
|
|
|
|
% send_puback_msg(Socket, TopicIdNew, MsgId2)
|
|
|
|
|
% end,
|
|
|
|
|
% timer:sleep(100),
|
|
|
|
@ -1492,7 +1658,9 @@ receive_publish(Socket) ->
|
|
|
|
|
% udp_receive_timeout ->
|
|
|
|
|
% ok;
|
|
|
|
|
% UdpData3 ->
|
|
|
|
|
% MsgId3 = check_publish_msg_on_udp({Dup, QoS, Retain, WillBit, CleanSession, ?SN_NORMAL_TOPIC, TopicIdNew, Payload3}, UdpData3),
|
|
|
|
|
% MsgId3 = check_publish_msg_on_udp(
|
|
|
|
|
% {Dup, QoS, Retain, WillBit, CleanSession,
|
|
|
|
|
% ?SN_NORMAL_TOPIC, TopicIdNew, Payload3}, UdpData3),
|
|
|
|
|
% send_puback_msg(Socket, TopicIdNew, MsgId3)
|
|
|
|
|
% end,
|
|
|
|
|
% timer:sleep(100),
|
|
|
|
@ -1510,7 +1678,8 @@ receive_publish(Socket) ->
|
|
|
|
|
%
|
|
|
|
|
% %% send PINGREQ again to enter awake state
|
|
|
|
|
% send_pingreq_msg(Socket, ClientId),
|
|
|
|
|
% %% will not receive any buffered PUBLISH messages buffered before last awake, only receive PINGRESP here
|
|
|
|
|
% %% will not receive any buffered PUBLISH messages buffered before last
|
|
|
|
|
% %% awake, only receive PINGRESP here
|
|
|
|
|
% ?assertEqual(<<2, ?SN_PINGRESP>>, receive_response(Socket)),
|
|
|
|
|
%
|
|
|
|
|
% gen_udp:close(Socket).
|
|
|
|
@ -1913,8 +2082,11 @@ check_dispatched_message(Dup, QoS, Retain, TopicIdType, TopicId, Payload, Socket
|
|
|
|
|
PubMsg = receive_response(Socket),
|
|
|
|
|
Length = 7 + byte_size(Payload),
|
|
|
|
|
?LOG("check_dispatched_message ~p~n", [PubMsg]),
|
|
|
|
|
?LOG("expected ~p xx ~p~n", [<<Length, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, ?FNU:2, TopicIdType:2, TopicId:16>>, Payload]),
|
|
|
|
|
<<Length, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, ?FNU:2, TopicIdType:2, TopicId:16, MsgId:16, Payload/binary>> = PubMsg,
|
|
|
|
|
?LOG("expected ~p xx ~p~n",
|
|
|
|
|
[<<Length, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
?FNU:2, TopicIdType:2, TopicId:16>>, Payload]),
|
|
|
|
|
<<Length, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
?FNU:2, TopicIdType:2, TopicId:16, MsgId:16, Payload/binary>> = PubMsg,
|
|
|
|
|
case QoS of
|
|
|
|
|
0 -> ok;
|
|
|
|
|
1 -> send_puback_msg(Socket, TopicId, MsgId);
|
|
|
|
@ -1926,11 +2098,13 @@ check_dispatched_message(Dup, QoS, Retain, TopicIdType, TopicId, Payload, Socket
|
|
|
|
|
get_udp_broadcast_address() ->
|
|
|
|
|
"255.255.255.255".
|
|
|
|
|
|
|
|
|
|
check_publish_msg_on_udp({Dup, QoS, Retain, WillBit, CleanSession, TopicType, TopicId, Payload}, UdpData) ->
|
|
|
|
|
check_publish_msg_on_udp({Dup, QoS, Retain, WillBit, CleanSession,
|
|
|
|
|
TopicType, TopicId, Payload}, UdpData) ->
|
|
|
|
|
<<HeaderUdp:5/binary, MsgId:16, PayloadIn/binary>> = UdpData,
|
|
|
|
|
ct:pal("UdpData: ~p, Payload: ~p, PayloadIn: ~p", [UdpData, Payload, PayloadIn]),
|
|
|
|
|
Size9 = byte_size(Payload) + 7,
|
|
|
|
|
Eexp = <<Size9:8, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1, WillBit:1, CleanSession:1, TopicType:2, TopicId:16>>,
|
|
|
|
|
Eexp = <<Size9:8, ?SN_PUBLISH, Dup:1, QoS:2, Retain:1,
|
|
|
|
|
WillBit:1, CleanSession:1, TopicType:2, TopicId:16>>,
|
|
|
|
|
?assertEqual(Eexp, HeaderUdp), % mqtt-sn header should be same
|
|
|
|
|
?assertEqual(Payload, PayloadIn), % payload should be same
|
|
|
|
|
MsgId.
|
|
|
|
|