From c867ec582d445b251ff659ba23f522b5278d5119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Thu, 20 Aug 2015 14:28:16 +0200 Subject: Add tests and more docs about separate supervisor/connection --- test/acceptor_SUITE.erl | 38 ++++++++++++++++++++++++++++++++++++++ test/supervisor_separate.erl | 16 ++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 test/supervisor_separate.erl (limited to 'test') diff --git a/test/acceptor_SUITE.erl b/test/acceptor_SUITE.erl index 07d4016..af1ea5e 100644 --- a/test/acceptor_SUITE.erl +++ b/test/acceptor_SUITE.erl @@ -42,6 +42,8 @@ groups() -> ]}, {misc, [ misc_bad_transport ]}, {supervisor, [ + connection_type_supervisor, + connection_type_supervisor_separate_from_connection, supervisor_clean_child_restart, supervisor_clean_conns_sup_restart, supervisor_clean_restart, @@ -298,6 +300,42 @@ tcp_upgrade(_) -> %% Supervisor tests +connection_type_supervisor(_) -> + doc("The supervisor connection type must be reflected in the specifications."), + Name = connection_type_supervisor, + {ok, _} = ranch:start_listener(Name, 1, + ranch_tcp, [{connection_type, supervisor}], + echo_protocol, []), + Port = ranch:get_port(Name), + {ok, Socket} = gen_tcp:connect("localhost", Port, [binary, {active, false}, {packet, raw}]), + ok = gen_tcp:send(Socket, <<"TCP Ranch is working!">>), + {ok, <<"TCP Ranch is working!">>} = gen_tcp:recv(Socket, 21, 1000), + ConnsSup = ranch_server:get_connections_sup(Name), + [{echo_protocol, _, supervisor, [echo_protocol]}] = supervisor:which_children(ConnsSup), + ok = ranch:stop_listener(Name), + {error, closed} = gen_tcp:recv(Socket, 0, 1000), + %% Make sure the listener stopped. + {'EXIT', _} = begin catch ranch:get_port(Name) end, + ok. + +connection_type_supervisor_separate_from_connection(_) -> + doc("The supervisor connection type allows separate supervised and connection processes."), + Name = connection_type_supervisor, + {ok, _} = ranch:start_listener(Name, 1, + ranch_tcp, [{connection_type, supervisor}], + supervisor_separate, []), + Port = ranch:get_port(Name), + {ok, Socket} = gen_tcp:connect("localhost", Port, [binary, {active, false}, {packet, raw}]), + ok = gen_tcp:send(Socket, <<"TCP Ranch is working!">>), + {ok, <<"TCP Ranch is working!">>} = gen_tcp:recv(Socket, 21, 1000), + ConnsSup = ranch_server:get_connections_sup(Name), + [{supervisor_separate, _, supervisor, [supervisor_separate]}] = supervisor:which_children(ConnsSup), + ok = ranch:stop_listener(Name), + {error, closed} = gen_tcp:recv(Socket, 0, 1000), + %% Make sure the listener stopped. + {'EXIT', _} = begin catch ranch:get_port(Name) end, + ok. + supervisor_clean_child_restart(_) -> %% Then we verify that only parts of the supervision tree %% restarted in the case of failure. diff --git a/test/supervisor_separate.erl b/test/supervisor_separate.erl new file mode 100644 index 0000000..5f1f326 --- /dev/null +++ b/test/supervisor_separate.erl @@ -0,0 +1,16 @@ +-module(supervisor_separate). +-behavior(supervisor). +-behavior(ranch_protocol). + +-export([start_link/4]). +-export([init/1]). + +start_link(Ref, Socket, Transport, Opts) -> + {ok, SupPid} = supervisor:start_link(?MODULE, []), + {ok, ConnPid} = supervisor:start_child(SupPid, + {echo_protocol, {echo_protocol, start_link, [Ref, Socket, Transport, Opts]}, + temporary, 5000, worker, [echo_protocol]}), + {ok, SupPid, ConnPid}. + +init([]) -> + {ok, {{one_for_one, 1, 1}, []}}. -- cgit v1.2.3