From 760ac9f2f966a46e5237d322d5093edeb8a11074 Mon Sep 17 00:00:00 2001 From: linjun <1045735402@qq.com> Date: Wed, 27 Feb 2019 11:09:45 +0800 Subject: [PATCH 01/11] Add the value of attribute socktype in emqx_conn_type table --- src/emqx_connection.erl | 10 ++++------ src/emqx_protocol.erl | 14 +++++++++----- src/emqx_ws_connection.erl | 8 ++++---- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/emqx_connection.erl b/src/emqx_connection.erl index da75d211e..225973d52 100644 --- a/src/emqx_connection.erl +++ b/src/emqx_connection.erl @@ -62,17 +62,14 @@ start_link(Transport, Socket, Options) -> info(CPid) when is_pid(CPid) -> call(CPid, info); -info(#state{transport = Transport, - socket = Socket, - peername = Peername, +info(#state{peername = Peername, sockname = Sockname, conn_state = ConnState, active_n = ActiveN, rate_limit = RateLimit, pub_limit = PubLimit, proto_state = ProtoState}) -> - ConnInfo = [{socktype, Transport:type(Socket)}, - {peername, Peername}, + ConnInfo = [{peername, Peername}, {sockname, Sockname}, {conn_state, ConnState}, {active_n, ActiveN}, @@ -137,7 +134,8 @@ init([Transport, RawSocket, Options]) -> ProtoState = emqx_protocol:init(#{peername => Peername, sockname => Sockname, peercert => Peercert, - sendfun => SendFun}, Options), + sendfun => SendFun, + socktype => Transport:type(Socket)}, Options), ParserState = emqx_protocol:parser(ProtoState), GcPolicy = emqx_zone:get_env(Zone, force_gc_policy, false), GcState = emqx_gc:init(GcPolicy), diff --git a/src/emqx_protocol.erl b/src/emqx_protocol.erl index c6260168c..85eaabc26 100644 --- a/src/emqx_protocol.erl +++ b/src/emqx_protocol.erl @@ -65,7 +65,8 @@ connected, connected_at, ignore_loop, - topic_alias_maximum + topic_alias_maximum, + socktype }). -opaque(state() :: #pstate{}). @@ -82,7 +83,7 @@ %%------------------------------------------------------------------------------ -spec(init(map(), list()) -> state()). -init(#{peername := Peername, peercert := Peercert, sendfun := SendFun}, Options) -> +init(#{peername := Peername, peercert := Peercert, sendfun := SendFun, socktype := SockType}, Options) -> Zone = proplists:get_value(zone, Options), #pstate{zone = Zone, sendfun = SendFun, @@ -107,7 +108,8 @@ init(#{peername := Peername, peercert := Peercert, sendfun := SendFun}, Options) send_stats = #{msg => 0, pkt => 0}, connected = false, ignore_loop = emqx_config:get_env(mqtt_ignore_loop_deliver, false), - topic_alias_maximum = #{to_client => 0, from_client => 0}}. + topic_alias_maximum = #{to_client => 0, from_client => 0}, + socktype = SockType}. init_username(Peercert, Options) -> case proplists:get_value(peer_cert_as_username, Options) of @@ -149,7 +151,8 @@ attrs(#pstate{zone = Zone, mountpoint = Mountpoint, is_super = IsSuper, is_bridge = IsBridge, - connected_at = ConnectedAt}) -> + connected_at = ConnectedAt, + socktype = SockType}) -> [{zone, Zone}, {client_id, ClientId}, {username, Username}, @@ -162,7 +165,8 @@ attrs(#pstate{zone = Zone, {mountpoint, Mountpoint}, {is_super, IsSuper}, {is_bridge, IsBridge}, - {connected_at, ConnectedAt}]. + {connected_at, ConnectedAt}, + {socktype, SockType}]. attr(max_inflight, #pstate{proto_ver = ?MQTT_PROTO_V5, conn_props = ConnProps}) -> get_property('Receive-Maximum', ConnProps, 65535); diff --git a/src/emqx_ws_connection.erl b/src/emqx_ws_connection.erl index fec52995f..2b50559cc 100644 --- a/src/emqx_ws_connection.erl +++ b/src/emqx_ws_connection.erl @@ -58,11 +58,10 @@ info(#state{peername = Peername, sockname = Sockname, proto_state = ProtoState}) -> ProtoInfo = emqx_protocol:info(ProtoState), - ConnInfo = [{socktype, websocket}, - {conn_state, running}, + ConnInfo = [{conn_state, running}, {peername, Peername}, {sockname, Sockname}], - lists:append([ConnInfo, ProtoInfo]). + lists:append([ConnInfo, ProtoInfo]). %% for dashboard attrs(WSPid) when is_pid(WSPid) -> @@ -127,7 +126,8 @@ websocket_init(#state{request = Req, options = Options}) -> ProtoState = emqx_protocol:init(#{peername => Peername, sockname => Sockname, peercert => Peercert, - sendfun => send_fun(self())}, Options), + sendfun => send_fun(self()), + socktype => websocket}, Options), ParserState = emqx_protocol:parser(ProtoState), Zone = proplists:get_value(zone, Options), EnableStats = emqx_zone:get_env(Zone, enable_stats, true), From 7af6051e2500d834153f2ff69ce71f922528bcd8 Mon Sep 17 00:00:00 2001 From: linjun <1045735402@qq.com> Date: Wed, 27 Feb 2019 13:54:24 +0800 Subject: [PATCH 02/11] Refactor code --- src/emqx_connection.erl | 4 ++-- src/emqx_protocol.erl | 5 +++-- src/emqx_ws_connection.erl | 3 +-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/emqx_connection.erl b/src/emqx_connection.erl index 225973d52..222e2bb3f 100644 --- a/src/emqx_connection.erl +++ b/src/emqx_connection.erl @@ -131,11 +131,11 @@ init([Transport, RawSocket, Options]) -> EnableStats = emqx_zone:get_env(Zone, enable_stats, true), IdleTimout = emqx_zone:get_env(Zone, idle_timeout, 30000), SendFun = send_fun(Transport, Socket), + SockType = Transport:type(Socket), ProtoState = emqx_protocol:init(#{peername => Peername, sockname => Sockname, peercert => Peercert, - sendfun => SendFun, - socktype => Transport:type(Socket)}, Options), + sendfun => SendFun}, [Options ++ [{socktype, SockType}]]), ParserState = emqx_protocol:parser(ProtoState), GcPolicy = emqx_zone:get_env(Zone, force_gc_policy, false), GcState = emqx_gc:init(GcPolicy), diff --git a/src/emqx_protocol.erl b/src/emqx_protocol.erl index 85eaabc26..d19cc637a 100644 --- a/src/emqx_protocol.erl +++ b/src/emqx_protocol.erl @@ -83,8 +83,9 @@ %%------------------------------------------------------------------------------ -spec(init(map(), list()) -> state()). -init(#{peername := Peername, peercert := Peercert, sendfun := SendFun, socktype := SockType}, Options) -> +init(#{peername := Peername, peercert := Peercert, sendfun := SendFun}, Options) -> Zone = proplists:get_value(zone, Options), + SockType = proplists:get_value(socktype, Options, tcp), #pstate{zone = Zone, sendfun = SendFun, peername = Peername, @@ -109,7 +110,7 @@ init(#{peername := Peername, peercert := Peercert, sendfun := SendFun, socktype connected = false, ignore_loop = emqx_config:get_env(mqtt_ignore_loop_deliver, false), topic_alias_maximum = #{to_client => 0, from_client => 0}, - socktype = SockType}. + socktype = SockType}. init_username(Peercert, Options) -> case proplists:get_value(peer_cert_as_username, Options) of diff --git a/src/emqx_ws_connection.erl b/src/emqx_ws_connection.erl index 2b50559cc..10da543e0 100644 --- a/src/emqx_ws_connection.erl +++ b/src/emqx_ws_connection.erl @@ -126,8 +126,7 @@ websocket_init(#state{request = Req, options = Options}) -> ProtoState = emqx_protocol:init(#{peername => Peername, sockname => Sockname, peercert => Peercert, - sendfun => send_fun(self()), - socktype => websocket}, Options), + sendfun => send_fun(self())}, [Options ++ [{socktype, websocket}]]), ParserState = emqx_protocol:parser(ProtoState), Zone = proplists:get_value(zone, Options), EnableStats = emqx_zone:get_env(Zone, enable_stats, true), From e1a5188d09179cebe268e2c60c3d87b042719151 Mon Sep 17 00:00:00 2001 From: linjun <1045735402@qq.com> Date: Wed, 27 Feb 2019 14:00:11 +0800 Subject: [PATCH 03/11] Adjusting code --- src/emqx_protocol.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emqx_protocol.erl b/src/emqx_protocol.erl index d19cc637a..a3989530a 100644 --- a/src/emqx_protocol.erl +++ b/src/emqx_protocol.erl @@ -153,7 +153,7 @@ attrs(#pstate{zone = Zone, is_super = IsSuper, is_bridge = IsBridge, connected_at = ConnectedAt, - socktype = SockType}) -> + socktype = SockType}) -> [{zone, Zone}, {client_id, ClientId}, {username, Username}, From 44529a278d98b3d9cb4b7ee9b72426e1d72a86ed Mon Sep 17 00:00:00 2001 From: linjun <1045735402@qq.com> Date: Wed, 27 Feb 2019 14:39:49 +0800 Subject: [PATCH 04/11] Adjusting code --- src/emqx_connection.erl | 2 +- src/emqx_ws_connection.erl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/emqx_connection.erl b/src/emqx_connection.erl index 222e2bb3f..868ef1deb 100644 --- a/src/emqx_connection.erl +++ b/src/emqx_connection.erl @@ -135,7 +135,7 @@ init([Transport, RawSocket, Options]) -> ProtoState = emqx_protocol:init(#{peername => Peername, sockname => Sockname, peercert => Peercert, - sendfun => SendFun}, [Options ++ [{socktype, SockType}]]), + sendfun => SendFun}, Options ++ [{socktype, SockType}]), ParserState = emqx_protocol:parser(ProtoState), GcPolicy = emqx_zone:get_env(Zone, force_gc_policy, false), GcState = emqx_gc:init(GcPolicy), diff --git a/src/emqx_ws_connection.erl b/src/emqx_ws_connection.erl index 10da543e0..6cd0b701d 100644 --- a/src/emqx_ws_connection.erl +++ b/src/emqx_ws_connection.erl @@ -126,7 +126,7 @@ websocket_init(#state{request = Req, options = Options}) -> ProtoState = emqx_protocol:init(#{peername => Peername, sockname => Sockname, peercert => Peercert, - sendfun => send_fun(self())}, [Options ++ [{socktype, websocket}]]), + sendfun => send_fun(self())}, Options ++ [{socktype, websocket}]), ParserState = emqx_protocol:parser(ProtoState), Zone = proplists:get_value(zone, Options), EnableStats = emqx_zone:get_env(Zone, enable_stats, true), From 1fe74313703c2d0fc48bafc02e441eb88a6d9f07 Mon Sep 17 00:00:00 2001 From: linjun <1045735402@qq.com> Date: Wed, 27 Feb 2019 16:33:49 +0800 Subject: [PATCH 05/11] Adjusting test case --- test/emqx_connection_SUITE.erl | 1 + test/emqx_ws_connection_SUITE.erl | 1 + 2 files changed, 2 insertions(+) diff --git a/test/emqx_connection_SUITE.erl b/test/emqx_connection_SUITE.erl index aca650215..cf1913a3a 100644 --- a/test/emqx_connection_SUITE.erl +++ b/test/emqx_connection_SUITE.erl @@ -48,6 +48,7 @@ {proto_name, _}, {proto_ver, _}, {sockname, _}, + {socktype, _}, {username, _}, {zone, _}]). diff --git a/test/emqx_ws_connection_SUITE.erl b/test/emqx_ws_connection_SUITE.erl index c3698861b..fb5d212fc 100644 --- a/test/emqx_ws_connection_SUITE.erl +++ b/test/emqx_ws_connection_SUITE.erl @@ -70,6 +70,7 @@ {proto_name, _}, {proto_ver, _}, {sockname, _}, + {socktype, _}, {username, <<"admin">>}, {zone, _}]). From 16165ce9358c3d52bf8cb3ebc1ffcb71b429915f Mon Sep 17 00:00:00 2001 From: linjun <1045735402@qq.com> Date: Thu, 28 Feb 2019 11:32:05 +0800 Subject: [PATCH 06/11] Use conn_mod instead of socktype --- src/emqx_connection.erl | 11 +++++++---- src/emqx_protocol.erl | 12 ++++++------ src/emqx_ws_connection.erl | 6 ++++-- test/emqx_connection_SUITE.erl | 2 ++ test/emqx_ws_connection_SUITE.erl | 3 ++- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/emqx_connection.erl b/src/emqx_connection.erl index 868ef1deb..34a700b59 100644 --- a/src/emqx_connection.erl +++ b/src/emqx_connection.erl @@ -62,14 +62,17 @@ start_link(Transport, Socket, Options) -> info(CPid) when is_pid(CPid) -> call(CPid, info); -info(#state{peername = Peername, +info(#state{transport = Transport, + socket = Socket, + peername = Peername, sockname = Sockname, conn_state = ConnState, active_n = ActiveN, rate_limit = RateLimit, pub_limit = PubLimit, proto_state = ProtoState}) -> - ConnInfo = [{peername, Peername}, + ConnInfo = [{socktype, Transport:type(Socket)}, + {peername, Peername}, {sockname, Sockname}, {conn_state, ConnState}, {active_n, ActiveN}, @@ -131,11 +134,11 @@ init([Transport, RawSocket, Options]) -> EnableStats = emqx_zone:get_env(Zone, enable_stats, true), IdleTimout = emqx_zone:get_env(Zone, idle_timeout, 30000), SendFun = send_fun(Transport, Socket), - SockType = Transport:type(Socket), ProtoState = emqx_protocol:init(#{peername => Peername, sockname => Sockname, peercert => Peercert, - sendfun => SendFun}, Options ++ [{socktype, SockType}]), + sendfun => SendFun, + conn_mod => ?MODULE}, Options), ParserState = emqx_protocol:parser(ProtoState), GcPolicy = emqx_zone:get_env(Zone, force_gc_policy, false), GcState = emqx_gc:init(GcPolicy), diff --git a/src/emqx_protocol.erl b/src/emqx_protocol.erl index a3989530a..33edb78a0 100644 --- a/src/emqx_protocol.erl +++ b/src/emqx_protocol.erl @@ -66,7 +66,7 @@ connected_at, ignore_loop, topic_alias_maximum, - socktype + conn_mod }). -opaque(state() :: #pstate{}). @@ -83,9 +83,9 @@ %%------------------------------------------------------------------------------ -spec(init(map(), list()) -> state()). -init(#{peername := Peername, peercert := Peercert, sendfun := SendFun}, Options) -> +init(SocketOpts = #{peername := Peername, peercert := Peercert, sendfun := SendFun}, Options) -> + ConnMod = maps:get(conn_mod, SocketOpts), Zone = proplists:get_value(zone, Options), - SockType = proplists:get_value(socktype, Options, tcp), #pstate{zone = Zone, sendfun = SendFun, peername = Peername, @@ -110,7 +110,7 @@ init(#{peername := Peername, peercert := Peercert, sendfun := SendFun}, Options) connected = false, ignore_loop = emqx_config:get_env(mqtt_ignore_loop_deliver, false), topic_alias_maximum = #{to_client => 0, from_client => 0}, - socktype = SockType}. + conn_mod = ConnMod}. init_username(Peercert, Options) -> case proplists:get_value(peer_cert_as_username, Options) of @@ -153,7 +153,7 @@ attrs(#pstate{zone = Zone, is_super = IsSuper, is_bridge = IsBridge, connected_at = ConnectedAt, - socktype = SockType}) -> + conn_mod = ConnMod}) -> [{zone, Zone}, {client_id, ClientId}, {username, Username}, @@ -167,7 +167,7 @@ attrs(#pstate{zone = Zone, {is_super, IsSuper}, {is_bridge, IsBridge}, {connected_at, ConnectedAt}, - {socktype, SockType}]. + {conn_mod, ConnMod}]. attr(max_inflight, #pstate{proto_ver = ?MQTT_PROTO_V5, conn_props = ConnProps}) -> get_property('Receive-Maximum', ConnProps, 65535); diff --git a/src/emqx_ws_connection.erl b/src/emqx_ws_connection.erl index 6cd0b701d..c7e42c408 100644 --- a/src/emqx_ws_connection.erl +++ b/src/emqx_ws_connection.erl @@ -58,7 +58,8 @@ info(#state{peername = Peername, sockname = Sockname, proto_state = ProtoState}) -> ProtoInfo = emqx_protocol:info(ProtoState), - ConnInfo = [{conn_state, running}, + ConnInfo = [{socktype, websocket}, + {conn_state, running}, {peername, Peername}, {sockname, Sockname}], lists:append([ConnInfo, ProtoInfo]). @@ -126,7 +127,8 @@ websocket_init(#state{request = Req, options = Options}) -> ProtoState = emqx_protocol:init(#{peername => Peername, sockname => Sockname, peercert => Peercert, - sendfun => send_fun(self())}, Options ++ [{socktype, websocket}]), + sendfun => send_fun(self()), + conn_mod => ?MODULE}, Options), ParserState = emqx_protocol:parser(ProtoState), Zone = proplists:get_value(zone, Options), EnableStats = emqx_zone:get_env(Zone, enable_stats, true), diff --git a/test/emqx_connection_SUITE.erl b/test/emqx_connection_SUITE.erl index cf1913a3a..ae2ebd176 100644 --- a/test/emqx_connection_SUITE.erl +++ b/test/emqx_connection_SUITE.erl @@ -38,6 +38,7 @@ -define(ATTRS, [{clean_start, _}, {client_id, _}, + {conn_mod, _}, {connected_at, _}, {is_bridge, _}, {is_super, _}, @@ -56,6 +57,7 @@ {active_n, _}, {clean_start, _}, {client_id, _}, + {conn_mod, _}, {conn_props, _}, {conn_state, _}, {connected_at, _}, diff --git a/test/emqx_ws_connection_SUITE.erl b/test/emqx_ws_connection_SUITE.erl index fb5d212fc..5f7c15348 100644 --- a/test/emqx_ws_connection_SUITE.erl +++ b/test/emqx_ws_connection_SUITE.erl @@ -52,6 +52,7 @@ {is_super, _}, {is_bridge, _}, {connected_at, _}, + {conn_mod, _}, {conn_props, _}, {ack_props, _}, {session, _}, @@ -60,6 +61,7 @@ -define(ATTRS, [{clean_start,true}, {client_id, <<"mqtt_client">>}, + {conn_mod, emqx_connection}, {connected_at, _}, {is_bridge, _}, {is_super, _}, @@ -70,7 +72,6 @@ {proto_name, _}, {proto_ver, _}, {sockname, _}, - {socktype, _}, {username, <<"admin">>}, {zone, _}]). From 37c7e684b078959a90b8d04d3616c04b39174f4a Mon Sep 17 00:00:00 2001 From: linjun <1045735402@qq.com> Date: Thu, 28 Feb 2019 14:32:13 +0800 Subject: [PATCH 07/11] Adjusting code --- test/emqx_ws_connection_SUITE.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/emqx_ws_connection_SUITE.erl b/test/emqx_ws_connection_SUITE.erl index 5f7c15348..605e3f710 100644 --- a/test/emqx_ws_connection_SUITE.erl +++ b/test/emqx_ws_connection_SUITE.erl @@ -61,7 +61,7 @@ -define(ATTRS, [{clean_start,true}, {client_id, <<"mqtt_client">>}, - {conn_mod, emqx_connection}, + {conn_mod, _}, {connected_at, _}, {is_bridge, _}, {is_super, _}, From 814fd3fc9e752ab7f103a39053e3891f83d96d43 Mon Sep 17 00:00:00 2001 From: linjun <1045735402@qq.com> Date: Thu, 28 Feb 2019 16:36:47 +0800 Subject: [PATCH 08/11] Fix test case --- src/emqx_protocol.erl | 2 +- test/emqx_connection_SUITE.erl | 87 ++++++++++--------------------- test/emqx_protocol_SUITE.erl | 6 ++- test/emqx_ws_connection_SUITE.erl | 82 ++++++++++------------------- 4 files changed, 60 insertions(+), 117 deletions(-) diff --git a/src/emqx_protocol.erl b/src/emqx_protocol.erl index 33edb78a0..76af0c823 100644 --- a/src/emqx_protocol.erl +++ b/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, diff --git a/test/emqx_connection_SUITE.erl b/test/emqx_connection_SUITE.erl index ae2ebd176..ed86cfaed 100644 --- a/test/emqx_connection_SUITE.erl +++ b/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). \ No newline at end of file diff --git a/test/emqx_protocol_SUITE.erl b/test/emqx_protocol_SUITE.erl index e48825d76..05f8af2e0 100644 --- a/test/emqx_protocol_SUITE.erl +++ b/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() -> [ diff --git a/test/emqx_ws_connection_SUITE.erl b/test/emqx_ws_connection_SUITE.erl index 605e3f710..c45344bae 100644 --- a/test/emqx_ws_connection_SUITE.erl +++ b/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). \ No newline at end of file From 8792f7e02ba4c1f6bf83f3e4db1ea9d9bfdf527b Mon Sep 17 00:00:00 2001 From: turtled Date: Thu, 28 Feb 2019 16:56:04 +0800 Subject: [PATCH 09/11] Review code --- src/emqx_protocol.erl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/emqx_protocol.erl b/src/emqx_protocol.erl index 76af0c823..cbdd6fa5b 100644 --- a/src/emqx_protocol.erl +++ b/src/emqx_protocol.erl @@ -84,7 +84,6 @@ -spec(init(map(), list()) -> state()). init(SocketOpts = #{peername := Peername, peercert := Peercert, sendfun := SendFun}, Options) -> - ConnMod = maps:get(conn_mod, SocketOpts, undefined), Zone = proplists:get_value(zone, Options), #pstate{zone = Zone, sendfun = SendFun, @@ -110,7 +109,7 @@ init(SocketOpts = #{peername := Peername, peercert := Peercert, sendfun := SendF connected = false, ignore_loop = emqx_config:get_env(mqtt_ignore_loop_deliver, false), topic_alias_maximum = #{to_client => 0, from_client => 0}, - conn_mod = ConnMod}. + conn_mod = maps:get(conn_mod, SocketOpts, undefined)}. init_username(Peercert, Options) -> case proplists:get_value(peer_cert_as_username, Options) of From df97eb0007be35aa8dd2a0af4338b7edf3c918cd Mon Sep 17 00:00:00 2001 From: turtled Date: Thu, 28 Feb 2019 16:56:44 +0800 Subject: [PATCH 10/11] Review code --- src/emqx_ws_connection.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emqx_ws_connection.erl b/src/emqx_ws_connection.erl index c7e42c408..2bd649ca8 100644 --- a/src/emqx_ws_connection.erl +++ b/src/emqx_ws_connection.erl @@ -62,7 +62,7 @@ info(#state{peername = Peername, {conn_state, running}, {peername, Peername}, {sockname, Sockname}], - lists:append([ConnInfo, ProtoInfo]). + lists:append([ConnInfo, ProtoInfo]). %% for dashboard attrs(WSPid) when is_pid(WSPid) -> From 42932d7b5d9ad3445d5dd2a23048a79539f0b3c3 Mon Sep 17 00:00:00 2001 From: turtled Date: Thu, 28 Feb 2019 16:57:40 +0800 Subject: [PATCH 11/11] Format code --- src/emqx_ws_connection.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emqx_ws_connection.erl b/src/emqx_ws_connection.erl index 2bd649ca8..7f77a7f8c 100644 --- a/src/emqx_ws_connection.erl +++ b/src/emqx_ws_connection.erl @@ -62,7 +62,7 @@ info(#state{peername = Peername, {conn_state, running}, {peername, Peername}, {sockname, Sockname}], - lists:append([ConnInfo, ProtoInfo]). + lists:append([ConnInfo, ProtoInfo]). %% for dashboard attrs(WSPid) when is_pid(WSPid) ->