%% Copyright (c) 2017, 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(gun_SUITE). -compile(export_all). -import(ct_helper, [doc/1]). all() -> ct_helper:all(?MODULE). connect_timeout(_) -> doc("Ensure an integer value for connect_timeout is accepted."), {ok, Pid} = gun:open("localhost", 12345, #{connect_timeout => 1000, retry => 0}), Ref = monitor(process, Pid), receive {'DOWN', Ref, process, Pid, {gone, _}} -> ok after 5000 -> error(timeout) end. connect_timeout_infinity(_) -> doc("Ensure infinity for connect_timeout is accepted."), {ok, Pid} = gun:open("localhost", 12345, #{connect_timeout => infinity, retry => 0}), Ref = monitor(process, Pid), receive {'DOWN', Ref, process, Pid, {gone, _}} -> ok after 5000 -> error(timeout) end. gone_reason(_) -> doc("The last connection failure must be propagated."), {ok, Pid} = gun:open("localhost", 12345, #{retry => 0}), Ref = monitor(process, Pid), receive {'DOWN', Ref, process, Pid, {gone, econnrefused}} -> ok after 200 -> error(timeout) end. retry_0(_) -> doc("Ensure Gun gives up immediately with retry=0."), {ok, Pid} = gun:open("localhost", 12345, #{retry => 0, retry_timeout => 500}), Ref = monitor(process, Pid), receive {'DOWN', Ref, process, Pid, {gone, _}} -> ok after 200 -> error(timeout) end. retry_1(_) -> doc("Ensure Gun gives up with retry=1."), {ok, Pid} = gun:open("localhost", 12345, #{retry => 1, retry_timeout => 500}), Ref = monitor(process, Pid), receive {'DOWN', Ref, process, Pid, {gone, _}} -> ok after 700 -> error(timeout) end. retry_timeout(_) -> doc("Ensure the retry_timeout value is enforced."), {ok, Pid} = gun:open("localhost", 12345, #{retry => 1, retry_timeout => 1000}), Ref = monitor(process, Pid), receive {'DOWN', Ref, process, Pid, {gone, _}} -> error(gone_too_early) after 800 -> ok end, receive {'DOWN', Ref, process, Pid, {gone, _}} -> ok after 400 -> error(gone_too_late) end.