File 4462-erts-Check-for-leaking-peer-nodes-after-tests.patch of Package erlang
From a10af0c854bfb300ff3262ebed7d06e61ce88560 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Mon, 27 Jun 2022 23:13:35 +0200
Subject: [PATCH 2/4] erts: Check for leaking peer nodes after tests
---
erts/emulator/test/alloc_SUITE.erl | 7 ++++++-
erts/emulator/test/bif_SUITE.erl | 7 ++++++-
erts/emulator/test/dirty_bif_SUITE.erl | 7 ++++++-
erts/emulator/test/distribution_SUITE.erl | 21 +++++++++++++++++--
erts/emulator/test/driver_SUITE.erl | 10 ++++++++-
erts/emulator/test/dump_SUITE.erl | 9 ++++++--
erts/emulator/test/efile_SUITE.erl | 12 +++++++++++
erts/emulator/test/erl_link_SUITE.erl | 7 ++++++-
erts/emulator/test/erts_debug_SUITE.erl | 11 ++++++++++
erts/emulator/test/exception_SUITE.erl | 11 ++++++++++
erts/emulator/test/float_SUITE.erl | 11 ++++++++++
erts/emulator/test/fun_SUITE.erl | 12 +++++++++++
erts/emulator/test/hash_SUITE.erl | 10 +++++++++
.../test/hash_property_test_SUITE.erl | 16 ++++++++++++--
erts/emulator/test/list_bif_SUITE.erl | 13 +++++++++++-
erts/emulator/test/lttng_SUITE.erl | 7 ++++++-
erts/emulator/test/map_SUITE.erl | 11 ++++++++++
erts/emulator/test/match_spec_SUITE.erl | 11 ++++++++++
.../test/message_queue_data_SUITE.erl | 11 ++++++++++
erts/emulator/test/monitor_SUITE.erl | 11 ++++++++++
erts/emulator/test/node_container_SUITE.erl | 7 ++++++-
erts/emulator/test/port_SUITE.erl | 7 ++++++-
erts/emulator/test/process_SUITE.erl | 7 ++++++-
erts/emulator/test/ref_SUITE.erl | 7 ++++++-
erts/emulator/test/scheduler_SUITE.erl | 7 ++++++-
erts/emulator/test/signal_SUITE.erl | 7 ++++++-
erts/emulator/test/smoke_test_SUITE.erl | 7 ++++++-
erts/emulator/test/system_info_SUITE.erl | 7 ++++++-
erts/emulator/test/time_SUITE.erl | 7 ++++++-
erts/emulator/test/timer_bif_SUITE.erl | 7 ++++++-
erts/emulator/test/trace_SUITE.erl | 8 ++++++-
erts/emulator/test/unique_SUITE.erl | 11 ++++++++++
32 files changed, 280 insertions(+), 24 deletions(-)
diff --git a/erts/emulator/test/alloc_SUITE.erl b/erts/emulator/test/alloc_SUITE.erl
index cd03af6bfb..db0022a558 100644
--- a/erts/emulator/test/alloc_SUITE.erl
+++ b/erts/emulator/test/alloc_SUITE.erl
@@ -66,7 +66,12 @@ init_per_testcase(Case, Config) when is_list(Config) ->
[{testcase, Case},{debug,false}|Config].
end_per_testcase(_Case, Config) when is_list(Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%
diff --git a/erts/emulator/test/bif_SUITE.erl b/erts/emulator/test/bif_SUITE.erl
index c5be79528b..7eb473abf7 100644
--- a/erts/emulator/test/bif_SUITE.erl
+++ b/erts/emulator/test/bif_SUITE.erl
@@ -71,7 +71,12 @@ init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
Config.
end_per_testcase(_Func, _Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
%% 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
diff --git a/erts/emulator/test/dirty_bif_SUITE.erl b/erts/emulator/test/dirty_bif_SUITE.erl
index 8aefc394a2..7c7b6db2d7 100644
--- a/erts/emulator/test/dirty_bif_SUITE.erl
+++ b/erts/emulator/test/dirty_bif_SUITE.erl
@@ -83,7 +83,12 @@ init_per_testcase(Case, Config) ->
[{testcase, Case} | Config].
end_per_testcase(_Case, _Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
dirty_bif(Config) when is_list(Config) ->
dirty_cpu = erts_debug:dirty_cpu(scheduler,type),
diff --git a/erts/emulator/test/distribution_SUITE.erl b/erts/emulator/test/distribution_SUITE.erl
index f16ba15bf8..c8ec6adccf 100644
--- a/erts/emulator/test/distribution_SUITE.erl
+++ b/erts/emulator/test/distribution_SUITE.erl
@@ -40,6 +40,7 @@
-export([all/0, suite/0, groups/0,
init_per_suite/1, end_per_suite/1,
init_per_group/2, end_per_group/2,
+ init_per_testcase/2, end_per_testcase/2,
ping/1, bulk_send_small/1,
group_leader/1,
optimistic_dflags/1,
@@ -157,6 +158,17 @@ init_per_group(_, Config) ->
end_per_group(_, Config) ->
Config.
+init_per_testcase(_TestCase, Config) ->
+ Config.
+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}}
+ end.
+
%% Tests pinging a node in different ways.
ping(Config) when is_list(Config) ->
Times = 1024,
@@ -3365,6 +3377,20 @@ derr_sender(Main, Nodes) ->
id(X) ->
X.
+wait_until(Fun) ->
+ wait_until(Fun, 24*60*60*1000).
+
+wait_until(Fun, Timeout) when Timeout < 0 ->
+ timeout;
+wait_until(Fun, Timeout) ->
+ case catch Fun() of
+ true ->
+ ok;
+ _ ->
+ receive after 50 -> ok end,
+ wait_until(Fun, Timeout-50)
+ end.
+
timestamp() ->
erlang:monotonic_time(millisecond).
diff --git a/erts/emulator/test/driver_SUITE.erl b/erts/emulator/test/driver_SUITE.erl
index 902b3824f0..94754e7848 100644
--- a/erts/emulator/test/driver_SUITE.erl
+++ b/erts/emulator/test/driver_SUITE.erl
@@ -189,7 +189,15 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
logger:remove_handler_filter(default, checkio_filter),
- catch erts_debug:set_internal_state(available_internal_state, false).
+ catch erts_debug:set_internal_state(available_internal_state, false),
+
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ io:format("LEAKED connections: ~p\n", [Nodes])
+ end.
+
init_per_group(poll_thread, Config) ->
[{node_args, "+IOt 2"} | Config];
diff --git a/erts/emulator/test/dump_SUITE.erl b/erts/emulator/test/dump_SUITE.erl
index 3cb943705c..625800fdf6 100644
--- a/erts/emulator/test/dump_SUITE.erl
+++ b/erts/emulator/test/dump_SUITE.erl
@@ -54,8 +54,13 @@ init_per_testcase(_, Config) ->
Config.
-end_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.
%%%
%%% The test cases -------------------------------------------------------------
diff --git a/erts/emulator/test/efile_SUITE.erl b/erts/emulator/test/efile_SUITE.erl
index 1bc69332cb..413d804298 100644
--- a/erts/emulator/test/efile_SUITE.erl
+++ b/erts/emulator/test/efile_SUITE.erl
@@ -19,6 +19,7 @@
-module(efile_SUITE).
-export([all/0, suite/0]).
+-export([init_per_testcase/2, end_per_testcase/2]).
-export([iter_max_files/1, proc_zero_sized_files/1]).
-export([do_iter_max_files/2]).
@@ -31,6 +32,17 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[iter_max_files, proc_zero_sized_files].
+
+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.
+
%%
%% Open as many files as possible. Do this several times and check
%% that we get the same number of files every time.
diff --git a/erts/emulator/test/erl_link_SUITE.erl b/erts/emulator/test/erl_link_SUITE.erl
index 8e1a2b937d..8037fdbc36 100644
--- a/erts/emulator/test/erl_link_SUITE.erl
+++ b/erts/emulator/test/erl_link_SUITE.erl
@@ -92,7 +92,12 @@ init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
Config.
end_per_testcase(_Func, _Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
init_per_suite(Config) ->
Config.
diff --git a/erts/emulator/test/erts_debug_SUITE.erl b/erts/emulator/test/erts_debug_SUITE.erl
index 24d2d99c2e..01221de8b5 100644
--- a/erts/emulator/test/erts_debug_SUITE.erl
+++ b/erts/emulator/test/erts_debug_SUITE.erl
@@ -23,6 +23,7 @@
-include_lib("common_test/include/ct_event.hrl").
-export([all/0, suite/0, groups/0,
+ init_per_testcase/2, end_per_testcase/2,
test_size/1,flat_size_big/1,df/1,term_type/1,
instructions/1, stack_check/1, alloc_blocks_size/1,
t_copy_shared/1,
@@ -43,6 +44,16 @@ all() ->
groups() ->
[{interpreter_size_bench, [], [interpreter_size_bench]}].
+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.
+
interpreter_size_bench(_Config) ->
Size = erts_debug:interpreter_size(),
ct_event:notify(#event{name=benchmark_data,
diff --git a/erts/emulator/test/exception_SUITE.erl b/erts/emulator/test/exception_SUITE.erl
index f81a4b51a5..5cce5d1491 100644
--- a/erts/emulator/test/exception_SUITE.erl
+++ b/erts/emulator/test/exception_SUITE.erl
@@ -21,6 +21,7 @@
-module(exception_SUITE).
-export([all/0, suite/0,
+ init_per_testcase/2, end_per_testcase/2,
badmatch/1, pending_errors/1, nil_arith/1, top_of_stacktrace/1,
stacktrace/1, nested_stacktrace/1, raise/1, gunilla/1, per/1,
change_exception_class/1,
@@ -51,6 +52,16 @@ all() ->
error_3, error_info,
no_line_numbers, line_numbers].
+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.
+
-define(try_match(E),
catch ?MODULE:bar(),
{'EXIT', {{badmatch, nomatch}, _}} = (catch E = id(nomatch))).
diff --git a/erts/emulator/test/float_SUITE.erl b/erts/emulator/test/float_SUITE.erl
index bda859a9ac..470c82487a 100644
--- a/erts/emulator/test/float_SUITE.erl
+++ b/erts/emulator/test/float_SUITE.erl
@@ -23,6 +23,7 @@
-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0, groups/0,
+ init_per_testcase/2, end_per_testcase/2,
fpe/1,fp_drv/1,fp_drv_thread/1,denormalized/1,match/1,
t_mul_add_ops/1,negative_zero/1,
bad_float_unpack/1, write/1, cmp_zero/1, cmp_integer/1, cmp_bignum/1]).
@@ -43,6 +44,16 @@ all() ->
groups() ->
[{comparison, [parallel], [cmp_zero, cmp_integer, cmp_bignum]}].
+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.
+
%%
%% OTP-7178, list_to_float on very small numbers should give 0.0
%% instead of exception, i.e. ignore underflow.
diff --git a/erts/emulator/test/fun_SUITE.erl b/erts/emulator/test/fun_SUITE.erl
index 89725b5eb2..e6d079019c 100644
--- a/erts/emulator/test/fun_SUITE.erl
+++ b/erts/emulator/test/fun_SUITE.erl
@@ -21,6 +21,7 @@
-module(fun_SUITE).
-export([all/0, suite/0,
+ init_per_testcase/2, end_per_testcase/2,
bad_apply/1,bad_fun_call/1,badarity/1,ext_badarity/1,
bad_arglist/1,
equality/1,ordering/1,
@@ -46,6 +47,17 @@ all() ->
const_propagation, t_arity, t_is_function2, t_fun_info,
t_fun_info_mfa,t_fun_to_list].
+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.
+
+
%% Test that the correct EXIT code is returned for all types of bad funs.
bad_apply(Config) when is_list(Config) ->
bad_apply_fc(42, [0]),
diff --git a/erts/emulator/test/hash_SUITE.erl b/erts/emulator/test/hash_SUITE.erl
index 539606a82d..d98fea3791 100644
--- a/erts/emulator/test/hash_SUITE.erl
+++ b/erts/emulator/test/hash_SUITE.erl
@@ -95,6 +95,7 @@ notify(X) ->
test_basic/1,test_cmp/1,test_range/1,test_spread/1,
test_phash2/1,otp_5292/1,bit_level_binaries/1,otp_7127/1,
test_hash_zero/1, init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
init_per_group/2, end_per_group/2]).
suite() ->
@@ -169,6 +170,15 @@ init_per_group(_, Config) ->
end_per_group(_, Config) ->
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.
%% Tests basic functionality of erlang:phash and that the
%% hashes has not changed (neither hash nor phash)
diff --git a/erts/emulator/test/hash_property_test_SUITE.erl b/erts/emulator/test/hash_property_test_SUITE.erl
index 679e7f59f8..23abacab34 100644
--- a/erts/emulator/test/hash_property_test_SUITE.erl
+++ b/erts/emulator/test/hash_property_test_SUITE.erl
@@ -30,8 +30,10 @@
-module(hash_property_test_SUITE).
--export([suite/0,all/0,groups/0,init_per_suite/1,
- end_per_suite/1,init_per_group/2,end_per_group/2]).
+-export([suite/0,all/0,groups/0,
+ init_per_testcase/2, end_per_testcase/2,
+ init_per_suite/1, end_per_suite/1,
+ init_per_group/2, end_per_group/2]).
-export([test_phash2_no_diff/1,
test_phash2_no_diff_long/1,
@@ -69,6 +71,16 @@ init_per_group(_, Config) ->
end_per_group(_, Config) ->
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.
+
test_phash2_no_diff(Config) when is_list(Config) ->
true = ct_property_test:quickcheck(
phash2_properties:prop_phash2_same_with_same_input(),
diff --git a/erts/emulator/test/list_bif_SUITE.erl b/erts/emulator/test/list_bif_SUITE.erl
index 1455c483d8..5c59872ba9 100644
--- a/erts/emulator/test/list_bif_SUITE.erl
+++ b/erts/emulator/test/list_bif_SUITE.erl
@@ -21,7 +21,8 @@
-module(list_bif_SUITE).
-include_lib("common_test/include/ct.hrl").
--export([all/0, suite/0]).
+-export([all/0, suite/0,
+ init_per_testcase/2, end_per_testcase/2]).
-export([hd_test/1,tl_test/1,t_length/1,t_list_to_pid/1,
t_list_to_ref/1, t_list_to_ext_pidportref/1,
t_list_to_port/1,t_list_to_float/1,t_list_to_integer/1]).
@@ -37,6 +38,16 @@ all() ->
t_list_to_ref, t_list_to_ext_pidportref,
t_list_to_float, t_list_to_integer].
+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.
+
%% Tests list_to_integer and string:to_integer
t_list_to_integer(Config) when is_list(Config) ->
{'EXIT',{badarg,_}} = (catch list_to_integer("12373281903728109372810937209817320981321ABC")),
diff --git a/erts/emulator/test/lttng_SUITE.erl b/erts/emulator/test/lttng_SUITE.erl
index b6f3283d8e..56641ff937 100644
--- a/erts/emulator/test/lttng_SUITE.erl
+++ b/erts/emulator/test/lttng_SUITE.erl
@@ -74,7 +74,12 @@ init_per_testcase(Case, Config) ->
end_per_testcase(Case, _Config) ->
Name = atom_to_list(Case),
ok = ensure_lttng_stopped(Name),
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
%% Not tested yet
%% org_erlang_otp:driver_process_exit
diff --git a/erts/emulator/test/map_SUITE.erl b/erts/emulator/test/map_SUITE.erl
index b6ffcd6985..18f86684d7 100644
--- a/erts/emulator/test/map_SUITE.erl
+++ b/erts/emulator/test/map_SUITE.erl
@@ -18,6 +18,7 @@
%%
-module(map_SUITE).
-export([all/0, suite/0, init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
groups/0]).
-export([t_build_and_match_literals/1, t_build_and_match_literals_large/1,
@@ -196,6 +197,16 @@ end_per_suite(Config) ->
lists:foreach(fun (A) -> application:stop(A) end, As),
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.
+
%% tests
t_build_and_match_literals(Config) when is_list(Config) ->
diff --git a/erts/emulator/test/match_spec_SUITE.erl b/erts/emulator/test/match_spec_SUITE.erl
index 5f789707f3..317de48239 100644
--- a/erts/emulator/test/match_spec_SUITE.erl
+++ b/erts/emulator/test/match_spec_SUITE.erl
@@ -21,6 +21,7 @@
-module(match_spec_SUITE).
-export([all/0, suite/0]).
+-export([init_per_testcase/2, end_per_testcase/2]).
-export([test_1/1, test_2/1, test_3/1, caller_and_return_to/1, bad_match_spec_bin/1,
trace_control_word/1, silent/1, silent_no_ms/1, silent_test/1,
ms_trace2/1, ms_trace3/1, ms_trace_dead/1, boxed_and_small/1,
@@ -57,6 +58,16 @@ all() ->
otp_9422,
maps].
+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.
+
test_1(Config) when is_list(Config) ->
tr(fun() -> ?MODULE:f1(a) end,
{?MODULE, f1, 1},
diff --git a/erts/emulator/test/message_queue_data_SUITE.erl b/erts/emulator/test/message_queue_data_SUITE.erl
index c59e043474..effd4c1370 100644
--- a/erts/emulator/test/message_queue_data_SUITE.erl
+++ b/erts/emulator/test/message_queue_data_SUITE.erl
@@ -21,6 +21,7 @@
-module(message_queue_data_SUITE).
-export([all/0, suite/0, init_per_suite/1, end_per_suite/1]).
+-export([init_per_testcase/2, end_per_testcase/2]).
-export([basic/1, process_info_messages/1, total_heap_size/1,
change_to_off_heap/1, change_to_off_heap_gc/1]).
@@ -40,6 +41,16 @@ end_per_suite(_Config) ->
erts_debug:set_internal_state(available_internal_state, false),
ok.
+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.
+
all() ->
[basic, process_info_messages, total_heap_size, change_to_off_heap,
change_to_off_heap_gc].
diff --git a/erts/emulator/test/monitor_SUITE.erl b/erts/emulator/test/monitor_SUITE.erl
index 2f8082ebea..a2574a2dbe 100644
--- a/erts/emulator/test/monitor_SUITE.erl
+++ b/erts/emulator/test/monitor_SUITE.erl
@@ -24,6 +24,7 @@
-include_lib("eunit/include/eunit.hrl").
-export([all/0, suite/0, groups/0,
+ init_per_testcase/2, end_per_testcase/2,
case_1/1, case_1a/1, case_2/1, case_2a/1, mon_e_1/1, demon_e_1/1, demon_1/1,
demon_2/1, demon_3/1, demonitor_flush/1, gh_5225_demonitor_alias/1,
local_remove_monitor/1, remote_remove_monitor/1, mon_1/1, mon_2/1,
@@ -51,6 +52,16 @@ groups() ->
[{remove_monitor, [],
[local_remove_monitor, remote_remove_monitor]}].
+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.
+
%% A monitors B, B kills A and then exits (yielded core dump)
case_1(Config) when is_list(Config) ->
process_flag(trap_exit, true),
diff --git a/erts/emulator/test/node_container_SUITE.erl b/erts/emulator/test/node_container_SUITE.erl
index 0e0c353aea..1dc9b0ffbe 100644
--- a/erts/emulator/test/node_container_SUITE.erl
+++ b/erts/emulator/test/node_container_SUITE.erl
@@ -81,7 +81,12 @@ init_per_testcase(_Case, Config) when is_list(Config) ->
Config.
end_per_testcase(_Case, Config) when is_list(Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
%%%
%%% The test cases -------------------------------------------------------------
diff --git a/erts/emulator/test/port_SUITE.erl b/erts/emulator/test/port_SUITE.erl
index 4a3ecef397..94911a9e08 100644
--- a/erts/emulator/test/port_SUITE.erl
+++ b/erts/emulator/test/port_SUITE.erl
@@ -227,7 +227,12 @@ init_per_testcase(Case, Config) ->
[{testcase, Case} |Config].
end_per_testcase(_Case, _Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
init_per_suite(Config) when is_list(Config) ->
ignore_cores:init(Config).
diff --git a/erts/emulator/test/process_SUITE.erl b/erts/emulator/test/process_SUITE.erl
index 2389ae2dfd..b247022a61 100644
--- a/erts/emulator/test/process_SUITE.erl
+++ b/erts/emulator/test/process_SUITE.erl
@@ -199,7 +199,12 @@ end_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
#{size => 0,
kill => true,
error_logger => true}),
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
fun_spawn(Fun) ->
spawn_link(erlang, apply, [Fun, []]).
diff --git a/erts/emulator/test/ref_SUITE.erl b/erts/emulator/test/ref_SUITE.erl
index ad5a962611..002c39abd0 100644
--- a/erts/emulator/test/ref_SUITE.erl
+++ b/erts/emulator/test/ref_SUITE.erl
@@ -39,7 +39,12 @@ 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) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
all() ->
[wrap_1, compare_list, compare_ets, internal_size, external_size].
diff --git a/erts/emulator/test/scheduler_SUITE.erl b/erts/emulator/test/scheduler_SUITE.erl
index 44000667a0..4f179c9c07 100644
--- a/erts/emulator/test/scheduler_SUITE.erl
+++ b/erts/emulator/test/scheduler_SUITE.erl
@@ -123,7 +123,12 @@ init_per_tc(Case, Config) ->
[{testcase, Case}, {ok_res, OkRes} |Config].
end_per_testcase(_Case, Config) when is_list(Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
-define(ERTS_RUNQ_CHECK_BALANCE_REDS_PER_SCHED, (2000*2000)).
-define(DEFAULT_TEST_REDS_PER_SCHED, 200000000).
diff --git a/erts/emulator/test/signal_SUITE.erl b/erts/emulator/test/signal_SUITE.erl
index c6f7b1fc8d..348e10c933 100644
--- a/erts/emulator/test/signal_SUITE.erl
+++ b/erts/emulator/test/signal_SUITE.erl
@@ -53,7 +53,12 @@ init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
[{testcase, Func}|Config].
end_per_testcase(_Func, _Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
init_per_suite(Config) ->
Config.
diff --git a/erts/emulator/test/smoke_test_SUITE.erl b/erts/emulator/test/smoke_test_SUITE.erl
index 60ce4c2bfe..a7c6fef6b4 100644
--- a/erts/emulator/test/smoke_test_SUITE.erl
+++ b/erts/emulator/test/smoke_test_SUITE.erl
@@ -49,7 +49,12 @@ init_per_tc(Case, Config) ->
[{testcase, Case}|Config].
end_per_testcase(_Case, Config) when is_list(Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
%%%
%%% The test cases -------------------------------------------------------------
diff --git a/erts/emulator/test/system_info_SUITE.erl b/erts/emulator/test/system_info_SUITE.erl
index 7c543a64e4..92f36ad1ea 100644
--- a/erts/emulator/test/system_info_SUITE.erl
+++ b/erts/emulator/test/system_info_SUITE.erl
@@ -63,7 +63,12 @@ init_per_testcase(_, Config) ->
end_per_testcase(procs_bug, Config) ->
procs_bug(end_per_testcase, Config);
end_per_testcase(_, _) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
%%%
%%% The test cases -------------------------------------------------------------
diff --git a/erts/emulator/test/time_SUITE.erl b/erts/emulator/test/time_SUITE.erl
index d1bd884b82..17a8e16f69 100644
--- a/erts/emulator/test/time_SUITE.erl
+++ b/erts/emulator/test/time_SUITE.erl
@@ -70,7 +70,12 @@ init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
[{testcase, Func}|Config].
end_per_testcase(_Func, _Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
suite() -> [{ct_hooks,[ts_install_cth]}].
diff --git a/erts/emulator/test/timer_bif_SUITE.erl b/erts/emulator/test/timer_bif_SUITE.erl
index f66edc275e..0824bb97c4 100644
--- a/erts/emulator/test/timer_bif_SUITE.erl
+++ b/erts/emulator/test/timer_bif_SUITE.erl
@@ -48,7 +48,12 @@ init_per_testcase(_Case, Config) ->
Config.
end_per_testcase(_Case, _Config) ->
- ok.
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
init_per_suite(Config) ->
erts_debug:set_internal_state(available_internal_state, true),
diff --git a/erts/emulator/test/trace_SUITE.erl b/erts/emulator/test/trace_SUITE.erl
index 071e2a2961..ac2fa23ed0 100644
--- a/erts/emulator/test/trace_SUITE.erl
+++ b/erts/emulator/test/trace_SUITE.erl
@@ -73,7 +73,13 @@ end_per_testcase(_Case, Config) ->
Receiver = proplists:get_value(receiver, Config),
unlink(Receiver),
exit(Receiver, die),
- ok.
+
+ case nodes(connected) of
+ [] -> ok;
+ Nodes ->
+ [net_kernel:disconnect(N) || N <- Nodes],
+ {fail, {"Leaked connections", Nodes}}
+ end.
%% No longer testing anything, just reporting whether cpu_timestamp
%% is enabled or not.
diff --git a/erts/emulator/test/unique_SUITE.erl b/erts/emulator/test/unique_SUITE.erl
index b47464b7f1..bd932a2c54 100644
--- a/erts/emulator/test/unique_SUITE.erl
+++ b/erts/emulator/test/unique_SUITE.erl
@@ -21,6 +21,7 @@
-module(unique_SUITE).
-export([all/0, suite/0, init_per_suite/1, end_per_suite/1]).
+-export([init_per_testcase/2, end_per_testcase/2]).
-export([unique_monotonic_integer_white_box/1,
unique_integer_white_box/1]).
@@ -47,6 +48,16 @@ end_per_suite(_Config) ->
erts_debug:set_internal_state(available_internal_state, false),
ok.
+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.
+
%%
%%
%% Unique counter white box test case
--
2.35.3