diff options
-rw-r--r-- | src/gun.erl | 4 | ||||
-rw-r--r-- | test/ws_SUITE.erl | 11 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/gun.erl b/src/gun.erl index 047aa18..bd4ce3d 100644 --- a/src/gun.erl +++ b/src/gun.erl @@ -920,7 +920,7 @@ ws_upgrade(ServerPid, Path) -> -spec ws_upgrade(pid(), iodata(), req_headers()) -> stream_ref(). ws_upgrade(ServerPid, Path, Headers) -> StreamRef = make_ref(), - gen_statem:cast(ServerPid, {ws_upgrade, self(), StreamRef, Path, Headers}), + gen_statem:cast(ServerPid, {ws_upgrade, self(), StreamRef, Path, normalize_headers(Headers)}), StreamRef. -spec ws_upgrade(pid(), iodata(), req_headers(), ws_opts()) -> stream_ref(). @@ -929,7 +929,7 @@ ws_upgrade(ServerPid, Path, Headers, Opts) -> StreamRef = make_ref(), ReplyTo = maps:get(reply_to, Opts, self()), %% @todo Also accept tunnel option. - gen_statem:cast(ServerPid, {ws_upgrade, ReplyTo, StreamRef, Path, Headers, Opts}), + gen_statem:cast(ServerPid, {ws_upgrade, ReplyTo, StreamRef, Path, normalize_headers(Headers), Opts}), StreamRef. %% @todo ws_send/2 will need to be deprecated in favor of a variant with StreamRef. diff --git a/test/ws_SUITE.erl b/test/ws_SUITE.erl index d4413fb..c04acc2 100644 --- a/test/ws_SUITE.erl +++ b/test/ws_SUITE.erl @@ -70,6 +70,17 @@ error_http10_upgrade(Config) -> error(timeout) end. +headers_normalized_upgrade(Config) -> + doc("Headers passed to ws_upgrade are normalized before being used."), + {ok, ConnPid} = gun:open("localhost", config(port, Config)), + {ok, _} = gun:await_up(ConnPid), + StreamRef = gun:ws_upgrade(ConnPid, "/", #{ + atom_header_name => <<"value">>, + "string_header_name" => <<"value">> + }), + {upgrade, [<<"websocket">>], _} = gun:await(ConnPid, StreamRef), + gun:close(ConnPid). + error_http_request(Config) -> doc("Ensure that requests are rejected while using Websocket."), {ok, ConnPid} = gun:open("localhost", config(port, Config)), |