test(refactor): add ids to namespace `on_exit` callbacks

This commit is contained in:
Thales Macedo Garitezi 2022-12-06 09:42:00 -03:00
parent 697b3ecf2d
commit a095867358
2 changed files with 28 additions and 25 deletions

View File

@ -67,8 +67,8 @@
-export([clear_screen/0]). -export([clear_screen/0]).
-export([with_mock/4]). -export([with_mock/4]).
-export([ -export([
on_exit/1, on_exit/2,
run_on_exit_callbacks/0 run_on_exit_callbacks/1
]). ]).
%% Toxiproxy API %% Toxiproxy API
@ -939,19 +939,19 @@ latency_up_proxy(off, Name, ProxyHost, ProxyPort) ->
%% Testcase teardown utilities %% Testcase teardown utilities
%%------------------------------------------------------------------------------- %%-------------------------------------------------------------------------------
get_on_exit_callbacks() -> get_on_exit_callbacks(Id) ->
persistent_term:get({?MODULE, on_exit}, []). persistent_term:get({?MODULE, on_exit, Id}, []).
put_on_exit_callbacks(Funs) -> put_on_exit_callbacks(Id, Funs) ->
persistent_term:put({?MODULE, on_exit}, Funs). persistent_term:put({?MODULE, on_exit, Id}, Funs).
on_exit(Fun) -> on_exit(Id, Fun) ->
Callbacks = get_on_exit_callbacks(), Callbacks = get_on_exit_callbacks(Id),
put_on_exit_callbacks([Fun | Callbacks]). put_on_exit_callbacks(Id, [Fun | Callbacks]).
%% should be called at `end_per_testcase'. %% should be called at `end_per_testcase'.
%% TODO: scope per group and suite as well? %% TODO: scope per group and suite as well?
run_on_exit_callbacks() -> run_on_exit_callbacks(Id) ->
Callbacks = get_on_exit_callbacks(), Callbacks = get_on_exit_callbacks(Id),
put_on_exit_callbacks([]), persistent_term:erase({?MODULE, on_exit, Id}),
lists:foreach(fun(Fun) -> Fun() end, Callbacks). lists:foreach(fun(Fun) -> Fun() end, Callbacks).

View File

