diff options
Diffstat (limited to 'test/rlx_release_SUITE.erl')
-rw-r--r-- | test/rlx_release_SUITE.erl | 628 |
1 files changed, 263 insertions, 365 deletions
diff --git a/test/rlx_release_SUITE.erl b/test/rlx_release_SUITE.erl index 112afc8..766eb40 100644 --- a/test/rlx_release_SUITE.erl +++ b/test/rlx_release_SUITE.erl @@ -29,6 +29,7 @@ make_scriptless_release/1, make_overridden_release/1, make_skip_app_release/1, + make_exclude_app_release/1, make_auto_skip_empty_app_release/1, make_app_type_none_release/1, make_rerun_overridden_release/1, @@ -40,12 +41,12 @@ make_relup_release/1, make_relup_release2/1, make_one_app_top_level_release/1, - make_dev_mode_release/1]). + make_dev_mode_release/1, + make_config_script_release/1]). -include_lib("common_test/include/ct.hrl"). -include_lib("eunit/include/eunit.hrl"). -include_lib("kernel/include/file.hrl"). --include_lib("kernel/include/file.hrl"). suite() -> [{timetrap,{seconds,30}}]. @@ -58,7 +59,7 @@ end_per_suite(_Config) -> init_per_testcase(_, Config) -> DataDir = proplists:get_value(data_dir, Config), - LibDir1 = filename:join([DataDir, create_random_name("lib_dir1_")]), + LibDir1 = filename:join([DataDir, rlx_test_utils:create_random_name("lib_dir1_")]), ok = rlx_util:mkdir_p(LibDir1), State = rlx_state:new([], [{lib_dirs, [LibDir1]}], [release]), {ok, State1} = rlx_config:do(State), @@ -68,30 +69,32 @@ init_per_testcase(_, Config) -> all() -> [make_release, make_extend_release, make_scriptless_release, make_overridden_release, make_auto_skip_empty_app_release, - make_skip_app_release, make_app_type_none_release, + make_skip_app_release, make_exclude_app_release, make_app_type_none_release, make_implicit_config_release, make_rerun_overridden_release, overlay_release, make_goalless_release, make_depfree_release, make_invalid_config_release, make_relup_release, make_relup_release2, - make_one_app_top_level_release, make_dev_mode_release]. + make_one_app_top_level_release, make_dev_mode_release, + make_config_script_release]. make_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), + [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) + rlx_test_utils:create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) end)(App) - || + || App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], + [{rlx_test_utils:create_random_name("lib_app1_"), rlx_test_utils:create_random_vsn()} + || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [goal_app_1, goal_app_2]}, @@ -99,7 +102,7 @@ make_release(Config) -> [goal_app_1, goal_app_2]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, State} = relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile), [{{foo, "0.0.2"}, Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)), @@ -114,22 +117,15 @@ make_release(Config) -> make_extend_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [goal_app_1, goal_app_2]}, @@ -137,9 +133,9 @@ make_extend_release(Config) -> [goal_app_2]}, {lib_dirs, [filename:join(LibDir1, "*")]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), - ?assertMatch({multiple_release_names,foo_test,foo}, + ?assertMatch({error, {rlx_prv_release, {multiple_release_names,foo_test,foo}}}, catch relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile)), {ok, State} = relx:do(foo_test, undefined, [], [LibDir1], 3, @@ -156,19 +152,12 @@ make_extend_release(Config) -> make_invalid_config_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), ok = ec_file:write(ConfigFile, @@ -176,35 +165,28 @@ make_invalid_config_release(Config) -> [goal_app_1, goal_app_2,]}"), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {error, {rlx_config, {consult, _, _}}} = relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile). make_scriptless_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{generate_start_script, false}, {release, {foo, "0.0.1"}, [goal_app_1, goal_app_2]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, State} = relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile), @@ -223,36 +205,30 @@ make_scriptless_release(Config) -> make_overridden_release(Config) -> DataDir = proplists:get_value(data_dir, Config), - OverrideDir1 = filename:join([DataDir, create_random_name("override_dir_")]), + OverrideDir1 = filename:join([DataDir, rlx_test_utils:create_random_name("override_dir_")]), LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - OverrideApp = create_random_name("override_app"), - OverrideVsn = create_random_vsn(), + + OverrideApp = rlx_test_utils:create_random_name("override_app"), + OverrideVsn = rlx_test_utils:create_random_vsn(), OverrideAppDir = filename:join(OverrideDir1, OverrideApp ++ "-" ++ OverrideVsn), OverrideAppName = erlang:list_to_atom(OverrideApp), - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), - create_app(OverrideDir1, OverrideApp, OverrideVsn, [stdlib,kernel], []), + rlx_test_utils:create_app(OverrideDir1, OverrideApp, OverrideVsn, [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [goal_app_1, erlang:list_to_atom(OverrideApp), goal_app_2]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, Cwd} = file:get_cwd(), {ok, State} = relx:do(Cwd, undefined, undefined, [], [LibDir1], 3, OutputDir, [{OverrideAppName, OverrideAppDir}], @@ -273,27 +249,20 @@ make_overridden_release(Config) -> make_skip_app_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [goal_app_1]}, {skip_apps, [goal_app_2]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, Cwd} = file:get_cwd(), {ok, State} = relx:do(Cwd, undefined, undefined, [], [LibDir1], 3, OutputDir, [], @@ -308,36 +277,57 @@ make_skip_app_release(Config) -> ?assertNot(lists:member({goal_app_2, "0.0.1"}, AppSpecs)), ?assert(lists:member({lib_dep_1, "0.0.1", load}, AppSpecs)). +%% Test to ensure that an excluded app and its deps are not included in a release +make_exclude_app_release(Config) -> + LibDir1 = proplists:get_value(lib1, Config), + + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel, non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel, non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + + ConfigFile = filename:join([LibDir1, "relx.config"]), + rlx_test_utils:write_config(ConfigFile, + [{release, {foo, "0.0.1"}, + [goal_app_1]}, + {exclude_apps, [non_goal_1]}]), + OutputDir = filename:join([proplists:get_value(data_dir, Config), + rlx_test_utils:create_random_name("relx-output")]), + {ok, Cwd} = file:get_cwd(), + {ok, State} = relx:do(Cwd, undefined, undefined, [], [LibDir1], 3, + OutputDir, [], + ConfigFile), + [{{foo, "0.0.1"}, Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)), + AppSpecs = rlx_release:applications(Release), + ?assert(lists:keymember(stdlib, 1, AppSpecs)), + ?assert(lists:keymember(kernel, 1, AppSpecs)), + ?assertNot(lists:member({non_goal_1, "0.0.1"}, AppSpecs)), + ?assertNot(lists:member({non_goal_2, "0.0.1"}, AppSpecs)), + ?assert(lists:member({goal_app_1, "0.0.1"}, AppSpecs)). + make_auto_skip_empty_app_release(Config) -> DataDir = proplists:get_value(data_dir, Config), - EmptyAppDir1 = filename:join([DataDir, create_random_name("skip_app_dir_")]), + EmptyAppDir1 = filename:join([DataDir, rlx_test_utils:create_random_name("skip_app_dir_")]), LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - EmptyAppApp = create_random_name("empty_app_app"), - EmptyAppVsn = create_random_vsn(), + + EmptyAppApp = rlx_test_utils:create_random_name("empty_app_app"), + EmptyAppVsn = rlx_test_utils:create_random_vsn(), EmptyAppAppName = erlang:list_to_atom(EmptyAppApp), - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), - create_empty_app(EmptyAppDir1, EmptyAppApp, EmptyAppVsn, [stdlib,kernel], []), + rlx_test_utils:create_empty_app(EmptyAppDir1, EmptyAppApp, EmptyAppVsn, [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [goal_app_1, goal_app_2]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, Cwd} = file:get_cwd(), {ok, State} = relx:do(Cwd, undefined, undefined, [], [LibDir1], 3, OutputDir, [], @@ -355,27 +345,20 @@ make_auto_skip_empty_app_release(Config) -> make_app_type_none_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [goal_app_1, {goal_app_2, none}]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, Cwd} = file:get_cwd(), {ok, State} = relx:do(Cwd, undefined, undefined, [], [LibDir1], 3, OutputDir, [], @@ -394,27 +377,20 @@ make_implicit_config_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), FooRoot = filename:join([LibDir1, "foodir1", "foodir2"]), filelib:ensure_dir(filename:join([FooRoot, "tmp"])), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [goal_app_1, goal_app_2]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), ok = file:set_cwd(FooRoot), {ok, FooRoot} = file:get_cwd(), {ok, State} = relx:do(undefined, undefined, [], [LibDir1], 3, @@ -432,39 +408,33 @@ make_implicit_config_release(Config) -> make_rerun_overridden_release(Config) -> DataDir = proplists:get_value(data_dir, Config), - OverrideDir1 = filename:join([DataDir, create_random_name("override_dir_")]), + OverrideDir1 = filename:join([DataDir, rlx_test_utils:create_random_name("override_dir_")]), LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - OverrideApp = create_random_name("override_app"), - OverrideVsn = create_random_vsn(), + + OverrideApp = rlx_test_utils:create_random_name("override_app"), + OverrideVsn = rlx_test_utils:create_random_vsn(), OverrideAppDir = filename:join(OverrideDir1, OverrideApp ++ "-" ++ OverrideVsn), OverrideAppName = erlang:list_to_atom(OverrideApp), - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), - create_app(OverrideDir1, OverrideApp, OverrideVsn, [stdlib,kernel], []), + rlx_test_utils:create_app(OverrideDir1, OverrideApp, OverrideVsn, [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), OverlayVars = filename:join([LibDir1, "vars1.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [goal_app_1, erlang:list_to_atom(OverrideApp), goal_app_2]}, {overlay_vars, [OverlayVars]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, Cwd} = file:get_cwd(), {ok, _} = relx:do(Cwd, undefined, undefined, [], [LibDir1], 3, OutputDir, [{OverrideAppName, OverrideAppDir}], @@ -491,30 +461,24 @@ make_rerun_overridden_release(Config) -> overlay_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), OverlayVars1 = filename:join([LibDir1, "vars1.config"]), OverlayVars2 = filename:join([LibDir1, "vars2.config"]), + OverlayVars3 = filename:join([LibDir1, "vars3.config"]), Template = filename:join([LibDir1, "test_template"]), TestDir = "first_test_dir", TestFile = "test_file", TestDirFull = filename:join([LibDir1, TestDir]), TestFileFull = filename:join(TestDirFull, TestFile), SecondTestDir = "second_test_dir", - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{overlay_vars, [OverlayVars1, OverlayVars2]}, {overlay, [{mkdir, "{{target_dir}}/fooo"}, {copy, OverlayVars1, @@ -524,31 +488,38 @@ overlay_release(Config) -> {copy, TestDirFull, "{{target_dir}}/"++SecondTestDir++"/"}, {template, Template, - "{{target_dir}}/test_template_resolved"}]}, + "{{target_dir}}/test_template_resolved"}, + {template, Template, + "bin/{{default_release_name}}-{{default_release_version}}"}]}, {release, {foo, "0.0.1"}, [goal_app_1, goal_app_2]}]), VarsFile1 = filename:join([LibDir1, "vars1.config"]), - write_config(VarsFile1, [{yahoo, "yahoo"}, + rlx_test_utils:write_config(VarsFile1, [{yahoo, "yahoo"}, {yahoo2, [{foo, "bar"}]}, {yahoo3, [{bar, "{{yahoo}}/{{yahoo2.foo}}"}]}, {foo_dir, "foodir"}]), VarsFile2 = filename:join([LibDir1, "vars2.config"]), - write_config(VarsFile2, [{google, "yahoo"}, - {yahoo2, [{foo, "foo"}]}]), + rlx_test_utils:write_config(VarsFile2, [{google, "yahoo"}, + {yahoo2, [{foo, "foo"}]}, + OverlayVars3]), + + VarsFile3 = filename:join([LibDir1, "vars3.config"]), + rlx_test_utils:write_config(VarsFile3, [{google, "yahoo"}, + {yahoo4, [{foo, "{{yahoo}}/{{yahoo2.foo}}4"}]}]), ok = rlx_util:mkdir_p(TestDirFull), - ok = file:write_file(TestFileFull, test_template_contents()), + ok = file:write_file(TestFileFull, rlx_test_utils:test_template_contents()), TemplateFile = filename:join([LibDir1, "test_template"]), - ok = file:write_file(TemplateFile, test_template_contents()), + ok = file:write_file(TemplateFile, rlx_test_utils:test_template_contents()), {ok, FileInfo} = file:read_file_info(TemplateFile), ok = file:write_file_info(TemplateFile, FileInfo#file_info{mode=8#00777}), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, State} = relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile), @@ -639,57 +610,45 @@ overlay_release(Config) -> proplists:get_value(foo_dir, TemplateData)), ?assertEqual("yahoo/foo", proplists:get_value(yahoo3, TemplateData)), + ?assertEqual("yahoo/foo4", + proplists:get_value(yahoo4, TemplateData)), ?assertEqual("yahoo", proplists:get_value(google, TemplateData)). make_goalless_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, []}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), ?assertMatch({error,{rlx_prv_release,no_goals_specified}}, relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile)). make_depfree_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [kernel,stdlib], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [kernel,stdlib], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [kernel,stdlib], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [kernel,stdlib], []), - create_app(LibDir1, "non_goal_2", "0.0.1", [kernel,stdlib], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [kernel,stdlib], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [kernel,stdlib], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [kernel,stdlib], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [kernel,stdlib], []), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [kernel,stdlib], []), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [goal_app_1]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, State} = relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile), [{{foo, "0.0.1"}, Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)), @@ -699,29 +658,22 @@ make_depfree_release(Config) -> make_relup_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "goal_app_1", "0.0.2", [stdlib,kernel,non_goal_1], []), - {ok, GA1} = create_app(LibDir1, "goal_app_1", "0.0.3", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "goal_app_2", "0.0.2", [stdlib,kernel,goal_app_1,non_goal_2], []), - {ok, GA2} = create_app(LibDir1, "goal_app_2", "0.0.3", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), - - write_appup_file(GA1, "0.0.2"), - write_appup_file(GA2, "0.0.2"), + + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.2", [stdlib,kernel,non_goal_1], []), + {ok, GA1} = rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.3", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.2", [stdlib,kernel,goal_app_1,non_goal_2], []), + {ok, GA2} = rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.3", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + + rlx_test_utils:write_appup_file(GA1, "0.0.2"), + rlx_test_utils:write_appup_file(GA2, "0.0.2"), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [sasl, {goal_app_1, "0.0.1"}, @@ -735,11 +687,18 @@ make_relup_release(Config) -> {goal_app_1, "0.0.3"}, {goal_app_2, "0.0.3"}]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, _} = relx:do(foo, "0.0.1", [], [LibDir1], 3, - OutputDir, ConfigFile), + OutputDir, ConfigFile), + {ok, _} = relx:do(foo, "0.0.2", [], [LibDir1], 3, - OutputDir, ConfigFile), + OutputDir, ConfigFile), + + %% Goal apps are removed to simulate a users dev environment where the apps + %% being used in an appup/relup are likely only under _rel/<release>/lib/ + ec_file:remove(filename:join(LibDir1, "goal_app_1-0.0.1"), [recursive]), + ec_file:remove(filename:join(LibDir1, "goal_app_1-0.0.2"), [recursive]), + {ok, State} = relx:do([{relname, foo}, {relvsn, "0.0.3"}, {goals, []}, @@ -779,29 +738,22 @@ make_relup_release(Config) -> make_relup_release2(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "goal_app_1", "0.0.2", [stdlib,kernel,non_goal_1], []), - {ok, GA1} = create_app(LibDir1, "goal_app_1", "0.0.3", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "goal_app_2", "0.0.2", [stdlib,kernel,goal_app_1,non_goal_2], []), - {ok, GA2} = create_app(LibDir1, "goal_app_2", "0.0.3", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), - - write_appup_file(GA1, "0.0.1"), - write_appup_file(GA2, "0.0.1"), + + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.2", [stdlib,kernel,non_goal_1], []), + {ok, GA1} = rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.3", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.2", [stdlib,kernel,goal_app_1,non_goal_2], []), + {ok, GA2} = rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.3", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + + rlx_test_utils:write_appup_file(GA1, "0.0.1"), + rlx_test_utils:write_appup_file(GA2, "0.0.1"), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [sasl, {goal_app_1, "0.0.1"}, @@ -815,19 +767,19 @@ make_relup_release2(Config) -> {goal_app_1, "0.0.3"}, {goal_app_2, "0.0.3"}]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, _} = relx:do(foo, "0.0.1", [], [LibDir1], 3, OutputDir, ConfigFile), {ok, _} = relx:do(foo, "0.0.2", [], [LibDir1], 3, OutputDir, ConfigFile), {ok, State} = relx:do([{relname, foo}, - {relvsn, "0.0.3"}, - {upfrom, "0.0.1"}, - {goals, []}, - {lib_dirs, [LibDir1]}, - {log_level, 3}, - {output_dir, OutputDir}, - {config, ConfigFile}], ["release", "relup"]), + {relvsn, "0.0.3"}, + {upfrom, "0.0.1"}, + {goals, []}, + {lib_dirs, [LibDir1]}, + {log_level, 3}, + {output_dir, OutputDir}, + {config, ConfigFile}], ["release", "relup"]), %% we should have one 'resolved' release and three discovered realized_releases. ?assertMatch([{foo, "0.0.1"}, @@ -860,15 +812,15 @@ make_relup_release2(Config) -> make_one_app_top_level_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - {ok, AppInfo} = create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel], []), + {ok, AppInfo} = rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel], []), AppDir = rlx_app_info:dir(AppInfo), ConfigFile = filename:join([AppDir, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{release, {foo, "0.0.1"}, [{goal_app_1, "0.0.1"}]}]), OutputDir = filename:join([AppDir, - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, Cwd} = file:get_cwd(), ok = file:set_cwd(AppDir), @@ -883,28 +835,21 @@ make_one_app_top_level_release(Config) -> make_dev_mode_release(Config) -> LibDir1 = proplists:get_value(lib1, Config), - [(fun({Name, Vsn}) -> - create_app(LibDir1, Name, Vsn, [kernel, stdlib], []) - end)(App) - || - App <- - [{create_random_name("lib_app1_"), create_random_vsn()} - || _ <- lists:seq(1, 100)]], - create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), - create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), - create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), - create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), - create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), SysConfig = filename:join([LibDir1, "config", "sys.config"]), - write_config(SysConfig, [{this_is_a_test, "yup it is"}]), + rlx_test_utils:write_config(SysConfig, [{this_is_a_test, "yup it is"}]), VmArgs = filename:join([LibDir1, "config", "vm.args"]), ec_file:write(VmArgs, ""), ConfigFile = filename:join([LibDir1, "relx.config"]), - write_config(ConfigFile, + rlx_test_utils:write_config(ConfigFile, [{dev_mode, true}, {sys_config, SysConfig}, {vm_args, VmArgs}, @@ -912,7 +857,7 @@ make_dev_mode_release(Config) -> [goal_app_1, goal_app_2]}]), OutputDir = filename:join([proplists:get_value(data_dir, Config), - create_random_name("relx-output")]), + rlx_test_utils:create_random_name("relx-output")]), {ok, State} = relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile), [{{foo, "0.0.1"}, _Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)), @@ -927,99 +872,52 @@ make_dev_mode_release(Config) -> ?assert(ec_file:is_symlink(filename:join([OutputDir, "foo", "releases", "0.0.1", "vm.args"]))). +make_config_script_release(Config) -> + LibDir1 = proplists:get_value(lib1, Config), + FooRoot = filename:join([LibDir1, "foodir1", "foodir2"]), + filelib:ensure_dir(filename:join([FooRoot, "tmp"])), + + rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []), + rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []), + rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []), + rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]), + rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []), + + ConfigFile = filename:join([LibDir1, "relx.config"]), + rlx_test_utils:write_config(ConfigFile, + [{release, {foo, "0.0.1"}, + [goal_app_1, + goal_app_2]}]), + ConfigScriptFile = filename:join([LibDir1, "relx.config.script"]), + ok = file:write_file(ConfigScriptFile, + "case os:getenv(\"RELX_TEST\") of\n" + " \"true\" ->\n" + " {release, {RelName, Version}, Apps} = lists:keyfind(release, 1, CONFIG),\n" + " lists:keyreplace(release, 1, CONFIG, {release, {RelName, \"0.0.2\"}, Apps});\n" + " _ -> CONFIG % env var not defined or anything other than true\n" + "end.\n"), + + OutputDir = filename:join([proplists:get_value(data_dir, Config), + rlx_test_utils:create_random_name("relx-output")]), + ok = file:set_cwd(FooRoot), + {ok, FooRoot} = file:get_cwd(), + + % set the env var that will cause relx.config to be altered by the config script + os:putenv("RELX_TEST", "true"), + + {ok, State} = relx:do(undefined, undefined, [], [LibDir1], 3, + OutputDir, undefined), + [{{foo, "0.0.2"}, Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)), + ?assert(ec_file:exists(OutputDir)), + AppSpecs = rlx_release:applications(Release), + ?assert(lists:keymember(stdlib, 1, AppSpecs)), + ?assert(lists:keymember(kernel, 1, AppSpecs)), + ?assert(lists:member({non_goal_1, "0.0.1"}, AppSpecs)), + ?assert(lists:member({non_goal_2, "0.0.1"}, AppSpecs)), + ?assert(lists:member({goal_app_1, "0.0.1"}, AppSpecs)), + ?assert(lists:member({goal_app_2, "0.0.1"}, AppSpecs)), + ?assert(lists:member({lib_dep_1, "0.0.1", load}, AppSpecs)). %%%=================================================================== %%% Helper Functions %%%=================================================================== - -create_app(Dir, Name, Vsn, Deps, LibDeps) -> - AppDir = filename:join([Dir, Name ++ "-" ++ Vsn]), - write_app_file(AppDir, Name, Vsn, Deps, LibDeps), - write_beam_file(AppDir, Name), - rlx_app_info:new(erlang:list_to_atom(Name), Vsn, AppDir, - Deps, []). - -create_empty_app(Dir, Name, Vsn, Deps, LibDeps) -> - AppDir = filename:join([Dir, Name ++ "-" ++ Vsn]), - write_app_file(AppDir, Name, Vsn, Deps, LibDeps), - rlx_app_info:new(erlang:list_to_atom(Name), Vsn, AppDir, - Deps, []). - -write_beam_file(Dir, Name) -> - Beam = filename:join([Dir, "ebin", "not_a_real_beam" ++ Name ++ ".beam"]), - ok = filelib:ensure_dir(Beam), - ok = ec_file:write_term(Beam, testing_purposes_only). - -write_appup_file(AppInfo, DownVsn) -> - Dir = rlx_app_info:dir(AppInfo), - Name = rlx_util:to_string(rlx_app_info:name(AppInfo)), - Vsn = rlx_app_info:vsn_as_string(AppInfo), - Filename = filename:join([Dir, "ebin", Name ++ ".appup"]), - ok = filelib:ensure_dir(Filename), - ok = ec_file:write_term(Filename, {Vsn, [{DownVsn, []}], [{DownVsn, []}]}). - -write_app_file(Dir, Name, Version, Deps, LibDeps) -> - Filename = filename:join([Dir, "ebin", Name ++ ".app"]), - ok = filelib:ensure_dir(Filename), - ok = ec_file:write_term(Filename, get_app_metadata(Name, Version, Deps, LibDeps)). - -get_app_metadata(Name, Vsn, Deps, LibDeps) -> - {application, erlang:list_to_atom(Name), - [{description, ""}, - {vsn, Vsn}, - {modules, []}, - {included_applications, LibDeps}, - {registered, []}, - {applications, Deps}]}. - -create_random_name(Name) -> - random:seed(erlang:now()), - Name ++ erlang:integer_to_list(random:uniform(1000000)). - -create_random_vsn() -> - random:seed(erlang:now()), - lists:flatten([erlang:integer_to_list(random:uniform(100)), - ".", erlang:integer_to_list(random:uniform(100)), - ".", erlang:integer_to_list(random:uniform(100))]). - -write_config(Filename, Values) -> - ok = filelib:ensure_dir(Filename), - ok = ec_file:write(Filename, - [io_lib:format("~p.\n", [Val]) || Val <- Values]). - -test_template_contents() -> - "{erts_vsn, \"{{erts_vsn}}\"}.\n" - "{release_erts_version, \"{{release_erts_version}}\"}.\n" - "{release_name, {{release_name}}}.\n" - "{rel_vsn, \"{{release_version}}\"}.\n" - "{release_version, \"{{release_version}}\"}.\n" - "{release_applications, [{{ release_applications|join:\", \" }}]}.\n" - "{std_version, \"{{release.stdlib.version}}\"}.\n" - "{kernel_version, \"{{release.kernel.version}}\"}.\n" - "{non_goal_1_version, \"{{release.non_goal_1.version}}\"}.\n" - "{non_goal_2_version, \"{{release.non_goal_2.version}}\"}.\n" - "{goal_app_1_version, \"{{release.goal_app_1.version}}\"}.\n" - "{goal_app_2_version, \"{{release.goal_app_2.version}}\"}.\n" - "{lib_dep_1, \"{{release.lib_dep_1.version}}\"}.\n" - "{lib_dep_1_dir, \"{{release.lib_dep_1.dir}}\"}.\n" - "{lib_dep_1_active, [{{ release.lib_dep_1.active_dependencies|join:\", \" }}]}.\n" - "{lib_dep_1_library, [{{ release.lib_dep_1.library_dependencies|join:\", \" }}]}.\n" - "{lib_dep_1_link, \"{{release.lib_dep_1.link}}\"}.\n" - "{log, \"{{log}}\"}.\n" - "{output_dir, \"{{output_dir}}\"}.\n" - "{target_dir, \"{{target_dir}}\"}.\n" - "{overridden, [{{ overridden|join:\", \" }}]}.\n" - "{goals, [\"{{ goals|join:\", \" }}\"]}.\n" - "{lib_dirs, [\"{{ lib_dirs|join:\", \" }}\"]}.\n" - "{config_file, \"{{ config_file }}\"}.\n" - "{providers, [{{ providers|join:\", \" }}]}.\n" - "{sys_config, \"{{sys_config}}\"}.\n" - "{root_dir, \"{{root_dir}}\"}.\n" - "{default_release_name, {{default_release_name}}}.\n" - "{default_release_version, \"{{default_release_version}}\"}.\n" - "{default_release, \"{{default_release}}\"}.\n" - "{yahoo, \"{{yahoo}}\"}.\n" - "{yahoo2_foo, \"{{yahoo2.foo}}\"}.\n" - "{foo_dir, \"{{foo_dir}}\"}.\n" - "{yahoo3, \"{{yahoo3.bar}}\"}.\n" - "{google, \"{{google}}\"}.\n". |