aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorTristan Sloughter <[email protected]>2016-11-26 11:14:03 -0800
committerGitHub <[email protected]>2016-11-26 11:14:03 -0800
commit81aa66f952f494568428ff8f547e29b92117b776 (patch)
tree3f73ccce546074bdb7c3f1d886751022dd32a38d /test
parentaa37a7c556094c356a719ded1d30f7749a3c11f7 (diff)
parent81369d99a9b6ee5caae6b5e6a5faffb8a65fb588 (diff)
downloadrelx-81aa66f952f494568428ff8f547e29b92117b776.tar.gz
relx-81aa66f952f494568428ff8f547e29b92117b776.tar.bz2
relx-81aa66f952f494568428ff8f547e29b92117b776.zip
Merge pull request #541 from lrascao/feature/exclude_modules
Provide a new config directive that allows per-app module exclusion
Diffstat (limited to 'test')
-rw-r--r--test/rlx_release_SUITE.erl45
-rw-r--r--test/rlx_test_utils.erl39
2 files changed, 69 insertions, 15 deletions
diff --git a/test/rlx_release_SUITE.erl b/test/rlx_release_SUITE.erl
index a017297..c9430fd 100644
--- a/test/rlx_release_SUITE.erl
+++ b/test/rlx_release_SUITE.erl
@@ -55,7 +55,8 @@
make_included_nodetool_release/1,
make_not_included_nodetool_release/1,
make_src_release/1,
- make_excluded_src_release/1]).
+ make_excluded_src_release/1,
+ make_exclude_modules_release/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
@@ -91,7 +92,7 @@ all() ->
make_config_script_release, make_release_twice, make_release_twice_dev_mode,
make_erts_release, make_erts_config_release,
make_included_nodetool_release, make_not_included_nodetool_release,
- make_src_release, make_excluded_src_release].
+ make_src_release, make_excluded_src_release, make_exclude_modules_release].
add_providers(Config) ->
LibDir1 = proplists:get_value(lib1, Config),
@@ -1401,6 +1402,46 @@ make_excluded_src_release(Config) ->
?assert(not ec_file:exists(filename:join([OutputDir, "foo", "lib",
"goal_app_1-0.0.1", "src"]))).
+%% Test to ensure that excluded modules don't end up in the release
+make_exclude_modules_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], []),
+
+ ConfigFile = filename:join([LibDir1, "relx.config"]),
+ rlx_test_utils:write_config(ConfigFile,
+ [{release, {foo, "0.0.1"},
+ [goal_app_1]},
+ {exclude_modules, [{non_goal_1, [a_real_beamnon_goal_1]}]}]),
+ OutputDir = filename:join([proplists:get_value(priv_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)),
+ ?assert(lists:member({goal_app_1, "0.0.1"}, AppSpecs)),
+ %% ensure that the excluded module beam file didn't get copied
+ ?assert(not ec_file:exists(filename:join([OutputDir, "foo", "lib",
+ "non_goal_1-0.0.1", "ebin",
+ "a_real_beamnon_goal_1.beam"]))),
+
+ ?assertMatch({ok, [{application,non_goal_1,
+ [{description,[]},
+ {vsn,"0.0.1"},
+ {modules,[]},
+ {included_applications,[]},
+ {registered,[]},
+ {applications,[stdlib,kernel]}]}]},
+ file:consult(filename:join([OutputDir, "foo", "lib",
+ "non_goal_1-0.0.1", "ebin",
+ "non_goal_1.app"]))).
+
+
%%%===================================================================
%%% Helper Functions
%%%===================================================================
diff --git a/test/rlx_test_utils.erl b/test/rlx_test_utils.erl
index f120c75..12d757f 100644
--- a/test/rlx_test_utils.erl
+++ b/test/rlx_test_utils.erl
@@ -6,9 +6,9 @@
create_app(Dir, Name, Vsn, Deps, LibDeps) ->
AppDir = filename:join([Dir, Name ++ "-" ++ Vsn]),
- write_app_file(AppDir, Name, Vsn, Deps, LibDeps),
+ write_app_file(AppDir, Name, Vsn, app_modules(Name), Deps, LibDeps),
write_src_file(AppDir, Name),
- write_beam_file(AppDir, Name),
+ compile_src_files(AppDir),
rlx_app_info:new(erlang:list_to_atom(Name), Vsn, AppDir,
Deps, []).
@@ -21,19 +21,18 @@ create_full_app(Dir, Name, Vsn, Deps, LibDeps) ->
create_empty_app(Dir, Name, Vsn, Deps, LibDeps) ->
AppDir = filename:join([Dir, Name ++ "-" ++ Vsn]),
- write_app_file(AppDir, Name, Vsn, Deps, LibDeps),
+ 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).
+app_modules(Name) ->
+ [list_to_atom(M ++ Name) ||
+ M <- ["a_real_beam"]].
write_src_file(Dir, Name) ->
- Src = filename:join([Dir, "src", "not_a_real_beam" ++ Name ++ ".erl"]),
+ Src = filename:join([Dir, "src", "a_real_beam" ++ Name ++ ".erl"]),
ok = filelib:ensure_dir(Src),
- ok = ec_file:write_term(Src, testing_purposes_only).
+ ok = file:write_file(Src, beam_file_contents("a_real_beam"++Name)).
write_appup_file(AppInfo, DownVsn) ->
Dir = rlx_app_info:dir(AppInfo),
@@ -43,16 +42,27 @@ write_appup_file(AppInfo, DownVsn) ->
ok = filelib:ensure_dir(Filename),
ok = ec_file:write_term(Filename, {Vsn, [{DownVsn, []}], [{DownVsn, []}]}).
-write_app_file(Dir, Name, Version, Deps, LibDeps) ->
+write_app_file(Dir, Name, Version, Modules, 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)).
+ ok = ec_file:write_term(Filename, get_app_metadata(Name, Version, Modules,
+ Deps, LibDeps)).
+
+compile_src_files(Dir) ->
+ %% compile all *.erl files in src to ebin
+ SrcDir = filename:join([Dir, "src"]),
+ OutputDir = filename:join([Dir, "ebin"]),
+ lists:foreach(fun(SrcFile) ->
+ {ok, _} = compile:file(SrcFile, [{outdir, OutputDir},
+ return_errors])
+ end, ec_file:find(SrcDir, "\\.erl")),
+ ok.
-get_app_metadata(Name, Vsn, Deps, LibDeps) ->
+get_app_metadata(Name, Vsn, Modules, Deps, LibDeps) ->
{application, erlang:list_to_atom(Name),
[{description, ""},
{vsn, Vsn},
- {modules, []},
+ {modules, Modules},
{included_applications, LibDeps},
{registered, []},
{applications, Deps}]}.
@@ -161,6 +171,9 @@ write_config(Filename, Values) ->
ok = ec_file:write(Filename,
[io_lib:format("~p.\n", [Val]) || Val <- Values]).
+beam_file_contents(Name) ->
+ "-module("++Name++").".
+
test_template_contents() ->
"{erts_vsn, \"{{erts_vsn}}\"}.\n"
"{release_erts_version, \"{{release_erts_version}}\"}.\n"