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

View File

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