@ -16,7 +16,10 @@
-define(BRIDGE_TYPE, gcp_pubsub). -define(BRIDGE_TYPE, gcp_pubsub).
-define(BRIDGE_TYPE_BIN, <<"gcp_pubsub">>). -define(BRIDGE_TYPE_BIN, <<"gcp_pubsub">>).
-import(emqx_common_test_helpers, [on_exit/1, run_on_exit_callbacks/0]). -import(emqx_common_test_helpers, [on_exit/2, run_on_exit_callbacks/1]).
-define(on_exit_key(TESTCASE), {?MODULE, TESTCASE}).
-define(on_exit(FUN), on_exit({?MODULE, ?FUNCTION_NAME}, FUN)).
%%------------------------------------------------------------------------------ %%------------------------------------------------------------------------------
%% CT boilerplate %% CT boilerplate
@ -138,9 +141,9 @@ init_per_testcase(TestCase, Config0) ->
Config = generate_config(Config0), Config = generate_config(Config0),
[{telemetry_table, Tid} | Config]. [{telemetry_table, Tid} | Config].
end_per_testcase(_TestCase, _Config) -> end_per_testcase(TestCase, _Config) ->
ok = snabbkaffe:stop(), ok = snabbkaffe:stop(),
run_on_exit_callbacks(), run_on_exit_callbacks(?on_exit_key(TestCase)),
delete_all_bridges(), delete_all_bridges(),
ok = emqx_connector_web_hook_server:stop(), ok = emqx_connector_web_hook_server:stop(),
ok. ok.
@ -515,7 +518,7 @@ install_telemetry_handler(TestCase) ->
end, end,
unused_config unused_config
), ),
on_exit(fun() -> on_exit(?on_exit_key(TestCase), fun() ->
telemetry:detach(HandlerId), telemetry:detach(HandlerId),
ets:delete(Tid) ets:delete(Tid)
end), end),
@ -567,7 +570,7 @@ t_publish_success(Config) ->
end end
), ),
{ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config), {ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config),
on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end), ?on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end),
assert_empty_metrics(ResourceId), assert_empty_metrics(ResourceId),
Payload = <<"payload">>, Payload = <<"payload">>,
Message = emqx_message:make(Topic, Payload), Message = emqx_message:make(Topic, Payload),
@ -632,7 +635,7 @@ t_publish_templated(Config) ->
end end
), ),
{ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config), {ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config),
on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end), ?on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end),
assert_empty_metrics(ResourceId), assert_empty_metrics(ResourceId),
Payload = <<"payload">>, Payload = <<"payload">>,
Message = Message =
@ -697,7 +700,7 @@ t_publish_success_batch(Config) ->
) )
), ),
{ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config), {ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config),
on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end), ?on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end),
assert_empty_metrics(ResourceId), assert_empty_metrics(ResourceId),
NumMessages = BatchSize * 2, NumMessages = BatchSize * 2,
Messages = [emqx_message:make(Topic, integer_to_binary(N)) || N <- lists:seq(1, NumMessages)], Messages = [emqx_message:make(Topic, integer_to_binary(N)) || N <- lists:seq(1, NumMessages)],
@ -879,7 +882,7 @@ t_publish_econnrefused(Config) ->
%% in ehttpc. %% in ehttpc.
{ok, _} = create_bridge(Config, #{<<"pipelining">> => 1}), {ok, _} = create_bridge(Config, #{<<"pipelining">> => 1}),
{ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config), {ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config),
on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end), ?on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end),
assert_empty_metrics(ResourceId), assert_empty_metrics(ResourceId),
ok = emqx_connector_web_hook_server:stop(), ok = emqx_connector_web_hook_server:stop(),
do_econnrefused_or_timeout_test(Config, econnrefused). do_econnrefused_or_timeout_test(Config, econnrefused).
@ -894,7 +897,7 @@ t_publish_timeout(Config) ->
<<"resource_opts">> => #{<<"batch_size">> => 1} <<"resource_opts">> => #{<<"batch_size">> => 1}
}), }),
{ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config), {ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config),
on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end), ?on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end),
assert_empty_metrics(ResourceId), assert_empty_metrics(ResourceId),
TestPid = self(), TestPid = self(),
TimeoutHandler = TimeoutHandler =
@ -1095,7 +1098,7 @@ t_success_no_body(Config) ->
Topic = <<"t/topic">>, Topic = <<"t/topic">>,
{ok, _} = create_bridge(Config), {ok, _} = create_bridge(Config),
{ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config), {ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config),
on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end), ?on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end),
Payload = <<"payload">>, Payload = <<"payload">>,
Message = emqx_message:make(Topic, Payload), Message = emqx_message:make(Topic, Payload),
?check_trace( ?check_trace(
@ -1133,7 +1136,7 @@ t_failure_with_body(Config) ->
Topic = <<"t/topic">>, Topic = <<"t/topic">>,
{ok, _} = create_bridge(Config), {ok, _} = create_bridge(Config),
{ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config), {ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config),
on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end), ?on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end),
Payload = <<"payload">>, Payload = <<"payload">>,
Message = emqx_message:make(Topic, Payload), Message = emqx_message:make(Topic, Payload),
?check_trace( ?check_trace(
@ -1171,7 +1174,7 @@ t_failure_no_body(Config) ->
Topic = <<"t/topic">>, Topic = <<"t/topic">>,
{ok, _} = create_bridge(Config), {ok, _} = create_bridge(Config),
{ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config), {ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config),
on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end), ?on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end),
Payload = <<"payload">>, Payload = <<"payload">>,
Message = emqx_message:make(Topic, Payload), Message = emqx_message:make(Topic, Payload),
?check_trace( ?check_trace(
@ -1220,7 +1223,7 @@ t_unrecoverable_error(Config) ->
{ok, _} = create_bridge(Config), {ok, _} = create_bridge(Config),
assert_empty_metrics(ResourceId), assert_empty_metrics(ResourceId),
{ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config), {ok, #{<<"id">> := RuleId}} = create_rule_and_action_http(Config),
on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end), ?on_exit(fun() -> ok = emqx_rule_engine:delete_rule(RuleId) end),
Payload = <<"payload">>, Payload = <<"payload">>,
Message = emqx_message:make(Topic, Payload), Message = emqx_message:make(Topic, Payload),
?check_trace( ?check_trace(