From ee9ad07748b823f4e2d951b1c5bba8310ff09bb4 Mon Sep 17 00:00:00 2001 From: Guilherme Andrade Date: Thu, 15 Aug 2019 20:31:42 +0100 Subject: Allow for API callers to define arbitrary overlay variables --- test/rlx_release_SUITE.erl | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'test/rlx_release_SUITE.erl') diff --git a/test/rlx_release_SUITE.erl b/test/rlx_release_SUITE.erl index d7340de..b6289d6 100644 --- a/test/rlx_release_SUITE.erl +++ b/test/rlx_release_SUITE.erl @@ -818,12 +818,15 @@ overlay_release(Config) -> goal_app_2]}]), VarsFile1 = filename:join([LibDir1, "vars1.config"]), - %% tpl_var is defined in vars1, but redifined in vars2 using template. + ProfileString = "prod-v5", + %% `tpl_var' is defined in vars1, but redifined in vars2 using template. + %% `profile_string' is to be injected as an API caller overlay var rlx_test_utils:write_config(VarsFile1, [{yahoo, "yahoo"}, {yahoo2, [{foo, "bar"}]}, {foo_yahoo, "foo_{{yahoo}}"}, {foo_dir, "foodir"}, - {tpl_var, "defined in vars1"}]), + {tpl_var, "defined in vars1"}, + {profile_string_value, "{{profile_string}}"}]), VarsFile2 = filename:join([LibDir1, "vars2.config"]), rlx_test_utils:write_config(VarsFile2, [{google, "yahoo"}, @@ -851,8 +854,16 @@ overlay_release(Config) -> OutputDir = filename:join([proplists:get_value(priv_dir, Config), rlx_test_utils:create_random_name("relx-output")]), - {ok, State} = relx:do(undefined, undefined, [], [LibDir1], 3, - OutputDir, ConfigFile), + ApiCallerOverlays = [{profile_string, ProfileString}], + {ok, State} = relx:do([{relname, undefined}, + {relvsn, undefined}, + {goals, []}, + {lib_dirs, [LibDir1]}, + {log_level, 3}, + {output_dir, OutputDir}, + {config, ConfigFile}, + {api_caller_overlays, ApiCallerOverlays}], + ["release"]), [{{foo, "0.0.1"}, Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)), AppSpecs = rlx_release:applications(Release), @@ -902,7 +913,9 @@ overlay_release(Config) -> %% This should be rendered correctly based on VarsFile2 file, regardless %% of tpl_var defined in VarsFile1 or not. ?assertEqual("Redefined in vars2 with a template value", - proplists:get_value(tpl_var, TemplateData)). + proplists:get_value(tpl_var, TemplateData)), + ?assertEqual(ProfileString, + proplists:get_value(profile_string_value, TemplateData)). make_goalless_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), -- cgit v1.2.3 From 460645219de1fea56e2d6885ec1ce355232c63e4 Mon Sep 17 00:00:00 2001 From: Guilherme Andrade Date: Sat, 17 Aug 2019 14:49:29 +0100 Subject: Keep expected overlay behaviour - make API overlays the lesser authority --- test/rlx_release_SUITE.erl | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'test/rlx_release_SUITE.erl') diff --git a/test/rlx_release_SUITE.erl b/test/rlx_release_SUITE.erl index b6289d6..a2aab71 100644 --- a/test/rlx_release_SUITE.erl +++ b/test/rlx_release_SUITE.erl @@ -818,15 +818,14 @@ overlay_release(Config) -> goal_app_2]}]), VarsFile1 = filename:join([LibDir1, "vars1.config"]), - ProfileString = "prod-v5", %% `tpl_var' is defined in vars1, but redifined in vars2 using template. - %% `profile_string' is to be injected as an API caller overlay var + %% `api_caller_var' is to be injected as an API caller overlay var. rlx_test_utils:write_config(VarsFile1, [{yahoo, "yahoo"}, {yahoo2, [{foo, "bar"}]}, {foo_yahoo, "foo_{{yahoo}}"}, {foo_dir, "foodir"}, {tpl_var, "defined in vars1"}, - {profile_string_value, "{{profile_string}}"}]), + {api_caller_var, "{{api_caller_var}}"}]), VarsFile2 = filename:join([LibDir1, "vars2.config"]), rlx_test_utils:write_config(VarsFile2, [{google, "yahoo"}, @@ -854,7 +853,16 @@ overlay_release(Config) -> OutputDir = filename:join([proplists:get_value(priv_dir, Config), rlx_test_utils:create_random_name("relx-output")]), - ApiCallerOverlays = [{profile_string, ProfileString}], + ApiCallerVarValue = "api-caller-var", + ApiCallerReleaseNameValue = "release-var-conflict", + ApiCallerConfigFileValue = "state-var-conflict", + ApiCallerYahooValue = "overlays-file-conflict", + ApiCallerOverlays = + [{api_caller_var, ApiCallerVarValue}, + {release_name, ApiCallerReleaseNameValue}, + {config_file, ApiCallerConfigFileValue}, + {yahoo, ApiCallerYahooValue}], + {ok, State} = relx:do([{relname, undefined}, {relvsn, undefined}, {goals, []}, @@ -900,6 +908,8 @@ overlay_release(Config) -> proplists:get_value(release_version, TemplateData)), ?assertEqual(foo, proplists:get_value(release_name, TemplateData)), + ?assertMatch(ConfigFile, + proplists:get_value(config_file, TemplateData)), ?assertEqual("yahoo/foo4", proplists:get_value(yahoo4, TemplateData)), ?assertEqual("foo_yahoo", @@ -914,8 +924,18 @@ overlay_release(Config) -> %% of tpl_var defined in VarsFile1 or not. ?assertEqual("Redefined in vars2 with a template value", proplists:get_value(tpl_var, TemplateData)), - ?assertEqual(ProfileString, - proplists:get_value(profile_string_value, TemplateData)). + + ?assertEqual(ApiCallerVarValue, + proplists:get_value(api_caller_var, TemplateData)), + % The following complements a few of the assertions above + % by ensuring that the values of the overwritten API caller + % overlays were distinct from their internal values. + ?assertNotEqual(ApiCallerReleaseNameValue, + proplists:get_value(release_name, TemplateData)), + ?assertNotEqual(ApiCallerConfigFileValue, + proplists:get_value(config_file, TemplateData)), + ?assertNotEqual(ApiCallerYahooValue, + proplists:get_value(yahoo, TemplateData)). make_goalless_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), -- cgit v1.2.3