Replace macro QOS$i to QOS_$I
The two styles of qos macro name in one project is chaotic. It is not a good practice. So I change the QOS$i to QOS_$i
This commit is contained in:
parent
f448c62e47
commit
32d3826440
|
@ -43,11 +43,7 @@
|
||||||
-define(QOS_1, 1). %% At least once
|
-define(QOS_1, 1). %% At least once
|
||||||
-define(QOS_2, 2). %% Exactly once
|
-define(QOS_2, 2). %% Exactly once
|
||||||
|
|
||||||
-define(QOS0, 0). %% At most once
|
-define(IS_QOS(I), (I >= ?QOS_0 andalso I =< ?QOS_2)).
|
||||||
-define(QOS1, 1). %% At least once
|
|
||||||
-define(QOS2, 2). %% Exactly once
|
|
||||||
|
|
||||||
-define(IS_QOS(I), (I >= ?QOS0 andalso I =< ?QOS2)).
|
|
||||||
|
|
||||||
-define(QOS_I(Name),
|
-define(QOS_I(Name),
|
||||||
begin
|
begin
|
||||||
|
|
|
@ -39,4 +39,3 @@ behaviour_info(_Other) ->
|
||||||
undefined.
|
undefined.
|
||||||
|
|
||||||
-endif.
|
-endif.
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
mountpoint, queue, mqueue_type, max_pending_messages,
|
mountpoint, queue, mqueue_type, max_pending_messages,
|
||||||
forwards = [], subscriptions = []}).
|
forwards = [], subscriptions = []}).
|
||||||
|
|
||||||
-record(mqtt_msg, {qos = ?QOS0, retain = false, dup = false,
|
-record(mqtt_msg, {qos = ?QOS_0, retain = false, dup = false,
|
||||||
packet_id, topic, props, payload}).
|
packet_id, topic, props, payload}).
|
||||||
|
|
||||||
start_link(Name, Options) ->
|
start_link(Name, Options) ->
|
||||||
|
|
|
@ -95,7 +95,7 @@
|
||||||
| {force_ping, boolean()}
|
| {force_ping, boolean()}
|
||||||
| {properties, properties()}).
|
| {properties, properties()}).
|
||||||
|
|
||||||
-record(mqtt_msg, {qos = ?QOS0, retain = false, dup = false,
|
-record(mqtt_msg, {qos = ?QOS_0, retain = false, dup = false,
|
||||||
packet_id, topic, props, payload}).
|
packet_id, topic, props, payload}).
|
||||||
|
|
||||||
-type(mqtt_msg() :: #mqtt_msg{}).
|
-type(mqtt_msg() :: #mqtt_msg{}).
|
||||||
|
@ -1217,7 +1217,7 @@ retry_send([{Type, Msg, Ts} | Msgs], Now, State = #state{retry_interval = Interv
|
||||||
|
|
||||||
retry_send(publish, Msg = #mqtt_msg{qos = QoS, packet_id = PacketId},
|
retry_send(publish, Msg = #mqtt_msg{qos = QoS, packet_id = PacketId},
|
||||||
Now, State = #state{inflight = Inflight}) ->
|
Now, State = #state{inflight = Inflight}) ->
|
||||||
Msg1 = Msg#mqtt_msg{dup = (QoS =:= ?QOS1)},
|
Msg1 = Msg#mqtt_msg{dup = (QoS =:= ?QOS_1)},
|
||||||
case send(Msg1, State) of
|
case send(Msg1, State) of
|
||||||
{ok, NewState} ->
|
{ok, NewState} ->
|
||||||
Inflight1 = emqx_inflight:update(PacketId, {publish, Msg1, Now}, Inflight),
|
Inflight1 = emqx_inflight:update(PacketId, {publish, Msg1, Now}, Inflight),
|
||||||
|
|
|
@ -34,7 +34,7 @@ make(Topic, Payload) ->
|
||||||
-spec(make(atom() | emqx_types:client_id(), emqx_topic:topic(), emqx_types:payload())
|
-spec(make(atom() | emqx_types:client_id(), emqx_topic:topic(), emqx_types:payload())
|
||||||
-> emqx_types:message()).
|
-> emqx_types:message()).
|
||||||
make(From, Topic, Payload) ->
|
make(From, Topic, Payload) ->
|
||||||
make(From, ?QOS0, Topic, Payload).
|
make(From, ?QOS_0, Topic, Payload).
|
||||||
|
|
||||||
-spec(make(atom() | emqx_types:client_id(), emqx_mqtt_types:qos(),
|
-spec(make(atom() | emqx_types:client_id(), emqx_mqtt_types:qos(),
|
||||||
emqx_topic:topic(), emqx_types:payload()) -> emqx_types:message()).
|
emqx_topic:topic(), emqx_types:payload()) -> emqx_types:message()).
|
||||||
|
@ -47,7 +47,7 @@ make(From, QoS, Topic, Payload) ->
|
||||||
payload = Payload,
|
payload = Payload,
|
||||||
timestamp = os:timestamp()}.
|
timestamp = os:timestamp()}.
|
||||||
|
|
||||||
msgid(?QOS0) -> undefined;
|
msgid(?QOS_0) -> undefined;
|
||||||
msgid(_QoS) -> emqx_guid:gen().
|
msgid(_QoS) -> emqx_guid:gen().
|
||||||
|
|
||||||
set_flags(Flags, Msg = #message{flags = undefined}) when is_map(Flags) ->
|
set_flags(Flags, Msg = #message{flags = undefined}) when is_map(Flags) ->
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
-export_type([topic_filters/0]).
|
-export_type([topic_filters/0]).
|
||||||
-export_type([packet_id/0, packet_type/0, packet/0]).
|
-export_type([packet_id/0, packet_type/0, packet/0]).
|
||||||
|
|
||||||
-type(qos() :: ?QOS0 | ?QOS1 | ?QOS2).
|
-type(qos() :: ?QOS_0 | ?QOS_1 | ?QOS_2).
|
||||||
-type(version() :: ?MQTT_PROTO_V3 | ?MQTT_PROTO_V4 | ?MQTT_PROTO_V5).
|
-type(version() :: ?MQTT_PROTO_V3 | ?MQTT_PROTO_V4 | ?MQTT_PROTO_V5).
|
||||||
-type(qos_name() :: qos0 | at_most_once |
|
-type(qos_name() :: qos0 | at_most_once |
|
||||||
qos1 | at_least_once |
|
qos1 | at_least_once |
|
||||||
|
@ -40,4 +40,3 @@
|
||||||
}).
|
}).
|
||||||
-type(topic_filters() :: [{emqx_topic:topic(), subopts()}]).
|
-type(topic_filters() :: [{emqx_topic:topic(), subopts()}]).
|
||||||
-type(packet() :: #mqtt_packet{}).
|
-type(packet() :: #mqtt_packet{}).
|
||||||
|
|
||||||
|
|
|
@ -89,13 +89,13 @@
|
||||||
-opaque(mqueue() :: #mqueue{}).
|
-opaque(mqueue() :: #mqueue{}).
|
||||||
|
|
||||||
-spec(init(options()) -> mqueue()).
|
-spec(init(options()) -> mqueue()).
|
||||||
init(Opts = #{max_len := MaxLen0, store_qos0 := QoS0}) ->
|
init(Opts = #{max_len := MaxLen0, store_qos0 := QoS_0}) ->
|
||||||
MaxLen = case (is_integer(MaxLen0) andalso MaxLen0 > ?MAX_LEN_INFINITY) of
|
MaxLen = case (is_integer(MaxLen0) andalso MaxLen0 > ?MAX_LEN_INFINITY) of
|
||||||
true -> MaxLen0;
|
true -> MaxLen0;
|
||||||
false -> ?MAX_LEN_INFINITY
|
false -> ?MAX_LEN_INFINITY
|
||||||
end,
|
end,
|
||||||
#mqueue{max_len = MaxLen,
|
#mqueue{max_len = MaxLen,
|
||||||
store_qos0 = QoS0,
|
store_qos0 = QoS_0,
|
||||||
p_table = get_opt(priorities, Opts, ?NO_PRIORITY_TABLE),
|
p_table = get_opt(priorities, Opts, ?NO_PRIORITY_TABLE),
|
||||||
default_p = get_priority_opt(Opts)
|
default_p = get_priority_opt(Opts)
|
||||||
}.
|
}.
|
||||||
|
@ -165,4 +165,3 @@ get_priority_opt(Opts) ->
|
||||||
%% while the highest 'infinity' is a [{infinity, queue:queue()}]
|
%% while the highest 'infinity' is a [{infinity, queue:queue()}]
|
||||||
get_priority(_Topic, ?NO_PRIORITY_TABLE, _) -> ?LOWEST_PRIORITY;
|
get_priority(_Topic, ?NO_PRIORITY_TABLE, _) -> ?LOWEST_PRIORITY;
|
||||||
get_priority(Topic, PTab, Dp) -> maps:get(Topic, PTab, Dp).
|
get_priority(Topic, PTab, Dp) -> maps:get(Topic, PTab, Dp).
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ validate_properties(_, _) ->
|
||||||
validate_subscription({Topic, #{qos := QoS}}) ->
|
validate_subscription({Topic, #{qos := QoS}}) ->
|
||||||
emqx_topic:validate(filter, Topic) andalso validate_qos(QoS).
|
emqx_topic:validate(filter, Topic) andalso validate_qos(QoS).
|
||||||
|
|
||||||
validate_qos(QoS) when ?QOS0 =< QoS, QoS =< ?QOS2 ->
|
validate_qos(QoS) when ?QOS_0 =< QoS, QoS =< ?QOS_2 ->
|
||||||
true;
|
true;
|
||||||
validate_qos(_) -> error(bad_qos).
|
validate_qos(_) -> error(bad_qos).
|
||||||
|
|
||||||
|
|
|
@ -138,5 +138,5 @@ compat(connack, 16#9C) -> ?CONNACK_SERVER;
|
||||||
compat(connack, 16#9D) -> ?CONNACK_SERVER;
|
compat(connack, 16#9D) -> ?CONNACK_SERVER;
|
||||||
compat(connack, 16#9F) -> ?CONNACK_SERVER;
|
compat(connack, 16#9F) -> ?CONNACK_SERVER;
|
||||||
|
|
||||||
compat(suback, Code) when Code =< ?QOS2 -> Code;
|
compat(suback, Code) when Code =< ?QOS_2 -> Code;
|
||||||
compat(suback, Code) when Code >= 16#80 -> 16#80.
|
compat(suback, Code) when Code >= 16#80 -> 16#80.
|
||||||
|
|
|
@ -802,13 +802,13 @@ dispatch(Msg, State = #state{client_id = ClientId, conn_pid = undefined}) ->
|
||||||
end;
|
end;
|
||||||
|
|
||||||
%% Deliver qos0 message directly to client
|
%% Deliver qos0 message directly to client
|
||||||
dispatch(Msg = #message{qos = ?QOS0} = Msg, State) ->
|
dispatch(Msg = #message{qos = ?QOS_0} = Msg, State) ->
|
||||||
deliver(undefined, Msg, State),
|
deliver(undefined, Msg, State),
|
||||||
inc_stats(deliver, Msg, State);
|
inc_stats(deliver, Msg, State);
|
||||||
|
|
||||||
dispatch(Msg = #message{qos = QoS} = Msg,
|
dispatch(Msg = #message{qos = QoS} = Msg,
|
||||||
State = #state{next_pkt_id = PacketId, inflight = Inflight})
|
State = #state{next_pkt_id = PacketId, inflight = Inflight})
|
||||||
when QoS =:= ?QOS1 orelse QoS =:= ?QOS2 ->
|
when QoS =:= ?QOS_1 orelse QoS =:= ?QOS_2 ->
|
||||||
case emqx_inflight:is_full(Inflight) of
|
case emqx_inflight:is_full(Inflight) of
|
||||||
true -> enqueue_msg(Msg, State);
|
true -> enqueue_msg(Msg, State);
|
||||||
false ->
|
false ->
|
||||||
|
@ -825,7 +825,7 @@ enqueue_msg(Msg, State = #state{mqueue = Q}) ->
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
|
|
||||||
redeliver({PacketId, Msg = #message{qos = QoS}}, State) ->
|
redeliver({PacketId, Msg = #message{qos = QoS}}, State) ->
|
||||||
deliver(PacketId, if QoS =:= ?QOS2 -> Msg;
|
deliver(PacketId, if QoS =:= ?QOS_2 -> Msg;
|
||||||
true -> emqx_message:set_flag(dup, Msg)
|
true -> emqx_message:set_flag(dup, Msg)
|
||||||
end, State);
|
end, State);
|
||||||
|
|
||||||
|
@ -974,4 +974,3 @@ noreply(State) ->
|
||||||
|
|
||||||
shutdown(Reason, State) ->
|
shutdown(Reason, State) ->
|
||||||
{stop, {shutdown, Reason}, State}.
|
{stop, {shutdown, Reason}, State}.
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ serialize_parse_connect(_) ->
|
||||||
?assertEqual({ok, Packet1, <<>>}, parse_serialize(Packet1)),
|
?assertEqual({ok, Packet1, <<>>}, parse_serialize(Packet1)),
|
||||||
Packet2 = ?CONNECT_PACKET(#mqtt_packet_connect{
|
Packet2 = ?CONNECT_PACKET(#mqtt_packet_connect{
|
||||||
client_id = <<"clientId">>,
|
client_id = <<"clientId">>,
|
||||||
will_qos = ?QOS1,
|
will_qos = ?QOS_1,
|
||||||
will_flag = true,
|
will_flag = true,
|
||||||
will_retain = true,
|
will_retain = true,
|
||||||
will_topic = <<"will">>,
|
will_topic = <<"will">>,
|
||||||
|
@ -427,4 +427,3 @@ parse(Bin, Opts) when is_map(Opts) ->
|
||||||
|
|
||||||
payload() ->
|
payload() ->
|
||||||
iolist_to_binary(["payload." || _I <- lists:seq(1, 1000)]).
|
iolist_to_binary(["payload." || _I <- lists:seq(1, 1000)]).
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ all() ->
|
||||||
message_make(_) ->
|
message_make(_) ->
|
||||||
Msg = emqx_message:make(<<"clientid">>, <<"topic">>, <<"payload">>),
|
Msg = emqx_message:make(<<"clientid">>, <<"topic">>, <<"payload">>),
|
||||||
?assertEqual(0, Msg#message.qos),
|
?assertEqual(0, Msg#message.qos),
|
||||||
Msg1 = emqx_message:make(<<"clientid">>, ?QOS2, <<"topic">>, <<"payload">>),
|
Msg1 = emqx_message:make(<<"clientid">>, ?QOS_2, <<"topic">>, <<"payload">>),
|
||||||
?assert(is_binary(Msg1#message.id)),
|
?assert(is_binary(Msg1#message.id)),
|
||||||
?assertEqual(2, Msg1#message.qos).
|
?assertEqual(2, Msg1#message.qos).
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,8 @@ t_mount_unmount(_) ->
|
||||||
Msg = emqx_message:make(<<"clientid">>, <<"topic">>, <<"payload">>),
|
Msg = emqx_message:make(<<"clientid">>, <<"topic">>, <<"payload">>),
|
||||||
Msg2 = emqx_mountpoint:mount(<<"mount">>, Msg),
|
Msg2 = emqx_mountpoint:mount(<<"mount">>, Msg),
|
||||||
?assertEqual(<<"mounttopic">>, Msg2#message.topic),
|
?assertEqual(<<"mounttopic">>, Msg2#message.topic),
|
||||||
TopicFilter = [{<<"mounttopic">>, #{qos => ?QOS2}}],
|
TopicFilter = [{<<"mounttopic">>, #{qos => ?QOS_2}}],
|
||||||
TopicFilter = emqx_mountpoint:mount(<<"mount">>, [{<<"topic">>, #{qos => ?QOS2}}]),
|
TopicFilter = emqx_mountpoint:mount(<<"mount">>, [{<<"topic">>, #{qos => ?QOS_2}}]),
|
||||||
Msg = emqx_mountpoint:unmount(<<"mount">>, Msg2).
|
Msg = emqx_mountpoint:unmount(<<"mount">>, Msg2).
|
||||||
|
|
||||||
t_replvar(_) ->
|
t_replvar(_) ->
|
||||||
|
|
|
@ -44,7 +44,7 @@ packet_type_name(_) ->
|
||||||
?assertEqual('UNSUBSCRIBE', emqx_packet:type_name(?UNSUBSCRIBE)).
|
?assertEqual('UNSUBSCRIBE', emqx_packet:type_name(?UNSUBSCRIBE)).
|
||||||
|
|
||||||
packet_validate(_) ->
|
packet_validate(_) ->
|
||||||
?assert(emqx_packet:validate(?SUBSCRIBE_PACKET(15, #{'Subscription-Identifier' => 1}, [{<<"topic">>, #{qos => ?QOS0}}]))),
|
?assert(emqx_packet:validate(?SUBSCRIBE_PACKET(15, #{'Subscription-Identifier' => 1}, [{<<"topic">>, #{qos => ?QOS_0}}]))),
|
||||||
?assert(emqx_packet:validate(?UNSUBSCRIBE_PACKET(89, [<<"topic">>]))),
|
?assert(emqx_packet:validate(?UNSUBSCRIBE_PACKET(89, [<<"topic">>]))),
|
||||||
?assert(emqx_packet:validate(?CONNECT_PACKET(#mqtt_packet_connect{}))),
|
?assert(emqx_packet:validate(?CONNECT_PACKET(#mqtt_packet_connect{}))),
|
||||||
?assert(emqx_packet:validate(?PUBLISH_PACKET(1, <<"topic">>, 1, #{'Response-Topic' => <<"responsetopic">>, 'Topic-Alias' => 1}, <<"payload">>))),
|
?assert(emqx_packet:validate(?PUBLISH_PACKET(1, <<"topic">>, 1, #{'Response-Topic' => <<"responsetopic">>, 'Topic-Alias' => 1}, <<"payload">>))),
|
||||||
|
@ -52,7 +52,7 @@ packet_validate(_) ->
|
||||||
?assertError(subscription_identifier_invalid,
|
?assertError(subscription_identifier_invalid,
|
||||||
emqx_packet:validate(
|
emqx_packet:validate(
|
||||||
?SUBSCRIBE_PACKET(15, #{'Subscription-Identifier' => -1},
|
?SUBSCRIBE_PACKET(15, #{'Subscription-Identifier' => -1},
|
||||||
[{<<"topic">>, #{qos => ?QOS0}}]))),
|
[{<<"topic">>, #{qos => ?QOS_0}}]))),
|
||||||
?assertError(topic_filters_invalid,
|
?assertError(topic_filters_invalid,
|
||||||
emqx_packet:validate(?UNSUBSCRIBE_PACKET(1,[]))),
|
emqx_packet:validate(?UNSUBSCRIBE_PACKET(1,[]))),
|
||||||
?assertError(topic_name_invalid,
|
?assertError(topic_name_invalid,
|
||||||
|
@ -90,14 +90,14 @@ packet_validate(_) ->
|
||||||
|
|
||||||
packet_message(_) ->
|
packet_message(_) ->
|
||||||
Pkt = #mqtt_packet{header = #mqtt_packet_header{type = ?PUBLISH,
|
Pkt = #mqtt_packet{header = #mqtt_packet_header{type = ?PUBLISH,
|
||||||
qos = ?QOS0,
|
qos = ?QOS_0,
|
||||||
retain = false,
|
retain = false,
|
||||||
dup = false},
|
dup = false},
|
||||||
variable = #mqtt_packet_publish{topic_name = <<"topic">>,
|
variable = #mqtt_packet_publish{topic_name = <<"topic">>,
|
||||||
packet_id = 10,
|
packet_id = 10,
|
||||||
properties = #{}},
|
properties = #{}},
|
||||||
payload = <<"payload">>},
|
payload = <<"payload">>},
|
||||||
Msg = emqx_message:make(<<"clientid">>, ?QOS0, <<"topic">>, <<"payload">>),
|
Msg = emqx_message:make(<<"clientid">>, ?QOS_0, <<"topic">>, <<"payload">>),
|
||||||
Msg2 = emqx_message:set_flag(retain, false, Msg),
|
Msg2 = emqx_message:set_flag(retain, false, Msg),
|
||||||
Pkt = emqx_packet:from_message(10, Msg2),
|
Pkt = emqx_packet:from_message(10, Msg2),
|
||||||
Msg3 = emqx_message:set_header(username, "test", Msg2),
|
Msg3 = emqx_message:set_header(username, "test", Msg2),
|
||||||
|
@ -112,8 +112,8 @@ packet_format(_) ->
|
||||||
io:format("~s", [emqx_packet:format(?PUBLISH_PACKET(?QOS_2, <<"topic">>, 10, <<"payload">>))]),
|
io:format("~s", [emqx_packet:format(?PUBLISH_PACKET(?QOS_2, <<"topic">>, 10, <<"payload">>))]),
|
||||||
io:format("~s", [emqx_packet:format(?PUBACK_PACKET(?PUBACK, 98))]),
|
io:format("~s", [emqx_packet:format(?PUBACK_PACKET(?PUBACK, 98))]),
|
||||||
io:format("~s", [emqx_packet:format(?PUBREL_PACKET(99))]),
|
io:format("~s", [emqx_packet:format(?PUBREL_PACKET(99))]),
|
||||||
io:format("~s", [emqx_packet:format(?SUBSCRIBE_PACKET(15, [{<<"topic">>, ?QOS0}, {<<"topic1">>, ?QOS1}]))]),
|
io:format("~s", [emqx_packet:format(?SUBSCRIBE_PACKET(15, [{<<"topic">>, ?QOS_0}, {<<"topic1">>, ?QOS_1}]))]),
|
||||||
io:format("~s", [emqx_packet:format(?SUBACK_PACKET(40, [?QOS0, ?QOS1]))]),
|
io:format("~s", [emqx_packet:format(?SUBACK_PACKET(40, [?QOS_0, ?QOS_1]))]),
|
||||||
io:format("~s", [emqx_packet:format(?UNSUBSCRIBE_PACKET(89, [<<"t">>, <<"t2">>]))]),
|
io:format("~s", [emqx_packet:format(?UNSUBSCRIBE_PACKET(89, [<<"t">>, <<"t2">>]))]),
|
||||||
io:format("~s", [emqx_packet:format(?UNSUBACK_PACKET(90))]).
|
io:format("~s", [emqx_packet:format(?UNSUBACK_PACKET(90))]).
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ packet_will_msg(_) ->
|
||||||
client_id = <<"clientid">>,
|
client_id = <<"clientid">>,
|
||||||
username = "test",
|
username = "test",
|
||||||
will_retain = true,
|
will_retain = true,
|
||||||
will_qos = ?QOS2,
|
will_qos = ?QOS_2,
|
||||||
will_topic = <<"topic">>,
|
will_topic = <<"topic">>,
|
||||||
will_props = #{},
|
will_props = #{},
|
||||||
will_payload = <<"payload">>},
|
will_payload = <<"payload">>},
|
||||||
|
|
|
@ -1,147 +0,0 @@
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
%% Copyright (c) 2013-2018 EMQ Enterprise, Inc. (http://emqtt.io)
|
|
||||||
%%
|
|
||||||
%% Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
%% you may not use this file except in compliance with the License.
|
|
||||||
%% You may obtain a copy of the License at
|
|
||||||
%%
|
|
||||||
%% http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
%%
|
|
||||||
%% Unless required by applicable law or agreed to in writing, software
|
|
||||||
%% distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
%% See the License for the specific language governing permissions and
|
|
||||||
%% limitations under the License.
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
|
|
||||||
-module(emqx_protocol_SUITE).
|
|
||||||
|
|
||||||
-compile(export_all).
|
|
||||||
-compile(nowarn_export_all).
|
|
||||||
|
|
||||||
-include("emqx.hrl").
|
|
||||||
|
|
||||||
-include("emqx_mqtt.hrl").
|
|
||||||
|
|
||||||
-include_lib("eunit/include/eunit.hrl").
|
|
||||||
|
|
||||||
-import(emqx_serializer, [serialize/1]).
|
|
||||||
|
|
||||||
all() ->
|
|
||||||
[{group, parser},
|
|
||||||
{group, serializer},
|
|
||||||
{group, packet},
|
|
||||||
{group, message}].
|
|
||||||
|
|
||||||
groups() ->
|
|
||||||
[{parser, [],
|
|
||||||
[parse_connect,
|
|
||||||
parse_bridge,
|
|
||||||
parse_publish,
|
|
||||||
parse_puback,
|
|
||||||
parse_pubrec,
|
|
||||||
parse_pubrel,
|
|
||||||
parse_pubcomp,
|
|
||||||
parse_subscribe,
|
|
||||||
parse_unsubscribe,
|
|
||||||
parse_pingreq,
|
|
||||||
parse_disconnect]},
|
|
||||||
{serializer, [],
|
|
||||||
[serialize_connect,
|
|
||||||
serialize_connack,
|
|
||||||
serialize_publish,
|
|
||||||
serialize_puback,
|
|
||||||
serialize_pubrel,
|
|
||||||
serialize_subscribe,
|
|
||||||
serialize_suback,
|
|
||||||
serialize_unsubscribe,
|
|
||||||
serialize_unsuback,
|
|
||||||
serialize_pingreq,
|
|
||||||
serialize_pingresp,
|
|
||||||
serialize_disconnect]},
|
|
||||||
{packet, [],
|
|
||||||
[packet_proto_name,
|
|
||||||
packet_type_name,
|
|
||||||
packet_connack_name,
|
|
||||||
packet_format]},
|
|
||||||
{message, [],
|
|
||||||
[message_make,
|
|
||||||
message_from_packet,
|
|
||||||
message_flag]}].
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
%% Packet Cases
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
|
|
||||||
packet_proto_name(_) ->
|
|
||||||
?assertEqual(<<"MQIsdp">>, emqx_packet:protocol_name(3)),
|
|
||||||
?assertEqual(<<"MQTT">>, emqx_packet:protocol_name(4)).
|
|
||||||
|
|
||||||
packet_type_name(_) ->
|
|
||||||
?assertEqual('CONNECT', emqx_packet:type_name(?CONNECT)),
|
|
||||||
?assertEqual('UNSUBSCRIBE', emqx_packet:type_name(?UNSUBSCRIBE)).
|
|
||||||
|
|
||||||
packet_connack_name(_) ->
|
|
||||||
?assertEqual('CONNACK_ACCEPT', emqx_packet:connack_name(?CONNACK_ACCEPT)),
|
|
||||||
?assertEqual('CONNACK_PROTO_VER', emqx_packet:connack_name(?CONNACK_PROTO_VER)),
|
|
||||||
?assertEqual('CONNACK_INVALID_ID', emqx_packet:connack_name(?CONNACK_INVALID_ID)),
|
|
||||||
?assertEqual('CONNACK_SERVER', emqx_packet:connack_name(?CONNACK_SERVER)),
|
|
||||||
?assertEqual('CONNACK_CREDENTIALS', emqx_packet:connack_name(?CONNACK_CREDENTIALS)),
|
|
||||||
?assertEqual('CONNACK_AUTH', emqx_packet:connack_name(?CONNACK_AUTH)).
|
|
||||||
|
|
||||||
packet_format(_) ->
|
|
||||||
io:format("~s", [emqx_packet:format(?CONNECT_PACKET(#mqtt_packet_connect{}))]),
|
|
||||||
io:format("~s", [emqx_packet:format(?CONNACK_PACKET(?CONNACK_SERVER))]),
|
|
||||||
io:format("~s", [emqx_packet:format(?PUBLISH_PACKET(?QOS_1, 1))]),
|
|
||||||
io:format("~s", [emqx_packet:format(?PUBLISH_PACKET(?QOS_2, <<"topic">>, 10, <<"payload">>))]),
|
|
||||||
io:format("~s", [emqx_packet:format(?PUBACK_PACKET(?PUBACK, 98))]),
|
|
||||||
io:format("~s", [emqx_packet:format(?PUBREL_PACKET(99))]),
|
|
||||||
io:format("~s", [emqx_packet:format(?SUBSCRIBE_PACKET(15, [{<<"topic">>, ?QOS0}, {<<"topic1">>, ?QOS1}]))]),
|
|
||||||
io:format("~s", [emqx_packet:format(?SUBACK_PACKET(40, [?QOS0, ?QOS1]))]),
|
|
||||||
io:format("~s", [emqx_packet:format(?UNSUBSCRIBE_PACKET(89, [<<"t">>, <<"t2">>]))]),
|
|
||||||
io:format("~s", [emqx_packet:format(?UNSUBACK_PACKET(90))]).
|
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
%% Message Cases
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
|
|
||||||
message_make(_) ->
|
|
||||||
Msg = emqx_message:make(<<"clientid">>, <<"topic">>, <<"payload">>),
|
|
||||||
?assertEqual(0, Msg#mqtt_message.qos),
|
|
||||||
Msg1 = emqx_message:make(<<"clientid">>, qos2, <<"topic">>, <<"payload">>),
|
|
||||||
?assert(is_binary(Msg1#mqtt_message.id)),
|
|
||||||
?assertEqual(2, Msg1#mqtt_message.qos).
|
|
||||||
|
|
||||||
message_from_packet(_) ->
|
|
||||||
Msg = emqx_message:from_packet(?PUBLISH_PACKET(1, <<"topic">>, 10, <<"payload">>)),
|
|
||||||
?assertEqual(1, Msg#mqtt_message.qos),
|
|
||||||
?assertEqual(10, Msg#mqtt_message.pktid),
|
|
||||||
?assertEqual(<<"topic">>, Msg#mqtt_message.topic),
|
|
||||||
WillMsg = emqx_message:from_packet(#mqtt_packet_connect{will_flag = true,
|
|
||||||
will_topic = <<"WillTopic">>,
|
|
||||||
will_msg = <<"WillMsg">>}),
|
|
||||||
?assertEqual(<<"WillTopic">>, WillMsg#mqtt_message.topic),
|
|
||||||
?assertEqual(<<"WillMsg">>, WillMsg#mqtt_message.payload),
|
|
||||||
|
|
||||||
Msg2 = emqx_message:from_packet(<<"username">>, <<"clientid">>,
|
|
||||||
?PUBLISH_PACKET(1, <<"topic">>, 20, <<"payload">>)),
|
|
||||||
?assertEqual({<<"clientid">>, <<"username">>}, Msg2#mqtt_message.from),
|
|
||||||
io:format("~s", [emqx_message:format(Msg2)]).
|
|
||||||
|
|
||||||
message_flag(_) ->
|
|
||||||
Pkt = ?PUBLISH_PACKET(1, <<"t">>, 2, <<"payload">>),
|
|
||||||
Msg2 = emqx_message:from_packet(<<"clientid">>, Pkt),
|
|
||||||
Msg3 = emqx_message:set_flag(retain, Msg2),
|
|
||||||
Msg4 = emqx_message:set_flag(dup, Msg3),
|
|
||||||
?assert(Msg4#mqtt_message.dup),
|
|
||||||
?assert(Msg4#mqtt_message.retain),
|
|
||||||
Msg5 = emqx_message:set_flag(Msg4),
|
|
||||||
Msg6 = emqx_message:unset_flag(dup, Msg5),
|
|
||||||
Msg7 = emqx_message:unset_flag(retain, Msg6),
|
|
||||||
?assertNot(Msg7#mqtt_message.dup),
|
|
||||||
?assertNot(Msg7#mqtt_message.retain),
|
|
||||||
emqx_message:unset_flag(Msg7),
|
|
||||||
emqx_message:to_packet(Msg7).
|
|
||||||
|
|
Loading…
Reference in New Issue