diff options
-rw-r--r-- | src/cowboy.erl | 2 | ||||
-rw-r--r-- | test/misc_SUITE.erl | 20 |
2 files changed, 19 insertions, 3 deletions
diff --git a/src/cowboy.erl b/src/cowboy.erl index f01bcf4..99615de 100644 --- a/src/cowboy.erl +++ b/src/cowboy.erl @@ -68,6 +68,6 @@ stop_listener(Ref) -> -spec set_env(ranch:ref(), atom(), any()) -> ok. set_env(Ref, Name, Value) -> Opts = ranch:get_protocol_options(Ref), - {_, Env} = maps:find(env, Opts), + Env = maps:get(env, Opts, #{}), Opts2 = maps:put(env, maps:put(Name, Value, Env), Opts), ok = ranch:set_protocol_options(Ref, Opts2). diff --git a/test/misc_SUITE.erl b/test/misc_SUITE.erl index 87e7189..a848e44 100644 --- a/test/misc_SUITE.erl +++ b/test/misc_SUITE.erl @@ -20,11 +20,14 @@ -import(cowboy_test, [gun_open/1]). all() -> - cowboy_test:common_all(). + [{group, no_env}|cowboy_test:common_all()]. groups() -> - cowboy_test:common_groups(ct_helper:all(?MODULE)). + Common = ct_helper:all(?MODULE) -- [set_env_missing], + [{no_env, [], [set_env_missing]}|cowboy_test:common_groups(Common)]. +init_per_group(Name=no_env, Config) -> + cowboy_test:init_http(Name, #{}, Config); init_per_group(Name, Config) -> cowboy_test:init_common_groups(Name, Config, ?MODULE). @@ -48,3 +51,16 @@ set_env(Config) -> Ref2 = gun:get(ConnPid2, "/"), {response, _, 400, _} = gun:await(ConnPid2, Ref2), ok. + +set_env_missing(Config) -> + doc("Live replace a middleware environment value when env was not provided."), + ConnPid1 = gun_open(Config), + Ref1 = gun:get(ConnPid1, "/"), + {response, _, 500, _} = gun:await(ConnPid1, Ref1), + Listener = proplists:get_value(name, config(tc_group_properties, Config)), + cowboy:set_env(Listener, dispatch, []), + %% Only new connections get the updated environment. + ConnPid2 = gun_open(Config), + Ref2 = gun:get(ConnPid2, "/"), + {response, _, 400, _} = gun:await(ConnPid2, Ref2), + ok. |