Skip to content

Commit

Permalink
Add API emqx_portal:ensure_forward_absent
Browse files Browse the repository at this point in the history
  • Loading branch information
spring2maz committed Feb 17, 2019
1 parent 23b6dd8 commit 3790182
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
21 changes: 18 additions & 3 deletions src/portal/emqx_portal.erl
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
-export([connecting/3, connected/3]).

%% management APIs
-export([get_forwards/1, ensure_forward_present/2]). %, del_forward/2]).
-export([get_forwards/1, ensure_forward_present/2, ensure_forward_absent/2]).
-export([get_subscriptions/1]). %, add_subscription/3, del_subscription/2]).

-export_type([config/0,
Expand Down Expand Up @@ -143,8 +143,13 @@ handle_ack(Pid, Ref) when node() =:= node(Pid) ->
get_forwards(Id) -> gen_statem:call(id(Id), get_forwards, timer:seconds(1000)).

%% @doc Add a new forward (local topic subscription).
-spec ensure_forward_present(id(), topic()) -> ok | {error, any()}.
ensure_forward_present(Id, Topic) -> gen_statem:call(id(Id), {ensure_forward_present, topic(Topic)}).
-spec ensure_forward_present(id(), topic()) -> ok.
ensure_forward_present(Id, Topic) ->
gen_statem:call(id(Id), {ensure_forward_present, topic(Topic)}).

-spec ensure_forward_absent(id(), topic()) -> ok.
ensure_forward_absent(Id, Topic) ->
gen_statem:call(id(Id), {ensure_forward_absent, topic(Topic)}).

-spec get_subscriptions(id()) -> [{emqx_topic:topic(), qos()}].
get_subscriptions(Id) -> gen_statem:call(id(Id), get_subscriptions).
Expand Down Expand Up @@ -290,6 +295,16 @@ common(_StateName, {call, From}, {ensure_forward_present, Topic},
{keep_state, State#{forwards := lists:usort([Topic | Forwards])},
[{reply, From, ok}]}
end;
common(_StateName, {call, From}, {ensure_forward_absent, Topic},
#{forwards := Forwards} = State) ->
case lists:member(Topic, Forwards) of
true ->
emqx_broker:unsubscribe(Topic),
{keep_state, State#{forwards := lists:delete(Topic, Forwards)},
[{reply, From, ok}]};
false ->
{keep_state_and_data, [{reply, From, ok}]}
end;
common(_StateName, {call, From}, get_subscriptions, #{subscriptions := Subs}) ->
{keep_state_and_data, [{reply, From, Subs}]};
common(_StateName, info, {dispatch, _, Msg},
Expand Down
5 changes: 4 additions & 1 deletion test/emqx_portal_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ init_per_suite(Config) ->
_ ->
ok
end,
emqx_ct_broker_helpers:run_setup_steps(Config).
emqx_ct_broker_helpers:run_setup_steps([{log_leve, info} | Config]).

end_per_suite(_Config) ->
emqx_ct_broker_helpers:run_teardown_steps().
Expand All @@ -59,6 +59,9 @@ t_forwards_mngr(Config) when is_list(Config) ->
?assertEqual(ok, emqx_portal:ensure_forward_present(Name, "mngr")),
?assertEqual(ok, emqx_portal:ensure_forward_present(Name, "mngr2")),
?assertEqual([<<"mngr">>, <<"mngr2">>], emqx_portal:get_forwards(Pid)),
?assertEqual(ok, emqx_portal:ensure_forward_absent(Name, "mngr2")),
?assertEqual(ok, emqx_portal:ensure_forward_absent(Name, "mngr3")),
?assertEqual([<<"mngr">>], emqx_portal:get_forwards(Pid)),
?assertEqual(Subs, emqx_portal:get_subscriptions(Pid))
after
ok = emqx_portal:stop(Pid)
Expand Down

0 comments on commit 3790182

Please sign in to comment.