summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/mock_pkg_resource.erl11
-rw-r--r--test/rebar_deps_SUITE.erl2
-rw-r--r--test/rebar_install_deps_SUITE.erl2
-rw-r--r--test/rebar_lock_SUITE.erl78
-rw-r--r--test/rebar_pkg_SUITE.erl14
-rw-r--r--test/rebar_test_utils.erl18
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),