aboutsummaryrefslogtreecommitdiffstats
path: root/test/req_SUITE.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2017-10-29 19:52:27 +0000
committerLoïc Hoguin <[email protected]>2017-10-29 21:03:04 +0000
commitf3d6b05b863fe177a34a8a6ba48c5f263ef8cf82 (patch)
treefc3235ad43880f29186bce373a3c79057c83e060 /test/req_SUITE.erl
parentf4331f7c169309c9017b9628fe3757fc5312270b (diff)
downloadcowboy-f3d6b05b863fe177a34a8a6ba48c5f263ef8cf82.tar.gz
cowboy-f3d6b05b863fe177a34a8a6ba48c5f263ef8cf82.tar.bz2
cowboy-f3d6b05b863fe177a34a8a6ba48c5f263ef8cf82.zip
Add cowboy_req:inform/2,3
User code can now send as many 1xx responses as necessary.
Diffstat (limited to 'test/req_SUITE.erl')
-rw-r--r--test/req_SUITE.erl41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/req_SUITE.erl b/test/req_SUITE.erl
index 26ced62..2d1fe38 100644
--- a/test/req_SUITE.erl
+++ b/test/req_SUITE.erl
@@ -114,6 +114,30 @@ do_get_body(Path, Config) ->
do_get_body(Path, Headers, Config) ->
do_body("GET", Path, Headers, Config).
+do_get_inform(Path, Config) ->
+ ConnPid = gun_open(Config),
+ Ref = gun:get(ConnPid, Path, [{<<"accept-encoding">>, <<"gzip">>}]),
+ case gun:await(ConnPid, Ref) of
+ {response, _, RespStatus, RespHeaders} ->
+ %% We don't care about the body.
+ gun:close(ConnPid),
+ {RespStatus, RespHeaders};
+ {inform, InfoStatus, InfoHeaders} ->
+ {response, IsFin, RespStatus, RespHeaders}
+ = case gun:await(ConnPid, Ref) of
+ {inform, InfoStatus, InfoHeaders} ->
+ gun:await(ConnPid, Ref);
+ Response ->
+ Response
+ end,
+ {ok, RespBody} = case IsFin of
+ nofin -> gun:await_body(ConnPid, Ref);
+ fin -> {ok, <<>>}
+ end,
+ gun:close(ConnPid),
+ {InfoStatus, InfoHeaders, RespStatus, RespHeaders, do_decode(RespHeaders, RespBody)}
+ end.
+
do_decode(Headers, Body) ->
case lists:keyfind(<<"content-encoding">>, 1, Headers) of
{_, <<"gzip">>} -> zlib:gunzip(Body);
@@ -703,6 +727,23 @@ delete_resp_header(Config) ->
false = lists:keymember(<<"content-type">>, 1, Headers),
ok.
+inform2(Config) ->
+ doc("Informational response(s) without headers, followed by the real response."),
+ {102, [], 200, _, _} = do_get_inform("/resp/inform2/102", Config),
+ {102, [], 200, _, _} = do_get_inform("/resp/inform2/binary", Config),
+ {500, _} = do_get_inform("/resp/inform2/error", Config),
+ {102, [], 200, _, _} = do_get_inform("/resp/inform2/twice", Config),
+ ok.
+
+inform3(Config) ->
+ doc("Informational response(s) with headers, followed by the real response."),
+ Headers = [{<<"ext-header">>, <<"ext-value">>}],
+ {102, Headers, 200, _, _} = do_get_inform("/resp/inform3/102", Config),
+ {102, Headers, 200, _, _} = do_get_inform("/resp/inform3/binary", Config),
+ {500, _} = do_get_inform("/resp/inform3/error", Config),
+ {102, Headers, 200, _, _} = do_get_inform("/resp/inform3/twice", Config),
+ ok.
+
reply2(Config) ->
doc("Response with default headers and no body."),
{200, _, _} = do_get("/resp/reply2/200", Config),