aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2019-07-26 14:25:59 +0200
committerLoïc Hoguin <[email protected]>2019-07-26 14:30:38 +0200
commit56b7fdd6eb15564ad821885937b03516a03dce4b (patch)
tree9fa4980d1eb59dbd038f1b4fdd1967be4ed420ba /test
parent00b0b29eacf3eb8a51273dc43064c6367573c4c4 (diff)
downloadgun-56b7fdd6eb15564ad821885937b03516a03dce4b.tar.gz
gun-56b7fdd6eb15564ad821885937b03516a03dce4b.tar.bz2
gun-56b7fdd6eb15564ad821885937b03516a03dce4b.zip
Add the transport_changed event
Also test protocol_changed over CONNECT.
Diffstat (limited to 'test')
-rw-r--r--test/event_SUITE.erl123
1 files changed, 104 insertions, 19 deletions
diff --git a/test/event_SUITE.erl b/test/event_SUITE.erl
index b1bfbcb..d593a59 100644
--- a/test/event_SUITE.erl
+++ b/test/event_SUITE.erl
@@ -38,7 +38,7 @@ groups() ->
WsTests = [T || T <- Tests, lists:sublist(atom_to_list(T), 3) =:= "ws_"],
[
{http, [parallel], Tests -- [cancel_remote|PushTests]},
- {http2, [parallel], (Tests -- [protocol_changed|WsTests]) -- HTTP1Tests}
+ {http2, [parallel], (Tests -- WsTests) -- HTTP1Tests}
].
init_per_suite(Config) ->
@@ -734,20 +734,6 @@ ws_upgrade_all_events(Config) ->
} = do_receive_event(protocol_changed),
gun:close(Pid).
-protocol_changed(Config) ->
- doc("Confirm that the protocol_changed event callback is called."),
- do_protocol_changed_ws(Config, ?FUNCTION_NAME).
- %% @todo do_protocol_changed_connect
-
-do_protocol_changed_ws(Config, EventName) ->
- {ok, Pid, _} = do_gun_open(Config),
- {ok, _} = gun:await_up(Pid),
- _ = gun:ws_upgrade(Pid, "/ws"),
- #{
- protocol := ws
- } = do_receive_event(EventName),
- gun:close(Pid).
-
ws_recv_frame_start(Config) ->
doc("Confirm that the ws_recv_frame_start event callback is called."),
{ok, Pid, _} = do_gun_open(Config),
@@ -824,6 +810,101 @@ do_ws_send_frame(Config, EventName) ->
} = do_receive_event(EventName),
gun:close(Pid).
+ws_protocol_changed(Config) ->
+ doc("Confirm that the protocol_changed event callback is called on Websocket upgrade success."),
+ {ok, Pid, _} = do_gun_open(Config),
+ {ok, _} = gun:await_up(Pid),
+ _ = gun:ws_upgrade(Pid, "/ws"),
+ #{
+ protocol := ws
+ } = do_receive_event(protocol_changed),
+ gun:close(Pid).
+
+http1_protocol_changed_connect(Config) ->
+ doc("Confirm that the protocol_changed event callback is called on CONNECT success "
+ "when connecting through a TLS server via a TCP proxy."),
+ OriginPort = config(tcp_origin_port, Config),
+ {ok, _, ProxyPort} = rfc7231_SUITE:do_proxy_start(tcp),
+ {ok, ConnPid} = gun:open("localhost", ProxyPort, #{
+ event_handler => {?MODULE, self()},
+ protocols => [config(name, config(tc_group_properties, Config))],
+ transport => tcp
+ }),
+ {ok, http} = gun:await_up(ConnPid),
+ _ = gun:connect(ConnPid, #{
+ host => "localhost",
+ port => OriginPort,
+ protocols => [http2]
+ }),
+ #{protocol := http2} = do_receive_event(protocol_changed),
+ gun:close(ConnPid).
+
+http1_protocol_changed_connect_over_https_proxy(Config) ->
+ doc("Confirm that the protocol_changed event callback is called on CONNECT success "
+ "when connecting through a TLS server via a TLS proxy."),
+ OriginPort = config(tls_origin_port, Config),
+ {ok, _, ProxyPort} = rfc7231_SUITE:do_proxy_start(tls),
+ {ok, ConnPid} = gun:open("localhost", ProxyPort, #{
+ event_handler => {?MODULE, self()},
+ protocols => [config(name, config(tc_group_properties, Config))],
+ transport => tls
+ }),
+ {ok, http} = gun:await_up(ConnPid),
+ _ = gun:connect(ConnPid, #{
+ host => "localhost",
+ port => OriginPort,
+ transport => tls,
+ protocols => [http2]
+ }),
+ #{protocol := http2} = do_receive_event(protocol_changed),
+ gun:close(ConnPid).
+
+http1_transport_changed_connect(Config) ->
+ doc("Confirm that the transport_changed event callback is called on CONNECT success "
+ "when connecting through a TLS server via a TCP proxy."),
+ OriginPort = config(tls_origin_port, Config),
+ {ok, _, ProxyPort} = rfc7231_SUITE:do_proxy_start(tcp),
+ {ok, ConnPid} = gun:open("localhost", ProxyPort, #{
+ event_handler => {?MODULE, self()},
+ protocols => [config(name, config(tc_group_properties, Config))],
+ transport => tcp
+ }),
+ {ok, http} = gun:await_up(ConnPid),
+ _ = gun:connect(ConnPid, #{
+ host => "localhost",
+ port => OriginPort,
+ transport => tls
+ }),
+ #{
+ socket := Socket,
+ transport := tls
+ } = do_receive_event(transport_changed),
+ true = is_tuple(Socket),
+ gun:close(ConnPid).
+
+http1_transport_changed_connect_over_https_proxy(Config) ->
+ doc("Confirm that the transport_changed event callback is called on CONNECT success "
+ "when connecting through a TLS server via a TLS proxy."),
+ OriginPort = config(tls_origin_port, Config),
+ {ok, _, ProxyPort} = rfc7231_SUITE:do_proxy_start(tls),
+ {ok, ConnPid} = gun:open("localhost", ProxyPort, #{
+ event_handler => {?MODULE, self()},
+ protocols => [config(name, config(tc_group_properties, Config))],
+ transport => tls
+ }),
+ {ok, http} = gun:await_up(ConnPid),
+ _ = gun:connect(ConnPid, #{
+ host => "localhost",
+ port => OriginPort,
+ transport => tls
+ }),
+ #{
+ socket := Socket,
+ transport := tls_proxy
+ } = do_receive_event(transport_changed),
+ true = is_pid(Socket),
+ gun:close(ConnPid).
+
cancel(Config) ->
doc("Confirm that the cancel event callback is called when we cancel a stream."),
{ok, Pid, _} = do_gun_open(Config),
@@ -986,10 +1067,6 @@ ws_upgrade(EventData, Pid) ->
Pid ! {?FUNCTION_NAME, EventData},
Pid.
-protocol_changed(EventData, Pid) ->
- Pid ! {?FUNCTION_NAME, EventData},
- Pid.
-
ws_recv_frame_start(EventData, Pid) ->
Pid ! {?FUNCTION_NAME, EventData},
Pid.
@@ -1010,6 +1087,14 @@ ws_send_frame_end(EventData, Pid) ->
Pid ! {?FUNCTION_NAME, EventData},
Pid.
+protocol_changed(EventData, Pid) ->
+ Pid ! {?FUNCTION_NAME, EventData},
+ Pid.
+
+transport_changed(EventData, Pid) ->
+ Pid ! {?FUNCTION_NAME, EventData},
+ Pid.
+
cancel(EventData, Pid) ->
Pid ! {?FUNCTION_NAME, EventData},
Pid.