aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorjuhlig <[email protected]>2019-05-08 15:05:27 +0200
committerLoïc Hoguin <[email protected]>2019-05-08 16:38:47 +0200
commitd59eef5c737d0b08eb8c16c5316300e863bc935c (patch)
treebe6ab3327717f847677484edf027af9e21266045 /test
parentaa64151149e947145728a1f1339c689f1100720e (diff)
downloadranch-d59eef5c737d0b08eb8c16c5316300e863bc935c.tar.gz
ranch-d59eef5c737d0b08eb8c16c5316300e863bc935c.tar.bz2
ranch-d59eef5c737d0b08eb8c16c5316300e863bc935c.zip
Add the num_conns_sups option
This new option allows configuring the number of connection supervisors. The old behavior can be obtained by setting this value to 1. A value larger than num_acceptors will result in some connection supervisors not being used as the acceptors currently only use one connection supervisor.
Diffstat (limited to 'test')
-rw-r--r--test/acceptor_SUITE.erl56
1 files changed, 56 insertions, 0 deletions
diff --git a/test/acceptor_SUITE.erl b/test/acceptor_SUITE.erl
index dce006a..386bf68 100644
--- a/test/acceptor_SUITE.erl
+++ b/test/acceptor_SUITE.erl
@@ -69,6 +69,10 @@ groups() ->
]}, {supervisor, [
connection_type_supervisor,
connection_type_supervisor_separate_from_connection,
+ supervisor_10_acceptors_1_conns_sup,
+ supervisor_9_acceptors_4_conns_sups,
+ supervisor_10_acceptors_10_conns_sups,
+ supervisor_1_acceptor_10_conns_sups,
supervisor_changed_options_restart,
supervisor_clean_child_restart,
supervisor_clean_restart,
@@ -967,6 +971,58 @@ connection_type_supervisor_separate_from_connection(_) ->
{'EXIT', _} = begin catch ranch:get_port(Name) end,
ok.
+supervisor_10_acceptors_1_conns_sup(_) ->
+ doc("Ensure that using 10 acceptors and 1 connection supervisor works."),
+ ok = do_supervisor_n_acceptors_m_conns_sups(10, 1).
+
+supervisor_9_acceptors_4_conns_sups(_) ->
+ doc("Ensure that using 9 acceptors and 4 connection supervisors works."),
+ ok = do_supervisor_n_acceptors_m_conns_sups(9, 4).
+
+supervisor_10_acceptors_10_conns_sups(_) ->
+ doc("Ensure that using 10 acceptors and 10 connection supervisors works."),
+ ok = do_supervisor_n_acceptors_m_conns_sups(10, 10).
+
+supervisor_1_acceptor_10_conns_sups(_) ->
+ doc("Ensure that using 1 acceptor and 10 connection supervisors works."),
+ ok = do_supervisor_n_acceptors_m_conns_sups(1, 10).
+
+do_supervisor_n_acceptors_m_conns_sups(NumAcceptors, NumConnsSups) ->
+ Name = name(),
+ {ok, Pid} = ranch:start_listener(Name,
+ ranch_tcp, #{num_conns_sups => NumConnsSups, num_acceptors => NumAcceptors},
+ notify_and_wait_protocol, [{msg, connected}, {pid, self()}]),
+ Port = ranch:get_port(Name),
+ ConnsSups = [ConnsSup || {_, ConnsSup} <- ranch_server:get_connections_sups(Name)],
+ NumConnsSups = length(ConnsSups),
+ {ranch_acceptors_sup, AcceptorsSup, supervisor, _} =
+ lists:keyfind(ranch_acceptors_sup, 1, supervisor:which_children(Pid)),
+ AcceptorIds = [AcceptorId ||
+ {{acceptor, _, AcceptorId}, _, worker, _} <- supervisor:which_children(AcceptorsSup)],
+ NumAcceptors = length(AcceptorIds),
+ AcceptorConnsSups0 = [ranch_server:get_connections_sup(Name, AcceptorId) ||
+ AcceptorId <- AcceptorIds],
+ AcceptorConnsSups1 = lists:usort(AcceptorConnsSups0),
+ if
+ NumAcceptors > NumConnsSups ->
+ NumConnsSups = length(AcceptorConnsSups1),
+ [] = ConnsSups -- AcceptorConnsSups1;
+ NumAcceptors < NumConnsSups ->
+ NumAcceptors = length(AcceptorConnsSups1),
+ [] = AcceptorConnsSups1 -- ConnsSups;
+ NumAcceptors =:= NumConnsSups ->
+ NumConnsSups = length(AcceptorConnsSups1),
+ NumAcceptors = length(AcceptorConnsSups1),
+ [] = ConnsSups -- AcceptorConnsSups1,
+ [] = AcceptorConnsSups1 -- ConnsSups
+ end,
+ ok = connect_loop(Port, 100, 0),
+ 100 = receive_loop(connected, 100),
+ 100 = ranch_server:count_connections(Name),
+ ok = ranch:stop_listener(Name),
+ {'EXIT', _} = begin catch ranch:get_port(Name) end,
+ ok.
+
supervisor_changed_options_restart(_) ->
doc("Ensure that a listener is restarted with changed transport options."),
Name = name(),