diff options
author | Maria Scott <[email protected]> | 2021-09-03 14:03:08 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2021-09-06 10:28:57 +0200 |
commit | 3303dac8ba3415569ca42bdc2eeccc6d5ee2c845 (patch) | |
tree | e2d6add8383005aa25df6ccbbe4cf3377356dc95 /test/stampede_SUITE.erl | |
parent | 9cbc272ddbff2da9c8ac18c2c6b0f29d22500cd5 (diff) | |
download | ranch-3303dac8ba3415569ca42bdc2eeccc6d5ee2c845.tar.gz ranch-3303dac8ba3415569ca42bdc2eeccc6d5ee2c845.tar.bz2 ranch-3303dac8ba3415569ca42bdc2eeccc6d5ee2c845.zip |
Enable usage of experimental inet_backend option for TCP listeners
Diffstat (limited to 'test/stampede_SUITE.erl')
-rw-r--r-- | test/stampede_SUITE.erl | 77 |
1 files changed, 66 insertions, 11 deletions
diff --git a/test/stampede_SUITE.erl b/test/stampede_SUITE.erl index cdda863..45d29de 100644 --- a/test/stampede_SUITE.erl +++ b/test/stampede_SUITE.erl @@ -22,7 +22,57 @@ %% ct. all() -> - ct_helper:all(?MODULE). + [{group, tcp}, {group, tcp_socket}, {group, ssl}]. + +groups() -> + [ + { + tcp, + [], + [ + stampede_tcp, + stampede_embedded + ] + }, + { + tcp_socket, + [], + [ + stampede_tcp, + stampede_embedded + ] + }, + { + ssl, + [], + [ + stampede_ssl + ] + } + ]. + +init_per_group(tcp_socket, Config) -> + %% The socket backend for inet/gen_tcp was introduced as an experimental + %% feature in OTP/23.0, and bugs https://bugs.erlang.org/browse/ERL-1284, + %% 1287 and 1293 were solved in OTP/23.1. socket:use_registry/1 first + %% appears in this release. + %% Due to https://bugs.erlang.org/browse/ERL-1401, the socket backend + %% is not working on Windows. + case + os:type() =/= {win32, nt} andalso + code:ensure_loaded(socket) =:= {module, socket} andalso + erlang:function_exported(socket, use_registry, 1) + of + true -> + [{socket_opts, [{inet_backend, socket}]}|Config]; + false -> + {skip, "No socket backend support"} + end; +init_per_group(_, Config) -> + Config. + +end_per_group(_, _) -> + ok. init_per_suite(Config) -> {ok, _} = application:ensure_all_started(ranch), @@ -40,21 +90,22 @@ end_per_suite(_) -> %% Tests. -stampede_tcp(_) -> +stampede_tcp(Config) -> doc("Start a TCP listener, establish a hundred connections, " "run stampede, confirm we can still connect."), %% Start a TCP listener. Name = name(), + SockOpts = do_get_sockopts(Config), {ok, _} = ranch:start_listener(Name, - ranch_tcp, #{}, + ranch_tcp, #{socket_opts => SockOpts}, echo_protocol, []), - %% Establish a hundred connections. - ok = do_connect(100, ranch_tcp, ranch:get_port(Name), 1000), %% Set restart frequency of ranch_sup. do_set_sup_frequencies([ranch_sup], 999999, 1), %% Run stampede. {ok, _} = stampede:start_herd(ranch_stampede, {application, ranch}, #{interval => {100, 100}, before_kill => fun do_log/1}), + %% Establish a hundred connections. + ok = do_connect(100, ranch_tcp, ranch:get_port(Name), 1000), ok = stampede:activate(ranch_stampede), timer:sleep(10000), ok = stampede:stop_herd(ranch_stampede), @@ -71,8 +122,6 @@ stampede_ssl(_) -> {ok, _} = ranch:start_listener(Name, ranch_ssl, ct_helper:get_certs_from_ets(), echo_protocol, []), - %% Establish a hundred connections. - ok = do_connect(100, ranch_ssl, ranch:get_port(Name), 1000), %% Set restart frequencies of ranch_sup and ssl_sup. do_set_sup_frequencies([ranch_sup, ssl_sup], 999999, 1), %% Run stampede. @@ -80,6 +129,8 @@ stampede_ssl(_) -> #{interval => {100, 100}, before_kill => fun do_log/1}), {ok, _} = stampede:start_herd(ssl_stampede, {application, ssl}, #{interval => {100, 100}, before_kill => fun do_log/1}), + %% Establish a hundred connections. + ok = do_connect(100, ranch_ssl, ranch:get_port(Name), 1000), ok = stampede:activate(ranch_stampede), ok = stampede:activate(ssl_stampede), timer:sleep(10000), @@ -90,16 +141,15 @@ stampede_ssl(_) -> ok = do_connect(1, ranch_ssl, ranch:get_port(Name), 1000), ok = ranch:stop_listener(Name). -stampede_embedded(_) -> +stampede_embedded(Config) -> doc("Start an embedded TCP listener, establish a hundred connections, " "run stampede, confirm we can still connect."), %% Start embedded listener. Name = name(), + SockOpts = do_get_sockopts(Config), {ok, SupPid} = embedded_sup:start_link(), {ok, _} = embedded_sup:start_listener(SupPid, Name, - ranch_tcp, #{}, echo_protocol, []), - %% Establish a hundred connections. - ok = do_connect(100, ranch_tcp, ranch:get_port(Name), 1000), + ranch_tcp, #{socket_opts => SockOpts}, echo_protocol, []), %% Set restart frequency of ranch_sup and embedded_sup. do_set_sup_frequencies([ranch_sup, SupPid], 999999, 1), %% Run stampede. @@ -107,6 +157,8 @@ stampede_embedded(_) -> #{interval => {100, 100}, before_kill => fun do_log/1}), {ok, _} = stampede:start_herd(embedded_stampede, {supervisor, SupPid}, #{interval => {100, 100}, before_kill => fun do_log/1}), + %% Establish a hundred connections. + ok = do_connect(100, ranch_tcp, ranch:get_port(Name), 1000), ok = stampede:activate(ranch_stampede), ok = stampede:activate(embedded_stampede), timer:sleep(10000), @@ -136,3 +188,6 @@ do_log(Pid) when is_pid(Pid) -> do_log(Port) when is_port(Port) -> ct:log(info, "~p: ~p~n", [Port, erlang:port_info(Port)]), true. + +do_get_sockopts(Config) -> + proplists:get_value(socket_opts, Config, []). |