aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2015-08-20 14:28:16 +0200
committerLoïc Hoguin <[email protected]>2015-08-20 14:28:16 +0200
commitc867ec582d445b251ff659ba23f522b5278d5119 (patch)
tree50efcb176bc97207ed06a536acd2f7c56db9db98 /test
parent32e4ebef2ce16b2b1fce2a4af7bb2bd7ef17f235 (diff)
downloadranch-c867ec582d445b251ff659ba23f522b5278d5119.tar.gz
ranch-c867ec582d445b251ff659ba23f522b5278d5119.tar.bz2
ranch-c867ec582d445b251ff659ba23f522b5278d5119.zip
Add tests and more docs about separate supervisor/connection
Diffstat (limited to 'test')
-rw-r--r--test/acceptor_SUITE.erl38
-rw-r--r--test/supervisor_separate.erl16
2 files changed, 54 insertions, 0 deletions
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}, []}}.