0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-15 12:40:25 +00:00
cowboy/test/handlers/compress_h.erl
Steve Domin 09bf1199aa
Add compress_threshold protocol option
Currently the compression threshold is set to 300 and hardcoded in the
codebase. There are cases where it make sense to allow this to be
configured, for instance when you want to enforce all responses to be
compressed regarldess of their size.
2018-10-31 17:05:11 +01:00

39 lines
1.3 KiB
Erlang

%% This module sends a response body of varying sizes to test
%% the cowboy_compress_h stream handler.
-module(compress_h).
-export([init/2]).
init(Req0, State=reply) ->
Req = case cowboy_req:binding(what, Req0) of
<<"small">> ->
cowboy_req:reply(200, #{}, lists:duplicate(100, $a), Req0);
<<"large">> ->
cowboy_req:reply(200, #{}, lists:duplicate(100000, $a), Req0);
<<"over-threshold">> ->
cowboy_req:reply(200, #{}, lists:duplicate(200, $a), Req0);
<<"content-encoding">> ->
cowboy_req:reply(200, #{<<"content-encoding">> => <<"compress">>},
lists:duplicate(100000, $a), Req0);
<<"sendfile">> ->
AppFile = code:where_is_file("cowboy.app"),
Size = filelib:file_size(AppFile),
cowboy_req:reply(200, #{}, {sendfile, 0, Size, AppFile}, Req0)
end,
{ok, Req, State};
init(Req0, State=stream_reply) ->
Req = case cowboy_req:binding(what, Req0) of
<<"large">> ->
stream_reply(#{}, Req0);
<<"content-encoding">> ->
stream_reply(#{<<"content-encoding">> => <<"compress">>}, Req0)
end,
{ok, Req, State}.
stream_reply(Headers, Req0) ->
Data = lists:duplicate(10000, $a),
Req = cowboy_req:stream_reply(200, Headers, Req0),
_ = [cowboy_req:stream_body(Data, nofin, Req) || _ <- lists:seq(1,9)],
cowboy_req:stream_body(Data, fin, Req),
Req.