diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/mock_pkg_resource.erl | 11 | ||||
| -rw-r--r-- | test/rebar_deps_SUITE.erl | 2 | ||||
| -rw-r--r-- | test/rebar_install_deps_SUITE.erl | 2 | ||||
| -rw-r--r-- | test/rebar_lock_SUITE.erl | 78 | ||||
| -rw-r--r-- | test/rebar_pkg_SUITE.erl | 14 | ||||
| -rw-r--r-- | test/rebar_test_utils.erl | 18 | 
6 files changed, 96 insertions, 29 deletions
| diff --git a/test/mock_pkg_resource.erl b/test/mock_pkg_resource.erl index a94fe2f..f837713 100644 --- a/test/mock_pkg_resource.erl +++ b/test/mock_pkg_resource.erl @@ -22,8 +22,9 @@ mock() -> mock([]).              | {not_in_index, [{App, Vsn}]}              | {pkgdeps, [{{App,Vsn}, [Dep]}]},      App :: string(), -    Dep :: {App, string(), {pkg, App, Vsn}}, -    Vsn :: string(). +    Dep :: {App, string(), {pkg, App, Vsn, Hash}}, +    Vsn :: string(), +    Hash :: string() | undefined.  mock(Opts) ->      meck:new(?MOD, [no_link]),      mock_lock(Opts), @@ -51,7 +52,7 @@ mock_update(Opts) ->      ToUpdate = proplists:get_value(upgrade, Opts, []),      meck:expect(          ?MOD, needs_update, -        fun(_Dir, {pkg, App, _Vsn}) -> +        fun(_Dir, {pkg, App, _Vsn, _Hash}) ->              lists:member(binary_to_list(App), ToUpdate)          end). @@ -66,7 +67,7 @@ mock_vsn(_Opts) ->  %% @doc For each app to download, create a dummy app on disk instead.  %% The configuration for this one (passed in from `mock/1') includes:  %% -%% - Specify a version with `{pkg, _, Vsn}' +%% - Specify a version with `{pkg, _, Vsn, _}'  %% - Dependencies for each application must be passed of the form:  %%   `{pkgdeps, [{"app1", [{app2, ".*", {pkg, ...}}]}]}' -- basically  %%   the `pkgdeps' option takes a key/value list of terms to output directly @@ -76,7 +77,7 @@ mock_download(Opts) ->      Config = proplists:get_value(config, Opts, []),      meck:expect(          ?MOD, download, -        fun (Dir, {pkg, AppBin, Vsn}, _) -> +        fun (Dir, {pkg, AppBin, Vsn, _}, _) ->              App = binary_to_list(AppBin),              filelib:ensure_dir(Dir),              AppDeps = proplists:get_value({App,Vsn}, Deps, []), diff --git a/test/rebar_deps_SUITE.erl b/test/rebar_deps_SUITE.erl index c95854a..4ef9f79 100644 --- a/test/rebar_deps_SUITE.erl +++ b/test/rebar_deps_SUITE.erl @@ -405,5 +405,5 @@ in_warnings(git, Warns, NameRaw, VsnRaw) ->  in_warnings(pkg, Warns, NameRaw, VsnRaw) ->      Name = iolist_to_binary(NameRaw),      Vsn = iolist_to_binary(VsnRaw), -    1 =< length([1 || {_, [AppName, {pkg, _, AppVsn}]} <- Warns, +    1 =< length([1 || {_, [AppName, {pkg, _, AppVsn, _}]} <- Warns,                        AppName =:= Name, AppVsn =:= Vsn]). diff --git a/test/rebar_install_deps_SUITE.erl b/test/rebar_install_deps_SUITE.erl index b8b70b3..9ff28c7 100644 --- a/test/rebar_install_deps_SUITE.erl +++ b/test/rebar_install_deps_SUITE.erl @@ -475,5 +475,5 @@ in_warnings(git, Warns, NameRaw, VsnRaw) ->  in_warnings(pkg, Warns, NameRaw, VsnRaw) ->      Name = iolist_to_binary(NameRaw),      Vsn = iolist_to_binary(VsnRaw), -    1 =< length([1 || {_, [AppName, {pkg, _, AppVsn}]} <- Warns, +    1 =< length([1 || {_, [AppName, {pkg, _, AppVsn, _}]} <- Warns,                        AppName =:= Name, AppVsn =:= Vsn]). diff --git a/test/rebar_lock_SUITE.erl b/test/rebar_lock_SUITE.erl index 00875f7..f1ab3b5 100644 --- a/test/rebar_lock_SUITE.erl +++ b/test/rebar_lock_SUITE.erl @@ -7,7 +7,8 @@  -include_lib("common_test/include/ct.hrl").  -include_lib("eunit/include/eunit.hrl"). -all() -> [current_version, future_versions_no_attrs, future_versions_attrs]. +all() -> [current_version, +          beta_version, future_versions_no_attrs, future_versions_attrs].  current_version(Config) ->      %% Current version just dumps the locks as is on disk. @@ -15,9 +16,60 @@ current_version(Config) ->      Locks = [{<<"app1">>, {git,"some_url", {ref,"some_ref"}}, 2},               {<<"app2">>, {git,"some_url", {ref,"some_ref"}}, 0},               {<<"app3">>, {hg,"some_url", {ref,"some_ref"}}, 1}, +             {<<"pkg1">>,{pkg,<<"name">>,<<"0.1.6">>},3}, +             {<<"pkg2">>,{pkg,<<"name1">>,<<"1.1.6">>},2}, +             {<<"pkg3">>,{pkg,<<"name2">>,<<"3.0.6">>},1} +            ], +    ExpandedNull = [ +        {<<"app1">>, {git,"some_url", {ref,"some_ref"}}, 2}, +        {<<"app2">>, {git,"some_url", {ref,"some_ref"}}, 0}, +        {<<"app3">>, {hg,"some_url", {ref,"some_ref"}}, 1}, +        {<<"pkg1">>,{pkg,<<"name">>,<<"0.1.6">>,undefined},3}, +        {<<"pkg2">>,{pkg,<<"name1">>,<<"1.1.6">>,undefined},2}, +        {<<"pkg3">>,{pkg,<<"name2">>,<<"3.0.6">>,undefined},1} +    ], +    %% Simulate a beta lockfile +    file:write_file(LockFile, io_lib:format("~p.~n", [Locks])), +    %% No properties fetched from a beta lockfile, expand locks +    %% to undefined +    ?assertEqual(ExpandedNull, +                 rebar_config:consult_lock_file(LockFile)), +    %% Adding hash data +    Hashes = [{<<"pkg1">>, <<"tarballhash">>}, +              {<<"pkg3">>, <<"otherhash">>}], +    ExpandedLocks = [ +        {<<"app1">>, {git,"some_url", {ref,"some_ref"}}, 2}, +        {<<"app2">>, {git,"some_url", {ref,"some_ref"}}, 0}, +        {<<"app3">>, {hg,"some_url", {ref,"some_ref"}}, 1}, +        {<<"pkg1">>,{pkg,<<"name">>,<<"0.1.6">>,<<"tarballhash">>},3}, +        {<<"pkg2">>,{pkg,<<"name1">>,<<"1.1.6">>,undefined},2}, +        {<<"pkg3">>,{pkg,<<"name2">>,<<"3.0.6">>,<<"otherhash">>},1} +    ], +    file:write_file(LockFile, +                    io_lib:format("~p.~n~p.~n", +                                  [{"1.1.0", Locks}, +                                   [{pkg_hash, Hashes}]])), +    ?assertEqual(ExpandedLocks, rebar_config:consult_lock_file(LockFile)), +    %% Then check that we can reverse that +    ok = rebar_config:write_lock_file(LockFile, ExpandedLocks), +    ?assertEqual({ok, [{"1.1.0", Locks}, [{pkg_hash, Hashes}]]}, +                 file:consult(LockFile)). + +beta_version(Config) -> +    %% Current version just dumps the locks as is on disk. +    LockFile = filename:join(?config(priv_dir, Config), "current_version"), +    Locks = [{<<"app1">>, {git,"some_url", {ref,"some_ref"}}, 2}, +             {<<"app2">>, {git,"some_url", {ref,"some_ref"}}, 0}, +             {<<"app3">>, {hg,"some_url", {ref,"some_ref"}}, 1},               {<<"pkg1">>,{pkg,<<"name">>,<<"0.1.6">>},3}], +    ExpandedLocks = [ +        {<<"app1">>, {git,"some_url", {ref,"some_ref"}}, 2}, +        {<<"app2">>, {git,"some_url", {ref,"some_ref"}}, 0}, +        {<<"app3">>, {hg,"some_url", {ref,"some_ref"}}, 1}, +        {<<"pkg1">>,{pkg,<<"name">>,<<"0.1.6">>,undefined},3} +    ],      file:write_file(LockFile, io_lib:format("~p.~n", [Locks])), -    ?assertEqual(Locks, rebar_config:consult_lock_file(LockFile)). +    ?assertEqual(ExpandedLocks, rebar_config:consult_lock_file(LockFile)).  future_versions_no_attrs(Config) ->      %% Future versions will keep the same core attribute in there, but @@ -27,10 +79,14 @@ future_versions_no_attrs(Config) ->      Locks = [{<<"app1">>, {git,"some_url", {ref,"some_ref"}}, 2},               {<<"app2">>, {git,"some_url", {ref,"some_ref"}}, 0},               {<<"app3">>, {hg,"some_url", {ref,"some_ref"}}, 1}, -             {<<"pkg1">>,{pkg,<<"name">>,<<"0.1.6">>},3}], +             {<<"pkg1">>, {pkg,<<"name">>,<<"0.1.6">>},3}], +    ExpandedLocks = [{<<"app1">>, {git,"some_url", {ref,"some_ref"}}, 2}, +                     {<<"app2">>, {git,"some_url", {ref,"some_ref"}}, 0}, +                     {<<"app3">>, {hg,"some_url", {ref,"some_ref"}}, 1}, +                     {<<"pkg1">>, {pkg,<<"name">>,<<"0.1.6">>,undefined},3}],      LockData = {"3.5.2", Locks},      file:write_file(LockFile, io_lib:format("~p.~n", [LockData])), -    ?assertEqual(Locks, rebar_config:consult_lock_file(LockFile)). +    ?assertEqual(ExpandedLocks, rebar_config:consult_lock_file(LockFile)).  future_versions_attrs(Config) ->      %% Future versions will keep the same core attribute in there, but @@ -41,6 +97,16 @@ future_versions_attrs(Config) ->               {<<"app2">>, {git,"some_url", {ref,"some_ref"}}, 0},               {<<"app3">>, {hg,"some_url", {ref,"some_ref"}}, 1},               {<<"pkg1">>,{pkg,<<"name">>,<<"0.1.6">>},3}], +    ExpandedLocks = [{<<"app1">>, {git,"some_url", {ref,"some_ref"}}, 2}, +                     {<<"app2">>, {git,"some_url", {ref,"some_ref"}}, 0}, +                     {<<"app3">>, {hg,"some_url", {ref,"some_ref"}}, 1}, +                     {<<"pkg1">>,{pkg,<<"name">>,<<"0.1.6">>, <<"tarballhash">>},3}], +    Hashes = [{<<"pkg1">>, <<"tarballhash">>}],      LockData = {"3.5.2", Locks}, -    file:write_file(LockFile, io_lib:format("~p.~na.~n{b,c}.~n[d,e,f].~n", [LockData])), -    ?assertEqual(Locks, rebar_config:consult_lock_file(LockFile)). +    file:write_file(LockFile, +                    io_lib:format("~p.~n~p.~ngarbage.~n", +                                  [LockData, +                                   [{a, x}, +                                    {pkg_hash, Hashes}, +                                    {b, y}]])), +    ?assertEqual(ExpandedLocks, rebar_config:consult_lock_file(LockFile)). diff --git a/test/rebar_pkg_SUITE.erl b/test/rebar_pkg_SUITE.erl index 6a75f32..8003b10 100644 --- a/test/rebar_pkg_SUITE.erl +++ b/test/rebar_pkg_SUITE.erl @@ -103,7 +103,7 @@ good_uncached(Config) ->      {Pkg,Vsn} = ?config(pkg, Config),      State = ?config(state, Config),      ?assertEqual({ok, true}, -                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn}, State)), +                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn, undefined}, State)),      Cache = ?config(cache_dir, Config),      ?assert(filelib:is_regular(filename:join(Cache, <<Pkg/binary, "-", Vsn/binary, ".tar">>))). @@ -116,7 +116,7 @@ good_cached(Config) ->      ?assert(filelib:is_regular(CachedFile)),      {ok, Content} = file:read_file(CachedFile),      ?assertEqual({ok, true}, -                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn}, State)), +                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn, undefined}, State)),      {ok, Content} = file:read_file(CachedFile).  badindexchk(Config) -> @@ -124,7 +124,7 @@ badindexchk(Config) ->      {Pkg,Vsn} = ?config(pkg, Config),      State = ?config(state, Config),      ?assertMatch({bad_registry_checksum, _Path}, -                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn}, State)), +                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn, undefined}, State)),      %% The cached file is there for forensic purposes      Cache = ?config(cache_dir, Config),      ?assert(filelib:is_regular(filename:join(Cache, <<Pkg/binary, "-", Vsn/binary, ".tar">>))). @@ -134,7 +134,7 @@ badpkg(Config) ->      {Pkg,Vsn} = ?config(pkg, Config),      State = ?config(state, Config),      ?assertMatch({bad_download, _Path}, -                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn}, State)), +                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn, undefined}, State)),      %% The cached file is there for forensic purposes      Cache = ?config(cache_dir, Config),      ?assert(filelib:is_regular(filename:join(Cache, <<Pkg/binary, "-", Vsn/binary, ".tar">>))). @@ -148,7 +148,7 @@ bad_to_good(Config) ->      ?assert(filelib:is_regular(CachedFile)),      {ok, Contents} = file:read_file(CachedFile),      ?assertEqual({ok, true}, -                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn}, State)), +                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn, undefined}, State)),      %% Cache has refreshed      ?assert({ok, Contents} =/= file:read_file(CachedFile)). @@ -161,7 +161,7 @@ good_disconnect(Config) ->      ?assert(filelib:is_regular(CachedFile)),      {ok, Content} = file:read_file(CachedFile),      ?assertEqual({ok, true}, -                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn}, State)), +                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn, undefined}, State)),      {ok, Content} = file:read_file(CachedFile).  bad_disconnect(Config) -> @@ -169,7 +169,7 @@ bad_disconnect(Config) ->      {Pkg,Vsn} = ?config(pkg, Config),      State = ?config(state, Config),      ?assertEqual({fetch_fail, Pkg, Vsn}, -                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn}, State)). +                 rebar_pkg_resource:download(Tmp, {pkg, Pkg, Vsn, undefined}, State)).  pkgs_provider(Config) ->      Config1 = rebar_test_utils:init_rebar_state(Config), diff --git a/test/rebar_test_utils.erl b/test/rebar_test_utils.erl index 23b0178..8c2d36d 100644 --- a/test/rebar_test_utils.erl +++ b/test/rebar_test_utils.erl @@ -149,21 +149,21 @@ expand_deps(git, [{Name, Vsn, Deps} | Rest]) ->      Dep = {Name, Vsn, {git, "https://example.org/user/"++Name++".git", {tag, Vsn}}},      [{Dep, expand_deps(git, Deps)} | expand_deps(git, Rest)];  expand_deps(pkg, [{Name, Deps} | Rest]) -> -    Dep = {pkg, Name, "0.0.0"}, +    Dep = {pkg, Name, "0.0.0", undefined},      [{Dep, expand_deps(pkg, Deps)} | expand_deps(pkg, Rest)];  expand_deps(pkg, [{Name, Vsn, Deps} | Rest]) -> -    Dep = {pkg, Name, Vsn}, +    Dep = {pkg, Name, Vsn, undefined},      [{Dep, expand_deps(pkg, Deps)} | expand_deps(pkg, Rest)];  expand_deps(mixed, [{Name, Deps} | Rest]) ->      Dep = if hd(Name) >= $a, hd(Name) =< $z -> -            {pkg, string:to_upper(Name), "0.0.0"} +            {pkg, string:to_upper(Name), "0.0.0", undefined}             ; hd(Name) >= $A, hd(Name) =< $Z ->              {Name, ".*", {git, "https://example.org/user/"++Name++".git", "master"}}      end,      [{Dep, expand_deps(mixed, Deps)} | expand_deps(mixed, Rest)];  expand_deps(mixed, [{Name, Vsn, Deps} | Rest]) ->      Dep = if hd(Name) >= $a, hd(Name) =< $z -> -            {pkg, string:to_upper(Name), Vsn} +            {pkg, string:to_upper(Name), Vsn, undefined}             ; hd(Name) >= $A, hd(Name) =< $Z ->              {Name, Vsn, {git, "https://example.org/user/"++Name++".git", {tag, Vsn}}}      end, @@ -177,7 +177,7 @@ expand_deps(mixed, [{Name, Vsn, Deps} | Rest]) ->  flat_deps(Deps) -> flat_deps(Deps, [], []).  flat_deps([], Src, Pkg) -> {Src, Pkg}; -flat_deps([{{pkg, Name, Vsn}, PkgDeps} | Rest], Src, Pkg) -> +flat_deps([{{pkg, Name, Vsn, undefined}, PkgDeps} | Rest], Src, Pkg) ->      Current = {{iolist_to_binary(Name), iolist_to_binary(Vsn)},                 top_level_deps(PkgDeps)},      {[], FlatPkgDeps} = flat_deps(PkgDeps), @@ -195,7 +195,7 @@ vsn_from_ref({git, _, {_, Vsn}}) -> Vsn;  vsn_from_ref({git, _, Vsn}) -> Vsn.  top_level_deps([]) -> []; -top_level_deps([{{pkg, Name, Vsn}, _} | Deps]) -> +top_level_deps([{{pkg, Name, Vsn, undefined}, _} | Deps]) ->      [{list_to_atom(Name), Vsn} | top_level_deps(Deps)];  top_level_deps([{{Name, Vsn, Ref}, _} | Deps]) ->      [{list_to_atom(Name), Vsn, Ref} | top_level_deps(Deps)]. @@ -306,7 +306,7 @@ check_results(AppDir, Expected, ProfileRun) ->                  case lists:keyfind(iolist_to_binary(Name), 1, Locks) of                      false ->                          error({lock_not_found, Name}); -                    {_LockName, {pkg, _, LockVsn}, _} -> +                    {_LockName, {pkg, _, LockVsn, _}, _} ->                          ?assertEqual(iolist_to_binary(Vsn),                                       iolist_to_binary(LockVsn));                      {_LockName, {_, _, {ref, LockVsn}}, _} -> @@ -318,7 +318,7 @@ check_results(AppDir, Expected, ProfileRun) ->                  case lists:keyfind(iolist_to_binary(Name), 1, Locks) of                      false ->                          error({lock_not_found, Name}); -                    {_LockName, {pkg, _, LockVsn}, _} -> +                    {_LockName, {pkg, _, LockVsn, _}, _} ->                          ?assertEqual(iolist_to_binary(Vsn),                                       iolist_to_binary(LockVsn));                      {_LockName, {_, _, {ref, LockVsn}}, _} -> @@ -329,7 +329,7 @@ check_results(AppDir, Expected, ProfileRun) ->                  case lists:keyfind(iolist_to_binary(Name), 1, Locks) of                      false ->                          error({lock_not_found, Name}); -                    {_LockName, {pkg, _, LockVsn}, _} -> +                    {_LockName, {pkg, _, LockVsn, _}, _} ->                          error({pkg_lock, {Name, LockVsn}});                      {_LockName, {_, _, {ref, LockVsn}}, _} ->                          ?assertEqual(iolist_to_binary(Vsn), | 
