From 5ada450fe10a5fc51b7f3f0900571a10547635a1 Mon Sep 17 00:00:00 2001 From: "j.uhlig" Date: Tue, 26 Jun 2018 17:07:13 +0200 Subject: Introduce Transport:handshake/1,2 This commit deprecates Transport:accept_ack/1 in favor of a new forward-compatible function. Transport:handshake/1,2 will use ssl:handshake/2,3 from Ranch 2.0 onward. --- test/accept_ack_protocol.erl | 22 ++++++++++++++++++++++ test/acceptor_SUITE.erl | 29 +++++++++++++++++++++++++++++ test/active_echo_protocol.erl | 10 +++++----- test/echo_protocol.erl | 10 +++++----- test/remove_conn_and_wait_protocol.erl | 2 +- test/sendfile_SUITE.erl | 2 +- test/transport_capabilities_protocol.erl | 10 +++++----- test/trap_exit_protocol.erl | 10 +++++----- 8 files changed, 73 insertions(+), 22 deletions(-) create mode 100644 test/accept_ack_protocol.erl (limited to 'test') diff --git a/test/accept_ack_protocol.erl b/test/accept_ack_protocol.erl new file mode 100644 index 0000000..3c36fc7 --- /dev/null +++ b/test/accept_ack_protocol.erl @@ -0,0 +1,22 @@ +-module(accept_ack_protocol). +-behaviour(ranch_protocol). + +-export([start_link/4]). +-export([init/4]). + +start_link(Ref, Socket, Transport, Opts) -> + Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]), + {ok, Pid}. + +init(Ref, Socket, Transport, _Opts = []) -> + ok = ranch:accept_ack(Ref), + loop(Socket, Transport). + +loop(Socket, Transport) -> + case Transport:recv(Socket, 0, 5000) of + {ok, Data} -> + Transport:send(Socket, Data), + loop(Socket, Transport); + _ -> + ok = Transport:close(Socket) + end. diff --git a/test/acceptor_SUITE.erl b/test/acceptor_SUITE.erl index f1d707d..0be5d40 100644 --- a/test/acceptor_SUITE.erl +++ b/test/acceptor_SUITE.erl @@ -32,6 +32,7 @@ groups() -> tcp_active_echo, tcp_echo, tcp_graceful, + tcp_accept_ack, tcp_inherit_options, tcp_max_connections, tcp_max_connections_and_beyond, @@ -50,6 +51,7 @@ groups() -> ssl_active_echo, ssl_echo, ssl_graceful, + ssl_accept_ack, ssl_sni_echo, ssl_sni_fail, ssl_getopts_capability, @@ -489,6 +491,20 @@ ssl_graceful(_) -> {'EXIT', _} = begin catch ranch:get_port(Name) end, ok. +ssl_accept_ack(_) -> + doc("Ensure accept_ack works with SSL transport."), + Name = name(), + Opts = ct_helper:get_certs_from_ets(), + {ok, _} = ranch:start_listener(Name, ranch_ssl, Opts, accept_ack_protocol, []), + Port = ranch:get_port(Name), + {ok, Socket} = ssl:connect("localhost", Port, [binary, {active, false}, {packet, raw}]), + ok = ssl:send(Socket, <<"SSL transport accept_ack is working!">>), + {ok, <<"SSL transport accept_ack is working!">>} = ssl:recv(Socket, 36, 1000), + ok = ranch:stop_listener(Name), + {error, closed} = ssl:recv(Socket, 0, 1000), + {'EXIT', _} = begin catch ranch:get_port(Name) end, + ok. + ssl_getopts_capability(_) -> doc("Ensure getopts/2 capability."), Name=name(), @@ -641,6 +657,19 @@ tcp_graceful(_) -> {'EXIT', _} = begin catch ranch:get_port(Name) end, ok. +tcp_accept_ack(_) -> + doc("Ensure accept_ack works with TCP transport."), + Name = name(), + {ok, _} = ranch:start_listener(Name, ranch_tcp, [], accept_ack_protocol, []), + Port = ranch:get_port(Name), + {ok, Socket} = gen_tcp:connect("localhost", Port, [binary, {active, false}, {packet, raw}]), + ok = gen_tcp:send(Socket, <<"TCP transport accept_ack is working!">>), + {ok, <<"TCP transport accept_ack is working!">>} = gen_tcp:recv(Socket, 36, 1000), + ok = ranch:stop_listener(Name), + {error, closed} = gen_tcp:recv(Socket, 0, 1000), + {'EXIT', _} = begin catch ranch:get_port(Name) end, + ok. + tcp_inherit_options(_) -> doc("Ensure TCP options are inherited in the protocol."), Name = name(), diff --git a/test/active_echo_protocol.erl b/test/active_echo_protocol.erl index 6767141..37dd6db 100644 --- a/test/active_echo_protocol.erl +++ b/test/active_echo_protocol.erl @@ -2,14 +2,14 @@ -behaviour(ranch_protocol). -export([start_link/4]). --export([init/4]). +-export([init/3]). -start_link(Ref, Socket, Transport, Opts) -> - Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]), +start_link(Ref, _Socket, Transport, Opts) -> + Pid = spawn_link(?MODULE, init, [Ref, Transport, Opts]), {ok, Pid}. -init(Ref, Socket, Transport, _Opts = []) -> - ok = ranch:accept_ack(Ref), +init(Ref, Transport, _Opts = []) -> + {ok, Socket} = ranch:handshake(Ref), loop(Socket, Transport). loop(Socket, Transport) -> diff --git a/test/echo_protocol.erl b/test/echo_protocol.erl index 8c454bc..640f5c6 100644 --- a/test/echo_protocol.erl +++ b/test/echo_protocol.erl @@ -2,14 +2,14 @@ -behaviour(ranch_protocol). -export([start_link/4]). --export([init/4]). +-export([init/3]). -start_link(Ref, Socket, Transport, Opts) -> - Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]), +start_link(Ref, _Socket, Transport, Opts) -> + Pid = spawn_link(?MODULE, init, [Ref, Transport, Opts]), {ok, Pid}. -init(Ref, Socket, Transport, _Opts = []) -> - ok = ranch:accept_ack(Ref), +init(Ref, Transport, _Opts = []) -> + {ok, Socket} = ranch:handshake(Ref), loop(Socket, Transport). loop(Socket, Transport) -> diff --git a/test/remove_conn_and_wait_protocol.erl b/test/remove_conn_and_wait_protocol.erl index db688ff..59cedfc 100644 --- a/test/remove_conn_and_wait_protocol.erl +++ b/test/remove_conn_and_wait_protocol.erl @@ -9,7 +9,7 @@ start_link(Ref, _, _, [{remove, MaybeRemove, Timeout}]) -> {ok, Pid}. init(Ref, MaybeRemove, Timeout) -> - ranch:accept_ack(Ref), + {ok, _} = ranch:handshake(Ref), case MaybeRemove of true -> ranch:remove_connection(Ref); diff --git a/test/sendfile_SUITE.erl b/test/sendfile_SUITE.erl index 7bec5ac..5a6d2cb 100644 --- a/test/sendfile_SUITE.erl +++ b/test/sendfile_SUITE.erl @@ -280,7 +280,7 @@ sockets(Config) -> end, _ = spawn_link(Fun), {ok, Server} = Transport:accept(LSocket, 500), - ok = Transport:accept_ack(Server, 500), + {ok, _} = Transport:handshake(Server, [], 500), receive {ok, Client} -> ok = Transport:close(LSocket), diff --git a/test/transport_capabilities_protocol.erl b/test/transport_capabilities_protocol.erl index 0f8bf9d..ba5024a 100644 --- a/test/transport_capabilities_protocol.erl +++ b/test/transport_capabilities_protocol.erl @@ -2,14 +2,14 @@ -behaviour(ranch_protocol). -export([start_link/4]). --export([init/4]). +-export([init/3]). -start_link(Ref, Socket, Transport, Opts) -> - Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]), +start_link(Ref, _Socket, Transport, Opts) -> + Pid = spawn_link(?MODULE, init, [Ref, Transport, Opts]), {ok, Pid}. -init(Ref, Socket, Transport, _Opts = []) -> - ok = ranch:accept_ack(Ref), +init(Ref, Transport, _Opts = []) -> + {ok, Socket} = ranch:handshake(Ref), loop(Socket, Transport). loop(Socket, Transport) -> diff --git a/test/trap_exit_protocol.erl b/test/trap_exit_protocol.erl index a0c4329..6100075 100644 --- a/test/trap_exit_protocol.erl +++ b/test/trap_exit_protocol.erl @@ -2,15 +2,15 @@ -behaviour(ranch_protocol). -export([start_link/4]). --export([init/4]). +-export([init/3]). -start_link(Ref, Socket, Transport, Opts) -> - Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]), +start_link(Ref, _Socket, Transport, Opts) -> + Pid = spawn_link(?MODULE, init, [Ref, Transport, Opts]), {ok, Pid}. -init(Ref, Socket, Transport, _Opts = []) -> +init(Ref, Transport, _Opts = []) -> process_flag(trap_exit, true), - ok = ranch:accept_ack(Ref), + {ok, Socket} = ranch:handshake(Ref), loop(Socket, Transport). loop(Socket, Transport) -> -- cgit v1.2.3