Procházet zdrojové kódy

Fixed issue #1811

Add tests case for issue #1811
HuangDan před 7 roky
rodič
revize
fde6a2a4c3
2 změnil soubory, kde provedl 31 přidání a 2 odebrání
  1. 1 1
      src/emqx_connection.erl
  2. 30 1
      test/emqx_SUITE.erl

+ 1 - 1
src/emqx_connection.erl

@@ -303,7 +303,7 @@ handle_packet(Data, State = #state{proto_state  = ProtoState,
                                    idle_timeout = IdleTimeout}) ->
     case catch emqx_frame:parse(Data, ParserState) of
         {more, NewParserState} ->
-            {noreply, State#state{parser_state = NewParserState}, IdleTimeout};
+            {noreply, run_socket(State#state{parser_state = NewParserState}), IdleTimeout};
         {ok, Packet = ?PACKET(Type), Rest} ->
             emqx_metrics:received(Packet),
             case emqx_protocol:received(Packet, ProtoState) of

+ 30 - 1
test/emqx_SUITE.erl

@@ -49,8 +49,18 @@
 
 -define(PUBPACKET, ?PUBLISH_PACKET(?PUBQOS, <<"sub/topic">>, ?PACKETID, <<"publish">>)).
 
+-define(PAYLOAD, [{type,"dsmSimulationData"},
+                  {id, 9999},
+                  {status, "running"},
+                  {soc, 1536702170},
+                  {fracsec, 451000},
+                  {data, lists:seq(1, 20480)}]).
+
+-define(BIG_PUBPACKET, ?PUBLISH_PACKET(?PUBQOS, <<"sub/topic">>, ?PACKETID, emqx_json:encode(?PAYLOAD))).
+
 all() ->
-    [{group, connect}].
+    [{group, connect},
+     {group, publish}].
 
 groups() ->
     [{connect, [non_parallel_tests],
@@ -60,6 +70,10 @@ groups() ->
       mqtt_connect_with_ssl_oneway,
       mqtt_connect_with_ssl_twoway,
       mqtt_connect_with_ws
+      ]},
+    {publish, [non_parallel_tests],
+      [
+      packet_size
       ]}].
 
 init_per_suite(Config) ->
@@ -157,6 +171,21 @@ mqtt_connect_with_ws(_Config) ->
     {close, _} = rfc6455_client:close(WS),
     ok.
 
+%%issue 1811
+packet_size(_Config) ->
+    {ok, Sock} = emqx_client_sock:connect({127,0,0,1}, 1883, [binary, {packet, raw}, {active, false}], 3000),
+    Packet = raw_send_serialise(?CLIENT),
+    emqx_client_sock:send(Sock, Packet),
+    {ok, Data} = gen_tcp:recv(Sock, 0),
+    {ok, ?CONNACK_PACKET(?CONNACK_ACCEPT), _} = raw_recv_pase(Data),
+
+    %% Pub Packet QoS 1
+    PubPacket = raw_send_serialise(?BIG_PUBPACKET),
+    emqx_client_sock:send(Sock, PubPacket),
+    {ok, Data1} = gen_tcp:recv(Sock, 0),
+    {ok, ?PUBACK_PACKET(?PACKETID), _} = raw_recv_pase(Data1),
+    emqx_client_sock:close(Sock).
+
 raw_send_serialise(Packet) ->
     emqx_frame:serialize(Packet).