|
%%% Most locking tests are implicit in other test suites handling
|
|
%%% dependencies.
|
|
%%% This suite is to test the compatibility layers between various
|
|
%%% versions of lockfiles.
|
|
-module(rebar_lock_SUITE).
|
|
-compile(export_all).
|
|
-include_lib("common_test/include/ct.hrl").
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
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.
|
|
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},
|
|
{<<"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, undefined},3},
|
|
{<<"pkg2">>,{pkg,<<"name1">>,<<"1.1.6">>,undefined, undefined},2},
|
|
{<<"pkg3">>,{pkg,<<"name2">>,<<"3.0.6">>,undefined, 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">>}],
|
|
ExtHashes = [{<<"pkg1">>, <<"outer_tarballhash">>},
|
|
{<<"pkg3">>, <<"outer_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">>, <<"outer_tarballhash">>},3},
|
|
{<<"pkg2">>,{pkg,<<"name1">>,<<"1.1.6">>,undefined, undefined},2},
|
|
{<<"pkg3">>,{pkg,<<"name2">>,<<"3.0.6">>,<<"otherhash">>, <<"outer_otherhash">>},1}
|
|
],
|
|
file:write_file(LockFile,
|
|
io_lib:format("~p.~n~p.~n",
|
|
[{"1.2.0", Locks},
|
|
[{pkg_hash, Hashes}, {pkg_hash_ext, ExtHashes}]])),
|
|
?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.2.0", Locks}, [{pkg_hash, Hashes}, {pkg_hash_ext, ExtHashes}]]},
|
|
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, undefined},3}
|
|
],
|
|
file:write_file(LockFile, io_lib:format("~p.~n", [Locks])),
|
|
?assertEqual(ExpandedLocks, rebar_config:consult_lock_file(LockFile)).
|
|
|
|
future_versions_no_attrs(Config) ->
|
|
%% Future versions will keep the same core attribute in there, but
|
|
%% will do so under a new format bundled with a version and potentially
|
|
%% some trailing attributes
|
|
LockFile = filename:join(?config(priv_dir, Config), "future_versions"),
|
|
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, undefined},3}],
|
|
LockData = {"3.5.2", Locks},
|
|
file:write_file(LockFile, io_lib:format("~p.~n", [LockData])),
|
|
?assertEqual(ExpandedLocks, rebar_config:consult_lock_file(LockFile)).
|
|
|
|
future_versions_attrs(Config) ->
|
|
%% Future versions will keep the same core attribute in there, but
|
|
%% will do so under a new format bundled with a version and potentially
|
|
%% some trailing attributes
|
|
LockFile = filename:join(?config(priv_dir, Config), "future_versions"),
|
|
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">>, <<"tarballhash">>, <<"outer_tarballhash">>},3}],
|
|
Hashes = [{<<"pkg1">>, <<"tarballhash">>}],
|
|
ExtHashes = [{<<"pkg1">>, <<"outer_tarballhash">>}],
|
|
LockData = {"3.5.2", Locks},
|
|
file:write_file(LockFile,
|
|
io_lib:format("~p.~n~p.~ngarbage.~n",
|
|
[LockData,
|
|
[{a, x},
|
|
{pkg_hash, Hashes},{pkg_hash_ext, ExtHashes},
|
|
{b, y}]])),
|
|
?assertEqual(ExpandedLocks, rebar_config:consult_lock_file(LockFile)).
|