test: for better test coverage
This commit is contained in:
parent
22dabcb3ea
commit
668d3be390
|
@ -330,10 +330,14 @@ parse_connect2(
|
||||||
<<>> ->
|
<<>> ->
|
||||||
ConnPacket1#mqtt_packet_connect{username = Username, password = Password};
|
ConnPacket1#mqtt_packet_connect{username = Username, password = Password};
|
||||||
_ ->
|
_ ->
|
||||||
?PARSE_ERR(malformed_connect_data)
|
?PARSE_ERR(#{
|
||||||
|
hint => malformed_connect,
|
||||||
|
unexpected_trailing_bytes => size(Rest7)
|
||||||
|
})
|
||||||
end;
|
end;
|
||||||
parse_connect2(_ProtoName, _, _) ->
|
parse_connect2(_ProtoName, Bin, _StrictMode) ->
|
||||||
?PARSE_ERR(malformed_connect_header).
|
%% sent less than 32 bytes
|
||||||
|
?PARSE_ERR(#{hint => malformed_connect, header_bytes => Bin}).
|
||||||
|
|
||||||
parse_packet(
|
parse_packet(
|
||||||
#mqtt_packet_header{type = ?CONNECT},
|
#mqtt_packet_header{type = ?CONNECT},
|
||||||
|
@ -486,7 +490,7 @@ parse_will_message(
|
||||||
) ->
|
) ->
|
||||||
{Props, Rest} = parse_properties(Bin, Ver, StrictMode),
|
{Props, Rest} = parse_properties(Bin, Ver, StrictMode),
|
||||||
{Topic, Rest1} = parse_utf8_string_with_hint(Rest, StrictMode, invalid_topic),
|
{Topic, Rest1} = parse_utf8_string_with_hint(Rest, StrictMode, invalid_topic),
|
||||||
{Payload, Rest2} = parse_binary_data(Rest1),
|
{Payload, Rest2} = parse_will_payload(Rest1),
|
||||||
{
|
{
|
||||||
Packet#mqtt_packet_connect{
|
Packet#mqtt_packet_connect{
|
||||||
will_props = Props,
|
will_props = Props,
|
||||||
|
@ -687,20 +691,24 @@ parse_utf8_string(Bin, _) when
|
||||||
->
|
->
|
||||||
?PARSE_ERR(#{reason => malformed_utf8_string_length}).
|
?PARSE_ERR(#{reason => malformed_utf8_string_length}).
|
||||||
|
|
||||||
parse_binary_data(<<Len:16/big, Data:Len/binary, Rest/binary>>) ->
|
parse_will_payload(<<Len:16/big, Data:Len/binary, Rest/binary>>) ->
|
||||||
{Data, Rest};
|
{Data, Rest};
|
||||||
parse_binary_data(<<Len:16/big, Rest/binary>>) when
|
parse_will_payload(<<Len:16/big, Rest/binary>>) when
|
||||||
Len > byte_size(Rest)
|
Len > byte_size(Rest)
|
||||||
->
|
->
|
||||||
?PARSE_ERR(#{
|
?PARSE_ERR(#{
|
||||||
hint => malformed_binary_data,
|
hint => malformed_will_payload,
|
||||||
parsed_length => Len,
|
parsed_length => Len,
|
||||||
remaining_bytes_length => byte_size(Rest)
|
remaining_bytes => byte_size(Rest)
|
||||||
});
|
});
|
||||||
parse_binary_data(Bin) when
|
parse_will_payload(Bin) when
|
||||||
2 > byte_size(Bin)
|
2 > byte_size(Bin)
|
||||||
->
|
->
|
||||||
?PARSE_ERR(malformed_binary_data_length).
|
?PARSE_ERR(#{
|
||||||
|
hint => malformed_will_payload,
|
||||||
|
length_bytes => size(Bin),
|
||||||
|
expected_bytes => 2
|
||||||
|
}).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% Serialize MQTT Packet
|
%% Serialize MQTT Packet
|
||||||
|
|
|
@ -57,11 +57,12 @@ groups() ->
|
||||||
t_serialize_parse_v5_connect,
|
t_serialize_parse_v5_connect,
|
||||||
t_serialize_parse_connect_without_clientid,
|
t_serialize_parse_connect_without_clientid,
|
||||||
t_serialize_parse_connect_with_will,
|
t_serialize_parse_connect_with_will,
|
||||||
|
t_serialize_parse_connect_with_malformed_will,
|
||||||
t_serialize_parse_bridge_connect,
|
t_serialize_parse_bridge_connect,
|
||||||
t_parse_invalid_remaining_len,
|
t_parse_invalid_remaining_len,
|
||||||
t_parse_malformed_properties,
|
t_parse_malformed_properties,
|
||||||
t_malformed_connect_header,
|
t_malformed_connect_header,
|
||||||
t_malformed_connect_payload,
|
t_malformed_connect_data,
|
||||||
t_reserved_connect_flag,
|
t_reserved_connect_flag,
|
||||||
t_invalid_clientid
|
t_invalid_clientid
|
||||||
]},
|
]},
|
||||||
|
@ -277,6 +278,37 @@ t_serialize_parse_connect_with_will(_) ->
|
||||||
?assertEqual(Bin, serialize_to_binary(Packet)),
|
?assertEqual(Bin, serialize_to_binary(Packet)),
|
||||||
?assertMatch({ok, Packet, <<>>, _}, emqx_frame:parse(Bin)).
|
?assertMatch({ok, Packet, <<>>, _}, emqx_frame:parse(Bin)).
|
||||||
|
|
||||||
|
t_serialize_parse_connect_with_malformed_will(_) ->
|
||||||
|
Packet2 = #mqtt_packet{
|
||||||
|
header = #mqtt_packet_header{type = ?CONNECT},
|
||||||
|
variable = #mqtt_packet_connect{
|
||||||
|
proto_ver = ?MQTT_PROTO_V3,
|
||||||
|
proto_name = <<"MQIsdp">>,
|
||||||
|
clientid = <<"mosqpub/10452-iMac.loca">>,
|
||||||
|
clean_start = true,
|
||||||
|
keepalive = 60,
|
||||||
|
will_retain = false,
|
||||||
|
will_qos = ?QOS_1,
|
||||||
|
will_flag = true,
|
||||||
|
will_topic = <<"/will">>,
|
||||||
|
will_payload = <<>>
|
||||||
|
}
|
||||||
|
},
|
||||||
|
<<16, 46, Body:44/binary, 0, 0>> = serialize_to_binary(Packet2),
|
||||||
|
%% too short
|
||||||
|
BadBin1 = <<16, 45, Body/binary, 0>>,
|
||||||
|
?ASSERT_FRAME_THROW(
|
||||||
|
#{hint := malformed_will_payload, length_bytes := 1, expected_bytes := 2},
|
||||||
|
emqx_frame:parse(BadBin1)
|
||||||
|
),
|
||||||
|
%% too long
|
||||||
|
BadBin2 = <<16, 47, Body/binary, 0, 2, 0>>,
|
||||||
|
?ASSERT_FRAME_THROW(
|
||||||
|
#{hint := malformed_will_payload, parsed_length := 2, remaining_bytes := 1},
|
||||||
|
emqx_frame:parse(BadBin2)
|
||||||
|
),
|
||||||
|
ok.
|
||||||
|
|
||||||
t_serialize_parse_bridge_connect(_) ->
|
t_serialize_parse_bridge_connect(_) ->
|
||||||
Bin =
|
Bin =
|
||||||
<<16, 86, 0, 6, 77, 81, 73, 115, 100, 112, 131, 44, 0, 60, 0, 19, 67, 95, 48, 48, 58, 48,
|
<<16, 86, 0, 6, 77, 81, 73, 115, 100, 112, 131, 44, 0, 60, 0, 19, 67, 95, 48, 48, 58, 48,
|
||||||
|
@ -643,16 +675,14 @@ t_parse_malformed_properties(_) ->
|
||||||
).
|
).
|
||||||
|
|
||||||
t_malformed_connect_header(_) ->
|
t_malformed_connect_header(_) ->
|
||||||
?assertException(
|
?ASSERT_FRAME_THROW(
|
||||||
throw,
|
#{hint := malformed_connect, header_bytes := _},
|
||||||
{frame_parse_error, malformed_connect_header},
|
|
||||||
emqx_frame:parse(<<16, 11, 0, 6, 77, 81, 73, 115, 100, 112, 3, 130, 1, 6>>)
|
emqx_frame:parse(<<16, 11, 0, 6, 77, 81, 73, 115, 100, 112, 3, 130, 1, 6>>)
|
||||||
).
|
).
|
||||||
|
|
||||||
t_malformed_connect_payload(_) ->
|
t_malformed_connect_data(_) ->
|
||||||
?assertException(
|
?ASSERT_FRAME_THROW(
|
||||||
throw,
|
#{hint := malformed_connect, unexpected_trailing_bytes := _},
|
||||||
{frame_parse_error, malformed_connect_data},
|
|
||||||
emqx_frame:parse(<<16, 15, 0, 6, 77, 81, 73, 115, 100, 112, 3, 0, 0, 0, 0, 0, 0>>)
|
emqx_frame:parse(<<16, 15, 0, 6, 77, 81, 73, 115, 100, 112, 3, 0, 0, 0, 0, 0, 0>>)
|
||||||
).
|
).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue