Rm acl_deny_action_ct test case

This commit is contained in:
turtled 2019-02-28 22:19:19 +08:00
parent da755b88c7
commit 22aa7d4668
2 changed files with 78 additions and 79 deletions

View File

@ -184,10 +184,10 @@ idle(enter, _, State) ->
idle(timeout, _Timeout, State) ->
{stop, idle_timeout, State};
idle(cast, {incoming, Packet}, State) ->
idle(cast, {incoming, Packet, PState}, _State) ->
handle_packet(Packet, fun(NState) ->
{next_state, connected, NState}
end, State);
{next_state, connected, reset_parser(NState)}
end, PState);
idle(EventType, Content, State) ->
?HANDLE(EventType, Content, State).
@ -200,12 +200,12 @@ connected(enter, _, _State) ->
keep_state_and_data;
%% Handle Input
connected(cast, {incoming, Packet = ?PACKET(Type)}, State) ->
connected(cast, {incoming, Packet = ?PACKET(Type), PState}, _State) ->
_ = emqx_metrics:received(Packet),
(Type == ?PUBLISH) andalso emqx_pd:update_counter(incoming_pubs, 1),
handle_packet(Packet, fun(NState) ->
{keep_state, NState}
end, State);
{keep_state, reset_parser(NState)}
end, PState);
%% Handle Output
connected(info, {deliver, PubOrAck}, State = #state{proto_state = ProtoState}) ->
@ -365,14 +365,14 @@ terminate(Reason, _StateName, #state{transport = Transport,
%% Process incoming data
process_incoming(<<>>, Packets, State) ->
{keep_state, State, next_events(Packets)};
{keep_state, State, next_events({Packets, State})};
process_incoming(Data, Packets, State = #state{parse_state = ParseState}) ->
try emqx_frame:parse(Data, ParseState) of
{ok, Packet, Rest} ->
process_incoming(Rest, [Packet|Packets], reset_parser(State));
{more, NewParseState} ->
{keep_state, State#state{parse_state = NewParseState}, next_events(Packets)};
{keep_state, State#state{parse_state = NewParseState}, next_events({Packets, State})};
{error, Reason} ->
shutdown(Reason, State)
catch
@ -386,10 +386,10 @@ reset_parser(State = #state{proto_state = ProtoState}) ->
next_events([]) ->
[];
next_events([Packet]) ->
{next_event, cast, {incoming, Packet}};
next_events(Packets) ->
[next_events([Packet]) || Packet <- lists:reverse(Packets)].
next_events([{Packet, State}]) ->
{next_event, cast, {incoming, Packet, State}};
next_events({Packets, State}) ->
[next_events([{Packet, State}]) || Packet <- lists:reverse(Packets)].
%%------------------------------------------------------------------------------
%% Handle incoming packet

View File

@ -31,66 +31,66 @@
username = <<"emqx">>,
password = <<"public">>})).
-record(pstate, {
zone,
sendfun,
peername,
peercert,
proto_ver,
proto_name,
client_id,
is_assigned,
conn_pid,
conn_props,
ack_props,
username,
session,
clean_start,
topic_aliases,
packet_size,
keepalive,
mountpoint,
is_super,
is_bridge,
enable_ban,
enable_acl,
acl_deny_action,
recv_stats,
send_stats,
connected,
connected_at,
ignore_loop,
topic_alias_maximum,
conn_mod
}).
% -record(pstate, {
% zone,
% sendfun,
% peername,
% peercert,
% proto_ver,
% proto_name,
% client_id,
% is_assigned,
% conn_pid,
% conn_props,
% ack_props,
% username,
% session,
% clean_start,
% topic_aliases,
% packet_size,
% keepalive,
% mountpoint,
% is_super,
% is_bridge,
% enable_ban,
% enable_acl,
% acl_deny_action,
% recv_stats,
% send_stats,
% connected,
% connected_at,
% ignore_loop,
% topic_alias_maximum,
% conn_mod
% }).
-define(TEST_PSTATE(ProtoVer, SendStats),
#pstate{zone = test,
sendfun = fun(_Packet, _Options) -> ok end,
peername = test_peername,
peercert = test_peercert,
proto_ver = ProtoVer,
proto_name = <<"MQTT">>,
client_id = <<"test_pstate">>,
is_assigned = false,
conn_pid = self(),
username = <<"emqx">>,
is_super = false,
clean_start = false,
topic_aliases = #{},
packet_size = 1000,
mountpoint = <<>>,
is_bridge = false,
enable_ban = false,
enable_acl = true,
acl_deny_action = disconnect,
recv_stats = #{msg => 0, pkt => 0},
send_stats = SendStats,
connected = false,
ignore_loop = false,
topic_alias_maximum = #{to_client => 0, from_client => 0},
conn_mod = emqx_connection}).
% -define(TEST_PSTATE(ProtoVer, SendStats),
% #pstate{zone = test,
% sendfun = fun(_Packet, _Options) -> ok end,
% peername = test_peername,
% peercert = test_peercert,
% proto_ver = ProtoVer,
% proto_name = <<"MQTT">>,
% client_id = <<"test_pstate">>,
% is_assigned = false,
% conn_pid = self(),
% username = <<"emqx">>,
% is_super = false,
% clean_start = false,
% topic_aliases = #{},
% packet_size = 1000,
% mountpoint = <<>>,
% is_bridge = false,
% enable_ban = false,
% enable_acl = true,
% acl_deny_action = disconnect,
% recv_stats = #{msg => 0, pkt => 0},
% send_stats = SendStats,
% connected = false,
% ignore_loop = false,
% topic_alias_maximum = #{to_client => 0, from_client => 0},
% conn_mod = emqx_connection}).
all() ->
[
@ -112,8 +112,7 @@ groups() ->
[connect_v5,
subscribe_v5]},
{acl, [sequence],
[acl_deny_action_ct,
acl_deny_action_eunit]}].
[acl_deny_action_ct]}].
init_per_suite(Config) ->
[start_apps(App, SchemaFile, ConfigFile) ||
@ -571,13 +570,13 @@ acl_deny_action_ct(_) ->
emqx_zone:set_env(external, acl_deny_action, ignore),
ok.
acl_deny_action_eunit(_) ->
PState = ?TEST_PSTATE(?MQTT_PROTO_V5, #{msg => 0, pkt => 0}),
CodeName = emqx_reason_codes:name(?RC_NOT_AUTHORIZED, ?MQTT_PROTO_V5),
{error, CodeName, NEWPSTATE1} = emqx_protocol:process(?PUBLISH_PACKET(?QOS_1, <<"acl_deny_action">>, 1, <<"payload">>), PState),
?assertEqual(#{pkt => 1, msg => 0}, NEWPSTATE1#pstate.send_stats),
{error, CodeName, NEWPSTATE2} = emqx_protocol:process(?PUBLISH_PACKET(?QOS_2, <<"acl_deny_action">>, 2, <<"payload">>), PState),
?assertEqual(#{pkt => 1, msg => 0}, NEWPSTATE2#pstate.send_stats).
% acl_deny_action_eunit(_) ->
% PState = ?TEST_PSTATE(?MQTT_PROTO_V5, #{msg => 0, pkt => 0}),
% CodeName = emqx_reason_codes:name(?RC_NOT_AUTHORIZED, ?MQTT_PROTO_V5),
% {error, CodeName, NEWPSTATE1} = emqx_protocol:process(?PUBLISH_PACKET(?QOS_1, <<"acl_deny_action">>, 1, <<"payload">>), PState),
% ?assertEqual(#{pkt => 1, msg => 0}, NEWPSTATE1#pstate.send_stats),
% {error, CodeName, NEWPSTATE2} = emqx_protocol:process(?PUBLISH_PACKET(?QOS_2, <<"acl_deny_action">>, 2, <<"payload">>), PState),
% ?assertEqual(#{pkt => 1, msg => 0}, NEWPSTATE2#pstate.send_stats).
will_topic_check(_) ->
{ok, Client} = emqx_client:start_link([{username, <<"emqx">>},