Skip to content

Commit

Permalink
erts: Improve node leak check in end_per_testcase
Browse files Browse the repository at this point in the history
Don't lose original failure reason,
instead amend "Leaked connections".
  • Loading branch information
sverker committed Oct 4, 2022
1 parent c11b0d1 commit 51331bd
Show file tree
Hide file tree
Showing 32 changed files with 75 additions and 207 deletions.
7 changes: 1 addition & 6 deletions erts/emulator/test/alloc_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,7 @@ init_per_testcase(Case, Config) when is_list(Config) ->
[{testcase, Case}|Config].

end_per_testcase(_Case, Config) when is_list(Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
erts_test_utils:ept_check_leaked_nodes(Config).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/bif_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,8 @@ init_per_testcase(shadow_comments, Config) when is_list(Config) ->
init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
Config.

end_per_testcase(_Func, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_Func, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

%% erl_bif_types comes from dialyzer which some test runs skip building, so
%% we'll skip the tests that use it as the result shouldn't vary based on
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/dirty_bif_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,8 @@ end_per_suite(_Config) ->
init_per_testcase(Case, Config) ->
[{testcase, Case} | Config].

end_per_testcase(_Case, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_Case, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

dirty_bif(Config) when is_list(Config) ->
dirty_cpu = erts_debug:dirty_cpu(scheduler,type),
Expand Down
4 changes: 1 addition & 3 deletions erts/emulator/test/distribution_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,7 @@ end_per_testcase(_TestCase, Config) ->
case wait_until(fun() -> nodes(connected) == [] end, 10_000) of
ok -> ok;
timeout ->
Nodes = nodes(connected),
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
erts_test_utils:ept_check_leaked_nodes(Config)
end.

%% Tests pinging a node in different ways.
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/dump_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,8 @@ init_per_testcase(_, Config) ->
Config.


end_per_testcase(_, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

%%%
%%% The test cases -------------------------------------------------------------
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/efile_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,8 @@ all() ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

%%
%% Open as many files as possible. Do this several times and check
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/erl_link_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,8 @@ init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
end,
Config.

end_per_testcase(_Func, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_Func, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

init_per_suite(Config) ->
Config.
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/erts_debug_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,8 @@ groups() ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

interpreter_size_bench(_Config) ->
Size = erts_debug:interpreter_size(),
Expand Down
21 changes: 20 additions & 1 deletion erts/emulator/test/erts_test_utils.erl
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@
mk_ext_port/2,
mk_ext_ref/2,
available_internal_state/1,
check_node_dist/0, check_node_dist/1, check_node_dist/3]).
check_node_dist/0, check_node_dist/1, check_node_dist/3,
ept_check_leaked_nodes/1]).



Expand Down Expand Up @@ -292,3 +293,21 @@ check_refc(ThisNodeName,ThisCreation,Table,EntryList) when is_list(EntryList) ->
end,
EntryList),
ok.

%% To be called by end_per_testcase
%% to check and kill leaked node connections.
ept_check_leaked_nodes(Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
Leaked = {"Leaked connections", Nodes},
Fail = case proplists:get_value(tc_status, Config) of
ok -> Leaked;
{failed, Reason} ->
[Reason, {end_per_testcase, Leaked}];
{skipped, _}=Skipped ->
[Skipped, {end_per_testcase, Leaked}]
end,
{fail, Fail}
end.
9 changes: 2 additions & 7 deletions erts/emulator/test/exception_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,8 @@ all() ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

-define(try_match(E),
catch ?MODULE:bar(),
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/float_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,8 @@ groups() ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

%%
%% OTP-7178, list_to_float on very small numbers should give 0.0
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/fun_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,8 @@ all() ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).


%% Test that the correct EXIT code is returned for all types of bad funs.
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/hash_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -172,13 +172,8 @@ end_per_group(_, Config) ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

%% Tests basic functionality of erlang:phash and that the
%% hashes has not changed (neither hash nor phash)
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/hash_property_test_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,8 @@ end_per_group(_, Config) ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

test_phash2_no_diff(Config) when is_list(Config) ->
true = ct_property_test:quickcheck(
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/list_bif_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,8 @@ all() ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

%% Tests list_to_integer and string:to_integer
t_list_to_integer(Config) when is_list(Config) ->
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/lttng_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,10 @@ init_per_testcase(Case, Config) ->
ok = ensure_lttng_started(Name, Config),
[{session, Name}|Config].

end_per_testcase(Case, _Config) ->
end_per_testcase(Case, Config) ->
Name = atom_to_list(Case),
ok = ensure_lttng_stopped(Name),
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
erts_test_utils:ept_check_leaked_nodes(Config).

%% Not tested yet
%% org_erlang_otp:driver_process_exit
Expand Down
10 changes: 3 additions & 7 deletions erts/emulator/test/map_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -199,13 +199,9 @@ end_per_suite(Config) ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).


%% tests

Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/match_spec_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,8 @@ all() ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

test_1(Config) when is_list(Config) ->
tr(fun() -> ?MODULE:f1(a) end,
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/message_queue_data_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,8 @@ end_per_suite(_Config) ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

all() ->
[basic, process_info_messages, total_heap_size, change_to_off_heap,
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/monitor_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,8 @@ groups() ->

init_per_testcase(_TestCase, Config) ->
Config.
end_per_testcase(_TestCase, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_TestCase, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

%% A monitors B, B kills A and then exits (yielded core dump)
case_1(Config) when is_list(Config) ->
Expand Down
7 changes: 1 addition & 6 deletions erts/emulator/test/node_container_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,7 @@ init_per_testcase(_Case, Config) when is_list(Config) ->
Config.

end_per_testcase(_Case, Config) when is_list(Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
erts_test_utils:ept_check_leaked_nodes(Config).

%%%
%%% The test cases -------------------------------------------------------------
Expand Down
9 changes: 2 additions & 7 deletions erts/emulator/test/port_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -226,13 +226,8 @@ init_per_testcase(Case, Config) when Case =:= mon_port_driver_die;
init_per_testcase(Case, Config) ->
[{testcase, Case} |Config].

end_per_testcase(_Case, _Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
end_per_testcase(_Case, Config) ->
erts_test_utils:ept_check_leaked_nodes(Config).

init_per_suite(Config) when is_list(Config) ->
ignore_cores:init(Config).
Expand Down
7 changes: 1 addition & 6 deletions erts/emulator/test/process_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -221,12 +221,7 @@ end_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
#{size => 0,
kill => true,
error_logger => true}),
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
erts_test_utils:ept_check_leaked_nodes(Config).

fun_spawn(Fun) ->
spawn_link(erlang, apply, [Fun, []]).
Expand Down
7 changes: 1 addition & 6 deletions erts/emulator/test/ref_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,7 @@ init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
[{testcase, Func}|Config].

end_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
case nodes(connected) of
[] -> ok;
Nodes ->
[net_kernel:disconnect(N) || N <- Nodes],
{fail, {"Leaked connections", Nodes}}
end.
erts_test_utils:ept_check_leaked_nodes(Config).

all() ->
[wrap_1, compare_list, compare_ets, internal_size, external_size].
Expand Down
Loading

0 comments on commit 51331bd

Please sign in to comment.