diff options
author | Loïc Hoguin <[email protected]> | 2019-05-08 14:01:51 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2019-05-08 14:01:51 +0200 |
commit | cfd702a716f834c431abd46532e8cfa4debd1468 (patch) | |
tree | 3b7f76792a5459fb577e0b661c79a0f6135ca884 /test | |
parent | 3e62d24573c91c04eb9af5d7ba47f2c16d1948de (diff) | |
download | gun-cfd702a716f834c431abd46532e8cfa4debd1468.tar.gz gun-cfd702a716f834c431abd46532e8cfa4debd1468.tar.bz2 gun-cfd702a716f834c431abd46532e8cfa4debd1468.zip |
Add event_handler with init/connect_start/connect_end
Diffstat (limited to 'test')
-rw-r--r-- | test/event_SUITE.erl | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/test/event_SUITE.erl b/test/event_SUITE.erl new file mode 100644 index 0000000..383ac46 --- /dev/null +++ b/test/event_SUITE.erl @@ -0,0 +1,124 @@ +%% Copyright (c) 2019, Loïc Hoguin <[email protected]> +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(event_SUITE). +-compile(export_all). +-compile(nowarn_export_all). + +-behavior(gun_event). + +-import(ct_helper, [config/2]). +-import(ct_helper, [doc/1]). + +all() -> + ct_helper:all(?MODULE). + +init_per_suite(Config) -> + {ok, _} = cowboy:start_clear(?MODULE, [], #{env => #{ + dispatch => cowboy_router:compile([{'_', [{"/", ws_echo, []}]}]) + }}), + OriginPort = ranch:get_port(?MODULE), + [{origin_port, OriginPort}|Config]. + +end_per_suite(_) -> + ok = cowboy:stop_listener(?MODULE). + +%% init. + +init(_) -> + doc("Confirm that the init event callback is called."), + Self = self(), + Opts = #{event_handler => {?MODULE, Self}}, + {ok, Pid} = gun:open("localhost", 12345, Opts), + #{ + owner := Self, + transport := tcp, + origin_scheme := <<"http">>, + origin_host := "localhost", + origin_port := 12345, + opts := Opts + } = do_receive_event(?FUNCTION_NAME), + gun:close(Pid). + +%% connect_start/connect_end. + +connect_start(_) -> + doc("Confirm that the connect_start event callback is called."), + Self = self(), + Opts = #{event_handler => {?MODULE, Self}}, + {ok, Pid} = gun:open("localhost", 12345, Opts), + #{ + host := "localhost", + port := 12345, + transport := tcp, + transport_opts := _, + timeout := _ + } = do_receive_event(?FUNCTION_NAME), + gun:close(Pid). + +connect_end_error(_) -> + doc("Confirm that the connect_end event callback is called on connect failure."), + Self = self(), + Opts = #{event_handler => {?MODULE, Self}}, + {ok, Pid} = gun:open("localhost", 12345, Opts), + #{ + host := "localhost", + port := 12345, + transport := tcp, + transport_opts := _, + timeout := _, + error := _ + } = do_receive_event(connect_end), + gun:close(Pid). + +connect_end_ok(Config) -> + doc("Confirm that the connect_end event callback is called on connect success."), + Self = self(), + Opts = #{event_handler => {?MODULE, Self}}, + OriginPort = config(origin_port, Config), + {ok, Pid} = gun:open("localhost", OriginPort, Opts), + #{ + host := "localhost", + port := OriginPort, + transport := tcp, + transport_opts := _, + timeout := _, + socket := _, + protocol := http + } = do_receive_event(connect_end), + gun:close(Pid). + +%% Internal. + +do_receive_event(Event) -> + receive + {Event, EventData} -> + EventData + after 5000 -> + error(timeout) + end. + +%% gun_event callbacks. + +init(EventData, Pid) -> + Pid ! {?FUNCTION_NAME, EventData}, + Pid. + +connect_start(EventData, Pid) -> + Pid ! {?FUNCTION_NAME, EventData}, + Pid. + +connect_end(EventData, Pid) -> + Pid ! {?FUNCTION_NAME, EventData}, + Pid. |