linjun 7 лет назад
Родитель
Сommit
814fd3fc9e
4 измененных файлов с 60 добавлено и 117 удалено
  1. 1 1
      src/emqx_protocol.erl
  2. 28 59
      test/emqx_connection_SUITE.erl
  3. 4 2
      test/emqx_protocol_SUITE.erl
  4. 27 55
      test/emqx_ws_connection_SUITE.erl

+ 1 - 1
src/emqx_protocol.erl

@@ -84,7 +84,7 @@
 
 -spec(init(map(), list()) -> state()).
 init(SocketOpts = #{peername := Peername, peercert := Peercert, sendfun := SendFun}, Options)  ->
-    ConnMod = maps:get(conn_mod, SocketOpts),
+    ConnMod = maps:get(conn_mod, SocketOpts, undefined),
     Zone = proplists:get_value(zone, Options),
     #pstate{zone                = Zone,
             sendfun             = SendFun,

+ 28 - 59
test/emqx_connection_SUITE.erl

@@ -23,62 +23,6 @@
 
 -include("emqx_mqtt.hrl").
 
--define(STATS, [{mailbox_len, _},
-                {heap_size, _},
-                {reductions, _},
-                {recv_pkt, _},
-                {recv_msg, _},
-                {send_pkt, _},
-                {send_msg, _},
-                {recv_oct, _},
-                {recv_cnt, _},
-                {send_oct, _},
-                {send_cnt, _},
-                {send_pend, _}]).
-
--define(ATTRS, [{clean_start, _},
-                {client_id, _},
-                {conn_mod, _},
-                {connected_at, _},
-                {is_bridge, _},
-                {is_super, _},
-                {keepalive, _},
-                {mountpoint, _},
-                {peercert, _},
-                {peername, _},
-                {proto_name, _},
-                {proto_ver, _},
-                {sockname, _},
-                {socktype, _},
-                {username, _},
-                {zone, _}]).
-
--define(INFO, [{ack_props, _},
-               {active_n, _},
-               {clean_start, _},
-               {client_id, _},
-               {conn_mod, _},
-               {conn_props, _},
-               {conn_state, _},
-               {connected_at, _},
-               {enable_acl, _},
-               {is_bridge, _},
-               {is_super, _},
-               {keepalive, _},
-               {mountpoint, _},
-               {peercert, _},
-               {peername, _},
-               {proto_name, _},
-               {proto_ver, _},
-               {pub_limit, _},
-               {rate_limit, _},
-               {session, _},
-               {sockname, _},
-               {socktype, _},
-               {topic_aliases, _},
-               {username, _},
-               {zone, _}]).
-
 all() ->
     [t_connect_api].
 
@@ -96,9 +40,34 @@ t_connect_api(_Config) ->
                                        {password, <<"pass1">>}]),
     {ok, _} = emqx_client:connect(T1),
     CPid = emqx_cm:lookup_conn_pid(<<"client1">>),
-    ?STATS = emqx_connection:stats(CPid),
-    ?ATTRS = emqx_connection:attrs(CPid),
-    ?INFO = emqx_connection:info(CPid),
+    ConnStats = emqx_connection:stats(CPid),
+    ok = t_stats(ConnStats),
+    ConnAttrs = emqx_connection:attrs(CPid),
+    io:io_format("~p~n", [ConnAttrs]),
+    ok = t_attrs(ConnAttrs),
+    ConnInfo = emqx_connection:info(CPid),
+    ok = t_info(ConnInfo),
     SessionPid = emqx_connection:session(CPid),
     true = is_pid(SessionPid),
     emqx_client:disconnect(T1).
+
+t_info(ConnInfo) ->
+    ?assertEqual(tcp, proplists:get_value(socktype, ConnInfo)),
+    ?assertEqual(running, proplists:get_value(conn_state, ConnInfo)),
+    ?assertEqual(<<"client1">>, proplists:get_value(client_id, ConnInfo)),
+    ?assertEqual(<<"testuser1">>, proplists:get_value(username, ConnInfo)),
+    ?assertEqual(<<"MQTT">>, proplists:get_value(proto_name, ConnInfo)).
+
+t_attrs(AttrsData) ->
+    ?assertEqual(<<"client1">>, proplists:get_value(client_id, AttrsData)),
+    ?assertEqual(emqx_connection, proplists:get_value(conn_mod, AttrsData)),  
+    ?assertEqual(<<"testuser1">>, proplists:get_value(username, AttrsData)).
+
+t_stats(StatsData) ->
+    ?assertEqual(true, proplists:get_value(recv_oct, StatsData) >= 0),
+    ?assertEqual(true, proplists:get_value(mailbox_len, StatsData) >= 0),
+    ?assertEqual(true, proplists:get_value(heap_size, StatsData) >= 0),
+    ?assertEqual(true, proplists:get_value(reductions, StatsData) >=0),
+    ?assertEqual(true, proplists:get_value(recv_pkt, StatsData) =:=1),
+    ?assertEqual(true, proplists:get_value(recv_msg, StatsData) >=0),
+    ?assertEqual(true, proplists:get_value(send_pkt, StatsData) =:=1).

