diff options
author | Anders Svensson <anders@erlang.org> | 2022-03-18 10:03:16 +0100 |
---|---|---|
committer | Anders Svensson <anders@erlang.org> | 2022-03-18 13:28:22 +0100 |
commit | 70dd073e9f79426ad3397ebf2ad0931887576082 (patch) | |
tree | b1b01202ed0aba594e80e220649f4d5870c84d63 /lib/diameter/test | |
parent | 0e7b722b6dfb2ece27bb4d62ade41089b776f10c (diff) | |
download | erlang-70dd073e9f79426ad3397ebf2ad0931887576082.tar.gz |
Fix peer-related testsuite noise
Crashes like the one below after commit 0dad730b were just noise, but
caused by the process running peer:start_link/1 exiting with a
meaningful reason for the purpose of monitoring. Start from a middleman
process to work around it.
=ERROR REPORT==== 18-Mar-2022::10:50:22.260471 ===
** Generic server <0.139.0> terminating
** Last message in was {'EXIT',<0.135.0>,
{#Ref<0.2812022913.2652372994.101846>,[]}}
** When Server state == {peer_state,#{args =>
["-pa",
"/home/anders/dev/otp/lib/diameter/test",
"/home/anders/dev/otp/lib/diameter/test/../ebin",
"-setcookie",
"zzz"],
name => "diametertcpserver"},
diametertcpserver@elxa6vcfsf2,
"/home/anders/dev/erlang/94c81bfd/erts-12.2.1/bin/erl",
["-sname","diametertcpserver","-detached",
"-noinput","-user","peer","-origin",
"g1hkACNkaWFtZXRlcl90ZXN0X19leGFtcGxlc0BlbHhhNnZjZnNmMgAAAIsAAAAAYjQeQw==",
"-pa",
"/home/anders/dev/otp/lib/diameter/test",
"/home/anders/dev/otp/lib/diameter/test/../ebin",
"-setcookie","zzz"],
undefined,undefined,<<>>,running,
{<0.135.0>,
#Ref<0.2812022913.2652372994.101857>},
0,#{}}
** Reason for termination ==
** {#Ref<0.2812022913.2652372994.101846>,[]}
=CRASH REPORT==== 18-Mar-2022::10:50:22.267130 ===
crasher:
initial call: peer:init/1
pid: <0.139.0>
registered_name: []
exception exit: {#Ref<0.2812022913.2652372994.101846>,[]}
in function gen_server:decode_msg/9 (gen_server.erl, line 488)
ancestors: [<0.135.0>]
message_queue_len: 1
messages: [{nodedown,diametertcpserver@elxa6vcfsf2}]
links: []
dictionary: []
trap_exit: true
status: running
heap_size: 6772
stack_size: 28
reductions: 11827
neighbours:
Diffstat (limited to 'lib/diameter/test')
-rw-r--r-- | lib/diameter/test/diameter_dist_SUITE.erl | 10 | ||||
-rw-r--r-- | lib/diameter/test/diameter_distribution_SUITE.erl | 10 | ||||
-rw-r--r-- | lib/diameter/test/diameter_examples_SUITE.erl | 7 | ||||
-rw-r--r-- | lib/diameter/test/diameter_util.erl | 39 |
4 files changed, 47 insertions, 19 deletions
diff --git a/lib/diameter/test/diameter_dist_SUITE.erl b/lib/diameter/test/diameter_dist_SUITE.erl index 7c66a711c8..81d2dfbf36 100644 --- a/lib/diameter/test/diameter_dist_SUITE.erl +++ b/lib/diameter/test/diameter_dist_SUITE.erl @@ -134,15 +134,11 @@ traffic() -> enslave() -> Here = filename:dirname(code:which(?MODULE)), Ebin = filename:join([Here, "..", "ebin"]), - Dirs = [Here, Ebin], - Args = [["-pa" | [lists:flatten(io_lib:format("~s", [D])) || D <- Dirs]], - ["-setcookie", ?L(erlang:get_cookie())]], - [{N,S} || A <- [lists:append(Args)], - {M,S} <- ?NODES, - N <- [start(M, A)]]. + Args = ["-pa", Here, Ebin], + [{N,S} || {M,S} <- ?NODES, N <- [start(M, Args)]]. start(Name, Args) -> - {ok, _, Node} = peer:start_link(#{name => Name, args => Args}), + {ok, _, Node} = ?util:peer(#{name => Name, args => Args}), Node. %% ping/1 diff --git a/lib/diameter/test/diameter_distribution_SUITE.erl b/lib/diameter/test/diameter_distribution_SUITE.erl index 364a90f3ba..013c42496e 100644 --- a/lib/diameter/test/diameter_distribution_SUITE.erl +++ b/lib/diameter/test/diameter_distribution_SUITE.erl @@ -132,15 +132,11 @@ traffic() -> enslave() -> Here = filename:dirname(code:which(?MODULE)), Ebin = filename:join([Here, "..", "ebin"]), - Dirs = [Here, Ebin], - Args = [["-pa" | [lists:flatten(io_lib:format("~s", [D])) || D <- Dirs]], - ["-setcookie", ?L(erlang:get_cookie())]], - [{N,S} || A <- [lists:append(Args)], - {M,S} <- ?NODES, - N <- [start(M, A)]]. + Args = ["-pa", Here, Ebin], + [{N,S} || {M,S} <- ?NODES, N <- [start(M, Args)]]. start(Name, Args) -> - {ok, _, Node} = peer:start_link(#{name => Name, args => Args}), + {ok, _, Node} = ?util:peer(#{name => Name, args => Args}), Node. %% ping/1 diff --git a/lib/diameter/test/diameter_examples_SUITE.erl b/lib/diameter/test/diameter_examples_SUITE.erl index 2c68dc90a4..e5aab1a64a 100644 --- a/lib/diameter/test/diameter_examples_SUITE.erl +++ b/lib/diameter/test/diameter_examples_SUITE.erl @@ -285,11 +285,8 @@ enslave(Prefix) -> {ok, _, N} <- [slave(M,D)]]. slave(Name, Dir) -> - Args = [["-pa" | [lists:flatten(io_lib:format("~s", [D])) - || D <- [Dir, filename:join([Dir, "..", "ebin"])]]], - ["-setcookie", ?L(erlang:get_cookie())]], - {ok, _Pid, _Node} = peer:start_link(#{name => Name, - args => lists:append(Args)}). + Args = ["-pa", Dir, filename:join([Dir, "..", "ebin"])], + {ok, _Pid, _Node} = ?util:peer(#{name => Name, args => Args}). here() -> filename:dirname(code:which(?MODULE)). diff --git a/lib/diameter/test/diameter_util.erl b/lib/diameter/test/diameter_util.erl index f6c101b7f5..feb8a74e5f 100644 --- a/lib/diameter/test/diameter_util.erl +++ b/lib/diameter/test/diameter_util.erl @@ -34,6 +34,7 @@ choose/1, tmpdir/0, mktemp/1, + peer/1, unique_string/0, have_sctp/0, eprof/1]). @@ -212,6 +213,44 @@ mktemp(Prefix) -> Tmp. %% --------------------------------------------------------------------------- +%% peer/1 +%% +%% Start a peer that dies with the calling process, but start it from +%% a spawned process to make it insensitive to the exit reason of the +%% calling process. + +peer(#{name := _} = Opts) -> + Ref = make_ref(), + Pid = self(), + {_, MRef} = spawn_monitor(fun() -> peer(Opts, Pid, Ref) end), + receive + {Ref, T} -> + erlang:demonitor(MRef, [flush]), + T; + {'DOWN', MRef, process, _, T} -> + {error, T} + end; + +peer(#{} = Opts) -> + peer(Opts#{name => peer:random_name()}). + +%% peer/3 + +peer(Opts, Pid, Ref) -> + Cookie = atom_to_list(erlang:get_cookie()), + Args = [str(B) || B <- maps:get(args, Opts, [])], + Pid ! {Ref, peer:start_link(Opts#{args => ["-setcookie", Cookie | Args]})}, + MRef = monitor(process, Pid), + receive {'DOWN', MRef, process, _, _} -> ok end. + +%% str/1 +%% +%% Turn possible iodata() into string(). + +str(Bytes) -> + binary_to_list(iolist_to_binary(Bytes)). + +%% --------------------------------------------------------------------------- %% unique_string/0 unique_string() -> |