summaryrefslogtreecommitdiff
path: root/lib/diameter/test
diff options
context:
space:
mode:
authorAnders Svensson <anders@erlang.org>2022-03-18 10:03:16 +0100
committerAnders Svensson <anders@erlang.org>2022-03-18 13:28:22 +0100
commit70dd073e9f79426ad3397ebf2ad0931887576082 (patch)
treeb1b01202ed0aba594e80e220649f4d5870c84d63 /lib/diameter/test
parent0e7b722b6dfb2ece27bb4d62ade41089b776f10c (diff)
downloaderlang-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.erl10
-rw-r--r--lib/diameter/test/diameter_distribution_SUITE.erl10
-rw-r--r--lib/diameter/test/diameter_examples_SUITE.erl7
-rw-r--r--lib/diameter/test/diameter_util.erl39
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() ->