summaryrefslogtreecommitdiff
path: root/lib/diameter/test/diameter_pool_SUITE.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/diameter/test/diameter_pool_SUITE.erl')
-rw-r--r--lib/diameter/test/diameter_pool_SUITE.erl97
1 files changed, 57 insertions, 40 deletions
diff --git a/lib/diameter/test/diameter_pool_SUITE.erl b/lib/diameter/test/diameter_pool_SUITE.erl
index a36a4fa17a..40d34c6237 100644
--- a/lib/diameter/test/diameter_pool_SUITE.erl
+++ b/lib/diameter/test/diameter_pool_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2015-2019. All Rights Reserved.
+%% Copyright Ericsson AB 2015-2022. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -25,17 +25,16 @@
-module(diameter_pool_SUITE).
+%% testcases, no common_test dependency
+-export([run/0,
+ run/1]).
+
+%% common_test wrapping
-export([suite/0,
all/0,
- init_per_testcase/2,
- end_per_testcase/2,
- init_per_suite/1,
- end_per_suite/1]).
-
-%% testcases
--export([tcp_connect/1,
- sctp_connect/1,
- any_connect/1]).
+ tcp/1,
+ sctp/1,
+ any/1]).
%% ===========================================================================
@@ -62,44 +61,53 @@
%% ===========================================================================
suite() ->
- [{timetrap, {seconds, 30}}].
+ [{timetrap, {seconds, 45}}].
all() ->
- [tcp_connect,
- sctp_connect,
- any_connect].
+ [tcp, sctp, any].
-init_per_testcase(_Name, Config) ->
- Config.
+tcp(_Config) ->
+ run([tcp]).
-end_per_testcase(_Name, _Config) ->
- diameter:stop().
-
-init_per_suite(Config) ->
- [{sctp, ?util:have_sctp()} | Config].
+sctp(_Config) ->
+ case ?util:have_sctp() of
+ true -> run([sctp]);
+ false -> {skip, no_sctp}
+ end.
-end_per_suite(_Config) ->
- ok.
+any(_Config) ->
+ run([any]).
%% ===========================================================================
-tcp_connect(_Config) ->
- connect(tcp, tcp).
+%% run/0
-sctp_connect(Config) ->
- case lists:member({sctp, true}, Config) of
- true -> connect(sctp, sctp);
- false -> {skip, no_sctp}
- end.
+run() ->
+ run(all()).
+
+%% run/1
+
+run(tcp = T) ->
+ connect(T, T);
-any_connect(_Config) ->
- connect(any, tcp).
+run(sctp = T) ->
+ connect(T, T);
+
+run(any = T) ->
+ connect(T, tcp);
+
+run(List) ->
+ ok = diameter:start(),
+ try
+ ?util:run([[{[fun run/1, T], 30000} || T <- List]])
+ after
+ ok = diameter:stop()
+ end.
%% connect/2
%% Establish multiple connections between a client and server.
connect(ClientProt, ServerProt) ->
- ok = diameter:start(),
[] = [{S,T} || S <- ["server", "client"],
T <- [diameter:start_service(S, ?SERVICE(S))],
T /= ok],
@@ -108,20 +116,24 @@ connect(ClientProt, ServerProt) ->
LRef = ?util:listen("server", ServerProt, [{pool_size, 4}]),
{4,0} = count("server", LRef, accept), %% 4 transports, no connections
%% Establish 5 connections.
- Ref = ?util:connect("client", ClientProt, LRef, [{pool_size, 5}]),
- {5,5} = count("client", Ref, pool), %% 5 connections
+ N = pool_size(5), %% connections to establish
+ Ref = ?util:connect("client", ClientProt, LRef, [{pool_size, N}]),
+ {N,N} = count("client", Ref, pool), %% N connections
%% Ensure the server has started replacement transports within a
%% reasonable time. Sleepsince there's no guarantee the
%% replacements have been started before the client has received
%% 'up' events. (Although it's likely.)
- sleep(),
- {9,5} = count("server", LRef, accept), %% 5 connections + 4 accepting
+ timer:sleep(1000),
+ N4 = N + 4,
+ {N4,N} = count("server", LRef, accept), %% N connections + 4 accepting
%% Ensure there are still the expected number of accepting transports
%% after stopping the client service.
ok = diameter:stop_service("client"),
- sleep(),
+ timer:sleep(1000),
{4,0} = count("server", LRef, accept), %% 4 transports, no connections
%% Done.
+ ok = diameter:remove_transport("client", true),
+ ok = diameter:remove_transport("server", true),
ok = diameter:stop_service("server").
count(Name, Ref, Key) ->
@@ -131,5 +143,10 @@ count(Name, Ref, Key) ->
{Key, Ps} = lists:keyfind(Key, 1, T),
{length(Ps), length(Cs)}. %% number of processes, connections
-sleep() ->
- receive after 1000 -> ok end.
+%% Simultaneous connections are often refused on Darwin: don't try to
+%% establish more than one.
+pool_size(N) ->
+ case os:type() of
+ {_, 'darwin'} -> 1;
+ _ -> rand:uniform(N)
+ end.