diff options
| author | Tristan Sloughter <t@crashfast.com> | 2015-02-20 08:42:38 -0600 | 
|---|---|---|
| committer | Tristan Sloughter <t@crashfast.com> | 2015-02-22 10:57:57 -0600 | 
| commit | 633dafafc365331af94372bb667b376a42ae913e (patch) | |
| tree | 35c3128b42c9a0c55ef49f070855bb9c637ebeb8 | |
| parent | be6cacfe599702cf2c93b31fb2e38d5b456ee0fd (diff) | |
release and tar tests
| -rw-r--r-- | src/rebar3.erl | 11 | ||||
| -rw-r--r-- | src/rebar_prv_release.erl | 7 | ||||
| -rw-r--r-- | src/rebar_prv_tar.erl | 9 | ||||
| -rw-r--r-- | test/rebar_release_SUITE.erl | 52 | ||||
| -rw-r--r-- | test/rebar_test_utils.erl | 24 | 
5 files changed, 94 insertions, 9 deletions
| diff --git a/src/rebar3.erl b/src/rebar3.erl index 03b7b98..d9024bb 100644 --- a/src/rebar3.erl +++ b/src/rebar3.erl @@ -76,7 +76,8 @@ main(Args) ->  run(BaseState, Commands) ->      _ = application:load(rebar),      BaseState1 = rebar_state:set(BaseState, task, Commands), -    run_aux(BaseState1, [], Commands). +    BaseState2 = rebar_state:set(BaseState1, caller, api), +    run_aux(BaseState2, [], Commands).  %% ====================================================================  %% Internal functions @@ -84,7 +85,9 @@ run(BaseState, Commands) ->  run(RawArgs) ->      _ = application:load(rebar), -    {GlobalPluginProviders, BaseConfig} = init_config(), + +    {GlobalPluginProviders, BaseState} = init_config(), +    BaseState1 = rebar_state:set(BaseState, caller, command_line),      case erlang:system_info(version) of          "6.1" -> @@ -94,8 +97,8 @@ run(RawArgs) ->              ok      end, -    {BaseConfig1, _Args1} = set_options(BaseConfig, {[], []}), -    run_aux(BaseConfig1, GlobalPluginProviders, RawArgs). +    {BaseState2, _Args1} = set_options(BaseState1, {[], []}), +    run_aux(BaseState2, GlobalPluginProviders, RawArgs).  run_aux(State, GlobalPluginProviders, RawArgs) ->      %% Make sure crypto is running diff --git a/src/rebar_prv_release.erl b/src/rebar_prv_release.erl index 29e1dc2..f2098fb 100644 --- a/src/rebar_prv_release.erl +++ b/src/rebar_prv_release.erl @@ -32,6 +32,7 @@ init(State) ->  -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.  do(State) -> +    Caller = rebar_state:get(State, caller, api),      Options = rebar_state:command_args(State),      DepsDir = rebar_dir:deps_dir(State),      LibDirs = rebar_utils:filtermap(fun ec_file:exists/1, @@ -42,11 +43,13 @@ do(State) ->          case rebar_state:get(State, relx, []) of              [] ->                  relx:main([{lib_dirs, LibDirs} -                          ,{output_dir, OutputDir}], AllOptions); +                          ,{output_dir, OutputDir} +                          ,{caller, Caller}], AllOptions);              Config ->                  relx:main([{lib_dirs, LibDirs}                            ,{config, Config} -                          ,{output_dir, OutputDir}], AllOptions) +                          ,{output_dir, OutputDir} +                          ,{caller, Caller}], AllOptions)          end,          {ok, State}      catch diff --git a/src/rebar_prv_tar.erl b/src/rebar_prv_tar.erl index 7efa544..87ee4df 100644 --- a/src/rebar_prv_tar.erl +++ b/src/rebar_prv_tar.erl @@ -32,6 +32,7 @@ init(State) ->  -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.  do(State) -> +    Caller = rebar_state:get(State, caller, api),      Options = rebar_state:command_args(State),      DepsDir = rebar_dir:deps_dir(State),      LibDirs = rebar_utils:filtermap(fun ec_file:exists/1, @@ -40,12 +41,14 @@ do(State) ->      AllOptions = string:join(["release", "tar" | Options], " "),      case rebar_state:get(State, relx, []) of          [] -> -            relx:main([{lib_dirs, LibDirs -                       ,{output_dir, OutputDir}}], AllOptions); +            relx:main([{lib_dirs, LibDirs} +                      ,{output_dir, OutputDir} +                      ,{caller, Caller}], AllOptions);          Config ->              relx:main([{lib_dirs, LibDirs}                        ,{config, Config} -                      ,{output_dir, OutputDir}], AllOptions) +                      ,{output_dir, OutputDir} +                      ,{caller, Caller}], AllOptions)      end,      {ok, State}. diff --git a/test/rebar_release_SUITE.erl b/test/rebar_release_SUITE.erl new file mode 100644 index 0000000..92219a5 --- /dev/null +++ b/test/rebar_release_SUITE.erl @@ -0,0 +1,52 @@ +-module(rebar_release_SUITE). +-compile(export_all). +-include_lib("common_test/include/ct.hrl"). +-include_lib("eunit/include/eunit.hrl"). + +all() -> [release, tar]. + +init_per_testcase(Case, Config0) -> +    Config = rebar_test_utils:init_rebar_state(Config0), +    Name = rebar_test_utils:create_random_name(atom_to_list(Case)), +    AppDir = ?config(apps, Config), +    application:load(rebar), + +    ok = ec_file:mkdir_p(AppDir), +    State = rebar_state:new([{base_dir, filename:join([AppDir, "_build"])}]), + +    rebar_test_utils:create_app(AppDir, Name, "1.0.0", [kernel, stdlib]), +    [{name, Name}, {apps, AppDir}, {state, State} | Config]. + +end_per_testcase(_, Config) -> +    meck:unload(), +    Config. + +release(Config) -> +    AppDir = ?config(apps, Config), +    Name = ?config(name, Config), +    Vsn = "1.0.0", +    {ok, RebarConfig} = +        file:consult(rebar_test_utils:create_config(AppDir, +                                                    [{relx, [{release, {list_to_atom(Name), Vsn}, +                                                              [list_to_atom(Name)]}, +                                                             {lib_dirs, [AppDir]}]}])), +    rebar_test_utils:run_and_check( +      Config, RebarConfig, +      ["release"], +      {ok, [{release, list_to_atom(Name), Vsn}]} +     ). + +tar(Config) -> +    AppDir = ?config(apps, Config), +    Name = ?config(name, Config), +    Vsn = "1.0.0", +    {ok, RebarConfig} = +        file:consult(rebar_test_utils:create_config(AppDir, +                                                    [{relx, [{release, {list_to_atom(Name), Vsn}, +                                                              [list_to_atom(Name)]}, +                                                             {lib_dirs, [AppDir]}]}])), +    rebar_test_utils:run_and_check( +      Config, RebarConfig, +      ["tar"], +      {ok, [{release, list_to_atom(Name), Vsn}, {tar, Name, Vsn}]} +     ). diff --git a/test/rebar_test_utils.erl b/test/rebar_test_utils.erl index 96200a6..2198384 100644 --- a/test/rebar_test_utils.erl +++ b/test/rebar_test_utils.erl @@ -115,6 +115,7 @@ check_results(AppDir, Expected) ->      DepsNames = [{ec_cnv:to_list(rebar_app_info:name(App)), App} || App <- Deps],      Checkouts = rebar_app_discover:find_apps([CheckoutsDir], all),      CheckoutsNames = [{ec_cnv:to_list(rebar_app_info:name(App)), App} || App <- Checkouts], +      lists:foreach(          fun({app, Name}) ->                  ct:pal("Name: ~p", [Name]), @@ -167,6 +168,29 @@ check_results(AppDir, Expected) ->                          ?assertEqual(iolist_to_binary(Vsn),                                       iolist_to_binary(LockVsn))                  end +        ;  ({release, Name, Vsn}) -> +                ct:pal("Release: ~p-~s", [Name, Vsn]), +                {ok, Cwd} = file:get_cwd(), +                try +                    file:set_cwd(AppDir), +                    ReleaseDir = filename:join([AppDir, "_build", "rel"]), +                    RelxState = rlx_state:new("", [], []), +                    RelxState1 = rlx_state:base_output_dir(RelxState, ReleaseDir), +                    {ok, RelxState2} = rlx_prv_app_discover:do(RelxState1), +                    {ok, RelxState3} = rlx_prv_rel_discover:do(RelxState2), + +                    %% throws not_found if it doesn't exist +                    rlx_state:get_realized_release(RelxState3, Name, Vsn) +                catch +                    _ -> +                        ct:fail(release_not_found) +                after +                    file:set_cwd(Cwd) +                end +        ;  ({tar, Name, Vsn}) -> +                ct:pal("Tarball: ~s-~s", [Name, Vsn]), +                TarballWildcard = filename:join([AppDir, "**", Name++"-"++Vsn++".tar.gz"]), +                ?assertNotEqual([], filelib:wildcard(TarballWildcard))          end, Expected).  write_src_file(Dir, Name) -> | 
