From cfd702a716f834c431abd46532e8cfa4debd1468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Wed, 8 May 2019 14:01:51 +0200 Subject: Add event_handler with init/connect_start/connect_end --- test/event_SUITE.erl | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 test/event_SUITE.erl (limited to 'test/event_SUITE.erl') 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 +%% +%% 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. -- cgit v1.2.3