summaryrefslogtreecommitdiff
path: root/test/rebar_unlock_SUITE.erl
blob: b2c020556f236bb62bc8473f3a7a7f05823e3cbb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
-module(rebar_unlock_SUITE).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
-compile(export_all).

all() -> [pkgunlock, unlock, unlock_all].

init_per_testcase(pkgunlock, Config0) ->
    Config = rebar_test_utils:init_rebar_state(Config0, "pkgunlock"),
    Lockfile = filename:join(?config(apps, Config), "rebar.lock"),
    ec_file:copy(filename:join(?config(data_dir, Config), "pkg.rebar.lock"),
                 Lockfile),
    [{lockfile, Lockfile} | Config];
init_per_testcase(Case, Config0) ->
    Config = rebar_test_utils:init_rebar_state(Config0, atom_to_list(Case)),
    Lockfile = filename:join(?config(apps, Config), "rebar.lock"),
    ec_file:copy(filename:join(?config(data_dir, Config), "rebar.lock"),
                 Lockfile),
    [{lockfile, Lockfile} | Config].

end_per_testcase(_, Config) ->
    Config.

pkgunlock(Config) ->
    Locks = read_locks(Config),
    Hashes = read_hashes(Config),
    rebar_test_utils:run_and_check(Config, [], ["unlock", "fakeapp"], {ok, []}),
    Locks = read_locks(Config),
    Hashes = read_hashes(Config),
    rebar_test_utils:run_and_check(Config, [], ["unlock", "bbmustache"], {ok, []}),
    ?assertEqual(Locks -- ["bbmustache"], read_locks(Config)),
    ?assertEqual(Hashes -- ["bbmustache"], read_hashes(Config)),
    rebar_test_utils:run_and_check(Config, [], ["unlock", "cf,certifi"], {ok, []}),
    ?assertEqual(Locks -- ["bbmustache","cf","certifi"], read_locks(Config)),
    ?assertEqual(Hashes -- ["bbmustache","cf","certifi"], read_hashes(Config)),
    rebar_test_utils:run_and_check(Config, [], ["unlock", string:join(Locks,",")], {ok, []}),
    ?assertEqual({error, enoent}, read_locks(Config)),
    ?assertEqual({error, enoent}, read_hashes(Config)),
    ok.

unlock(Config) ->
    Locks = read_locks(Config),
    rebar_test_utils:run_and_check(Config, [], ["unlock", "fakeapp"], {ok, []}),
    Locks = read_locks(Config),
    {ok, State} = rebar_test_utils:run_and_check(Config, [], ["unlock", "uuid"], return),
    ?assertEqual(Locks -- ["uuid"], read_locks(Config)),
    ?assert(false =:= lists:keyfind(<<"uuid">>, 1, rebar_state:get(State, {locks, default}))),
    ?assert(false =/= lists:keyfind(<<"itc">>, 1, rebar_state:get(State, {locks, default}))),
    rebar_test_utils:run_and_check(Config, [], ["unlock", "gproc,itc"], {ok, []}),
    ?assertEqual(Locks -- ["uuid","gproc","itc"], read_locks(Config)),
    rebar_test_utils:run_and_check(Config, [], ["unlock", string:join(Locks,",")], {ok, []}),
    ?assertEqual({error, enoent}, read_locks(Config)),
    ok.

unlock_all(Config) ->
    [_|_] = read_locks(Config),
    {ok, State} = rebar_test_utils:run_and_check(Config, [], ["unlock"], return),
    ?assertEqual({error, enoent}, read_locks(Config)),
    ?assertEqual([], rebar_state:get(State, {locks, default})),
    ok.

read_locks(Config) ->
    case file:consult(?config(lockfile, Config)) of
        {ok, _} ->
            Locks = rebar_config:consult_lock_file(?config(lockfile, Config)),
            [binary_to_list(element(1,Lock)) || Lock <- Locks];
        Other ->
            Other
    end.

read_hashes(Config) ->
    case file:consult(?config(lockfile, Config)) of
        {ok, [{_Vsn, _Locks},Props|_]} ->
            Hashes = proplists:get_value(pkg_hash, Props, []),
            [binary_to_list(element(1,Hash)) || Hash <- Hashes];
        {ok, [{_Vsn, _Locks}]} ->
            [];
        Other ->
            Other
    end.