0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 04:10:24 +00:00

REST: Allow generate_etag to return undefined

This allows conditionally generating an etag.
This commit is contained in:
Loïc Hoguin 2024-01-16 16:28:52 +01:00
parent ec12c2f051
commit defce46fdf
No known key found for this signature in database
GPG key ID: 8A9DF795F6FED764
4 changed files with 29 additions and 2 deletions

View file

@ -34,6 +34,9 @@ generate_etag(Req=#{qs := <<"binary-weak-unquoted">>}, State) ->
generate_etag(Req=#{qs := <<"binary-strong-unquoted">>}, State) ->
ct_helper_error_h:ignore(cow_http_hd, parse_etag, 1),
{<<"etag-header-value">>, Req, State};
%% Returning 'undefined' to indicate no etag.
generate_etag(Req=#{qs := <<"undefined">>}, State) ->
{undefined, Req, State};
%% Simulate the callback being missing in other cases.
generate_etag(#{qs := <<"missing">>}, _) ->
no_call.

View file

@ -571,6 +571,17 @@ generate_etag_missing(Config) ->
false = lists:keyfind(<<"etag">>, 1, Headers),
ok.
generate_etag_undefined(Config) ->
doc("The etag header must not be sent when "
"the generate_etag callback returns undefined."),
ConnPid = gun_open(Config),
Ref = gun:get(ConnPid, "/generate_etag?undefined", [
{<<"accept-encoding">>, <<"gzip">>}
]),
{response, _, 200, Headers} = gun:await(ConnPid, Ref),
false = lists:keyfind(<<"etag">>, 1, Headers),
ok.
generate_etag_binary_strong(Config) ->
doc("The etag header must be sent when the generate_etag "
"callback returns a strong binary. (RFC7232 2.3)"),