aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorjuhlig <[email protected]>2019-06-21 16:01:22 +0200
committerLoïc Hoguin <[email protected]>2019-06-21 17:10:16 +0200
commite8d6401741021f76988091e6dc633afb65ffbe7b (patch)
treeba4a55fb0a3b7c461cd71986c689db3009af9648 /test
parentae84436f7ceed06a09e3fe1afb30e675579b7621 (diff)
downloadranch-e8d6401741021f76988091e6dc633afb65ffbe7b.tar.gz
ranch-e8d6401741021f76988091e6dc633afb65ffbe7b.tar.bz2
ranch-e8d6401741021f76988091e6dc633afb65ffbe7b.zip
Embedded listeners depending on ranch_server
Diffstat (limited to 'test')
-rw-r--r--test/acceptor_SUITE.erl35
-rw-r--r--test/embedded_sup.erl4
2 files changed, 34 insertions, 5 deletions
diff --git a/test/acceptor_SUITE.erl b/test/acceptor_SUITE.erl
index 294b07e..332967f 100644
--- a/test/acceptor_SUITE.erl
+++ b/test/acceptor_SUITE.erl
@@ -85,6 +85,7 @@ groups() ->
supervisor_clean_child_restart,
supervisor_clean_restart,
supervisor_conns_alive,
+ supervisor_embedded_ranch_server_crash,
supervisor_protocol_start_link_crash,
supervisor_server_recover_state,
supervisor_unexpected_message
@@ -190,20 +191,26 @@ misc_info_embedded(_) ->
doc("Information about listeners in embedded mode."),
{ok, SupPid} = embedded_sup:start_link(),
%% Open a listener with a few connections.
- {ok, Pid1} = embedded_sup:start_listener(SupPid, {misc_info_embedded, tcp},
+ {ok, EmbeddedSupPid1} = embedded_sup:start_listener(SupPid, {misc_info_embedded, tcp},
ranch_tcp, #{num_acceptors => 1},
remove_conn_and_wait_protocol, [{remove, true, 2500}]),
+ {_, Pid1, _, _} = lists:keyfind({ranch_listener_sup, {misc_info_embedded, tcp}}, 1,
+ supervisor:which_children(EmbeddedSupPid1)),
Port1 = ranch:get_port({misc_info_embedded, tcp}),
%% Open a few more listeners with different arguments.
- {ok, Pid2} = embedded_sup:start_listener(SupPid, {misc_info_embedded, act},
+ {ok, EmbeddedSupPid2} = embedded_sup:start_listener(SupPid, {misc_info_embedded, act},
ranch_tcp, #{num_acceptors => 2},
active_echo_protocol, {}),
+ {_, Pid2, _, _} = lists:keyfind({ranch_listener_sup, {misc_info_embedded, act}}, 1,
+ supervisor:which_children(EmbeddedSupPid2)),
Port2 = ranch:get_port({misc_info_embedded, act}),
ranch:set_max_connections({misc_info_embedded, act}, infinity),
Opts = ct_helper:get_certs_from_ets(),
- {ok, Pid3} = embedded_sup:start_listener(SupPid, {misc_info_embedded, ssl},
+ {ok, EmbeddedSupPid3} = embedded_sup:start_listener(SupPid, {misc_info_embedded, ssl},
ranch_ssl, #{num_acceptors => 3, socket_opts => Opts},
echo_protocol, [{}]),
+ {_, Pid3, _, _} = lists:keyfind({ranch_listener_sup, {misc_info_embedded, ssl}}, 1,
+ supervisor:which_children(EmbeddedSupPid3)),
Port3 = ranch:get_port({misc_info_embedded, ssl}),
%% Open 5 connections, 3 removed from the count.
{ok, _} = gen_tcp:connect("localhost", Port1, [binary, {active, false}, {packet, raw}]),
@@ -1352,6 +1359,28 @@ do_supervisor_conns_alive(_) ->
ok = clean_traces(),
ok = ranch:stop_listener(Name).
+supervisor_embedded_ranch_server_crash(_) ->
+ doc("Ensure that restarting ranch_server also restarts embedded listeners."),
+ Name = name(),
+ {ok, SupPid} = embedded_sup:start_link(),
+ {ok, EmbeddedSupPid} = embedded_sup:start_listener(SupPid, Name,
+ ranch_tcp, #{},
+ echo_protocol, []),
+ [{{ranch_listener_sup, Name}, ListenerPid, supervisor, _},
+ {ranch_server_proxy, ProxyPid, worker, _}] = supervisor:which_children(EmbeddedSupPid),
+ ProxyMonitor = monitor(process, ProxyPid),
+ ListenerMonitor = monitor(process, ListenerPid),
+ ok = supervisor:terminate_child(ranch_sup, ranch_server),
+ receive {'DOWN', ProxyMonitor, process, ProxyPid, shutdown} -> ok after 1000 -> exit(timeout) end,
+ receive {'DOWN', ListenerMonitor, process, ListenerPid, shutdown} -> ok after 1000 -> exit(timeout) end,
+ {ok, _} = supervisor:restart_child(ranch_sup, ranch_server),
+ receive after 1000 -> ok end,
+ [{{ranch_listener_sup, Name}, _, supervisor, _},
+ {ranch_server_proxy, _, worker, _}] = supervisor:which_children(EmbeddedSupPid),
+ embedded_sup:stop_listener(SupPid, Name),
+ embedded_sup:stop(SupPid),
+ ok.
+
supervisor_protocol_start_link_crash(_) ->
doc("Ensure a protocol start crash does not kill all connections."),
Name = name(),
diff --git a/test/embedded_sup.erl b/test/embedded_sup.erl
index 52275e0..49f2d0c 100644
--- a/test/embedded_sup.erl
+++ b/test/embedded_sup.erl
@@ -23,6 +23,6 @@ start_listener(SupPid, Ref, Transport, TransOpts, Protocol, ProtoOpts) ->
).
stop_listener(SupPid, Ref) ->
- ok = supervisor:terminate_child(SupPid, {ranch_listener_sup, Ref}),
- ok = supervisor:delete_child(SupPid, {ranch_listener_sup, Ref}),
+ ok = supervisor:terminate_child(SupPid, {ranch_embedded_sup, Ref}),
+ ok = supervisor:delete_child(SupPid, {ranch_embedded_sup, Ref}),
ranch_server:cleanup_listener_opts(Ref).