+ 4 - 2
test/emqx_protocol_SUITE.erl

@@ -62,7 +62,8 @@
           connected,
           connected_at,
           ignore_loop,
-          topic_alias_maximum
+          topic_alias_maximum,
+          conn_mod
         }).
 
 
@@ -90,7 +91,8 @@
                 send_stats          = SendStats,
                 connected           = false,
                 ignore_loop         = false,
-                topic_alias_maximum = #{to_client => 0, from_client => 0}}).
+                topic_alias_maximum = #{to_client => 0, from_client => 0},
+                conn_mod            = emqx_connection}).
 
 all() ->
     [

+ 27 - 55
test/emqx_ws_connection_SUITE.erl

@@ -35,58 +35,6 @@
 
 -define(PUBQOS, 1).
 
--define(INFO, [{socktype, _},
-               {conn_state, _},
-               {peername, _},
-               {sockname, _},
-               {zone, _},
-               {client_id, <<"mqtt_client">>},
-               {username, <<"admin">>},
-               {peername, _},
-               {peercert, _},
-               {proto_ver, _},
-               {proto_name, _},
-               {clean_start, _},
-               {keepalive, _},
-               {mountpoint, _},
-               {is_super, _},
-               {is_bridge, _},
-               {connected_at, _},
-               {conn_mod, _},
-               {conn_props, _},
-               {ack_props, _},
-               {session, _},
-               {topic_aliases, _},
-               {enable_acl, _}]).
-
--define(ATTRS, [{clean_start,true},
-                {client_id, <<"mqtt_client">>},
-                {conn_mod, _},
-                {connected_at, _},
-                {is_bridge, _},
-                {is_super, _},
-                {keepalive, _},
-                {mountpoint, _},
-                {peercert, _},
-                {peername, _},
-                {proto_name, _},
-                {proto_ver, _},
-                {sockname, _},
-                {username, <<"admin">>},
-                {zone, _}]).
-
--define(STATS, [{recv_oct, _},
-                {recv_cnt, _},
-                {send_oct, _},
-                {send_cnt, _},
-                {mailbox_len, _},
-                {heap_size, _},
-                {reductions, _},
-                {recv_pkt, _},
-                {recv_msg, _},
-                {send_pkt, _},
-                {send_msg, _}]).
-
 all() ->
     [t_ws_connect_api].
 
@@ -105,9 +53,12 @@ t_ws_connect_api(_Config) ->
     {binary, CONACK} = rfc6455_client:recv(WS),
     {ok, ?CONNACK_PACKET(?CONNACK_ACCEPT), _} = raw_recv_pase(CONACK),
     Pid = emqx_cm:lookup_conn_pid(<<"mqtt_client">>),
-    ?INFO = emqx_ws_connection:info(Pid),
-    ?ATTRS = emqx_ws_connection:attrs(Pid),
-    ?STATS = emqx_ws_connection:stats(Pid),
+    ConnInfo = emqx_ws_connection:info(Pid),
+    ok = t_info(ConnInfo),
+    ConnAttrs = emqx_ws_connection:attrs(Pid),
+    ok = t_attrs(ConnAttrs),
+    ConnStats = emqx_ws_connection:stats(Pid),
+    ok = t_stats(ConnStats),
     SessionPid = emqx_ws_connection:session(Pid),
     true = is_pid(SessionPid),
     ok = emqx_ws_connection:kick(Pid),
@@ -120,3 +71,24 @@ raw_send_serialize(Packet) ->
 raw_recv_pase(P) ->
     emqx_frame:parse(P, {none, #{max_packet_size => ?MAX_PACKET_SIZE,
                                  version         => ?MQTT_PROTO_V4} }).
+
+t_info(InfoData) ->
+    ?assertEqual(websocket, proplists:get_value(socktype, InfoData)),
+    ?assertEqual(running, proplists:get_value(conn_state, InfoData)),
+    ?assertEqual(<<"mqtt_client">>, proplists:get_value(client_id, InfoData)),
+    ?assertEqual(<<"admin">>, proplists:get_value(username, InfoData)),
+    ?assertEqual(<<"MQTT">>, proplists:get_value(proto_name, InfoData)).
+
+t_attrs(AttrsData) ->
+    ?assertEqual(<<"mqtt_client">>, proplists:get_value(client_id, AttrsData)),
+    ?assertEqual(emqx_ws_connection, proplists:get_value(conn_mod, AttrsData)),
+    ?assertEqual(<<"admin">>, proplists:get_value(username, AttrsData)).
+
+t_stats(StatsData) ->
+    ?assertEqual(true, proplists:get_value(recv_oct, StatsData) >= 0),
+    ?assertEqual(true, proplists:get_value(mailbox_len, StatsData) >= 0),
+    ?assertEqual(true, proplists:get_value(heap_size, StatsData) >= 0),
+    ?assertEqual(true, proplists:get_value(reductions, StatsData) >=0),
+    ?assertEqual(true, proplists:get_value(recv_pkt, StatsData) =:=1),
+    ?assertEqual(true, proplists:get_value(recv_msg, StatsData) >=0),
+    ?assertEqual(true, proplists:get_value(send_pkt, StatsData) =:=1).