diff options
author | Eric <[email protected]> | 2013-05-09 17:04:18 -0700 |
---|---|---|
committer | Eric <[email protected]> | 2013-05-09 17:04:18 -0700 |
commit | efbdfbe117939cd50d0252a210b9b7634de42bb4 (patch) | |
tree | 74b0bad39d3a5b25bd4199728c16c0b1a4ade703 /test/rcl_depsolver_tester.erl | |
parent | 0d5a803a28010cc956948b614408b9d38997e9a1 (diff) | |
download | relx-efbdfbe117939cd50d0252a210b9b7634de42bb4.tar.gz relx-efbdfbe117939cd50d0252a210b9b7634de42bb4.tar.bz2 relx-efbdfbe117939cd50d0252a210b9b7634de42bb4.zip |
Basic file rename from rcl to rlx
Diffstat (limited to 'test/rcl_depsolver_tester.erl')
-rw-r--r-- | test/rcl_depsolver_tester.erl | 474 |
1 files changed, 0 insertions, 474 deletions
diff --git a/test/rcl_depsolver_tester.erl b/test/rcl_depsolver_tester.erl deleted file mode 100644 index 53f5ac0..0000000 --- a/test/rcl_depsolver_tester.erl +++ /dev/null @@ -1,474 +0,0 @@ -%% -*- erlang-indent-level: 4; indent-tabs-mode: nil; fill-column: 92 -*- -%% ex: ts=4 sx=4 et -%%------------------------------------------------------------------- -%% -%% Copyright 2012 Opscode, Inc. All Rights Reserved. -%% -%% This file is provided to you under the Apache License, -%% Version 2.0 (the "License"); you may not use this file -%% except in compliance with the License. You may obtain -%% a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, -%% software distributed under the License is distributed on an -%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -%% KIND, either express or implied. See the License for the -%% specific language governing permissions and limitations -%% under the License. -%% -%% @author Eric Merritt <[email protected]> -%% @doc -%% Additional testing for depsolver -%% @end -%%------------------------------------------------------------------- --module(rcl_depsolver_tester). - --export([run_data/1, run_log/1]). --include_lib("eunit/include/eunit.hrl"). - --define(ADD_PKG, "^DepSelector\\sinst#\\s(\\d+)\\s-\\s" - "Adding\\spackage\\sid\\s(\\d+)\\/(\\d+):\\smin\\s=\\s-1," - "\\smax\\s=\\s(\\d+),\\scurrent\\sversion\\s0$"). --define(ADD_VC, "^DepSelector\\sinst#\\s(\\d+)\\s-\\sAdding\\sVC\\s" - "for\\s(\\d+)\\s@\\s(\\d+)\\sdepPkg\\s(\\d+)\\s\\[\\s(\\d+)" - "\\s(\\d+)\\s\\]$"). --define(ADD_GOAL, "^DepSelector\\sinst#\\s(\\d+)\\s-\\s" - "Marking\\sPackage\\sRequired\\s(\\d+)$"). - -%%============================================================================ -%% Public Api -%%============================================================================ -run_data(FileName) -> - {ok, Device} = file:open(FileName, [read]), - run_data_file(Device). - -run_log(FileName) -> - {ok, Device} = file:open(FileName, [read]), - run_log_file(Device). - -data1_test() -> - ExpectedResult = versionify([{"app6","0.0.1"}, - {"dep_pkg13","0.0.2"}, - {"app13","0.0.1"}, - {"dep_pkg2","0.0.5"}, - {"dep_pkg1","0.0.2"}, - {"dep_pkg7","0.1.2"}, - {"app9","0.0.1"}]), - ?assertMatch({ok, ExpectedResult}, - run_data(fix_rebar_brokenness("data1.txt"))). - -data2_test() -> - ExpectedResult = versionify([{"app18","0.0.1"}, - {"app4","0.0.1"}, - {"app1","0.0.1"}, - {"app6","0.0.1"}, - {"dep_pkg13","0.0.2"}, - {"app13","0.0.1"}, - {"dep_pkg5","0.0.2"}, - {"dep_pkg1","0.0.2"}, - {"dep_pkg2","0.0.5"}, - {"dep_pkg7","0.1.2"}, - {"app9","0.0.1"}, - {"dep_pkg16","1.0.2"}]), - ?assertMatch({ok, ExpectedResult}, - run_data(fix_rebar_brokenness("data2.txt"))). - -data3_test() -> - ExpectedResult = versionify([{"app68","0.0.1"}, - {"app58","0.0.1"}, - {"app48","0.0.7"}, - {"app38","0.0.1"}, - {"app28","0.0.1"}, - {"app18","0.0.1"}, - {"app4","0.0.1"}, - {"app1","0.0.1"}, - {"app6","0.0.1"}, - {"dep_pkg13","0.0.2"}, - {"app13","0.0.1"}, - {"dep_pkg5","0.0.2"}, - {"dep_pkg1","0.0.2"}, - {"dep_pkg2","0.0.5"}, - {"dep_pkg7","0.1.2"}, - {"app9","0.0.1"}, - {"dep_pkg16","1.0.2"}]), - ?assertMatch({ok,ExpectedResult}, run_data(fix_rebar_brokenness("data3.txt"))). - -data4_test() -> - ExpectedResult = versionify([{"dep_pkg20","0.0.2"}, - {"app78","0.0.1"}, - {"app68","0.0.1"}, - {"app58","0.0.1"}, - {"app48","0.0.7"}, - {"app38","0.0.1"}, - {"app28","0.0.1"}, - {"app18","0.0.1"}, - {"app4","0.0.1"}, - {"app1","0.0.1"}, - {"app6","0.0.1"}, - {"dep_pkg13","0.0.2"}, - {"app13","0.0.1"}, - {"dep_pkg5","0.0.2"}, - {"dep_pkg1","0.0.2"}, - {"dep_pkg2","0.0.5"}, - {"dep_pkg7","0.1.2"}, - {"app9","0.0.1"}, - {"dep_pkg16","1.0.2"}]), - ?assertMatch({ok, ExpectedResult}, - run_data(fix_rebar_brokenness("data4.txt"))). - -data5_test() -> - ExpectedResult = versionify([{"dep_pkg14","0.0.2"}, - {"dep_pkg22","0.0.2"}, - {"dep_pkg20","0.0.2"}, - {"app78","0.0.1"}, - {"app68","0.0.1"}, - {"app58","0.0.1"}, - {"app48","0.0.7"}, - {"app38","0.0.1"}, - {"app28","0.0.1"}, - {"app18","0.0.1"}, - {"app4","0.0.1"}, - {"app1","0.0.1"}, - {"app6","0.0.1"}, - {"dep_pkg13","0.0.2"}, - {"app13","0.0.1"}, - {"dep_pkg5","0.0.2"}, - {"dep_pkg1","0.0.2"}, - {"dep_pkg2","0.0.5"}, - {"dep_pkg7","0.1.2"}, - {"app9","0.0.1"}, - {"dep_pkg16","1.0.2"}]), - ?assertMatch({ok, ExpectedResult}, - run_data(fix_rebar_brokenness("data5.txt"))). - -data6_test() -> - ExpectedResult = versionify([{"app108","0.0.1"}, - {"app98","0.0.1"}, - {"app88","0.0.1"}, - {"dep_pkg14","0.0.2"}, - {"dep_pkg22","0.0.2"}, - {"dep_pkg20","0.0.2"}, - {"app78","0.0.1"}, - {"app68","0.0.1"}, - {"app58","0.0.1"}, - {"app48","0.0.7"}, - {"app38","0.0.1"}, - {"app28","0.0.1"}, - {"app18","0.0.1"}, - {"app4","0.0.1"}, - {"app1","0.0.1"}, - {"app6","0.0.1"}, - {"dep_pkg13","0.0.2"}, - {"app13","0.0.1"}, - {"dep_pkg5","0.0.2"}, - {"dep_pkg1","0.0.2"}, - {"dep_pkg2","0.0.5"}, - {"dep_pkg7","0.1.2"}, - {"app9","0.0.1"}, - {"dep_pkg16","1.0.2"}]), - ?assertMatch({ok, ExpectedResult}, - run_data(fix_rebar_brokenness("data6.txt"))). - -log_07be9e47_test() -> - Data = run_log(fix_rebar_brokenness("log-07be9e47-6f42-4a5d-b8b5-1d2eae1ad83b.txt")), - ExpectedResult = versionify([{"0","0"}, - {"1","0"}, - {"3","0"}, - {"4","0"}, - {"5","0"}, - {"6","0"}, - {"7","0"}, - {"8","0"}, - {"9","0"}, - {"10","0"}, - {"11","0"}, - {"12","0"}, - {"13","0"}, - {"14","0"}, - {"15","0"}, - {"16","0"}, - {"18","0"}, - {"19","0"}, - {"21","0"}, - {"22","0"}, - {"23","0"}, - {"24","0"}, - {"25","0"}]), - ?assertMatch({ok, ExpectedResult}, - Data). - -log_183998c1_test() -> - ?assertMatch({error, {unreachable_package,<<"9">>}}, - run_log(fix_rebar_brokenness("log-183998c1-2ada-4214-b308-e480345c42f2.txt"))). - - -log_311a15e7_test() -> - {ok, Data} = run_log(fix_rebar_brokenness("log-311a15e7-3378-4c5b-beb7-86a1b9cf0ea9.txt")), - ExpectedResult = lists:sort(versionify([{"45", "22"}, - {"40","1"}, - {"3","5"}, - {"9","0"}, - {"8","0"}, - {"7","0"}, - {"6","2"}, - {"1","5"}, - {"0","2"}, - {"61","1"}, - {"60","0"}, - {"35","4"}, - {"39","0"}, - {"38","2"}, - {"37","2"}, - {"36","3"}, - {"32","24"}, - {"30","0"}, - {"19","1"}, - {"18","0"}, - {"17","2"}, - {"16","0"}, - {"15","0"}, - {"14","1"}, - {"13","0"}, - {"12","1"}, - {"11","0"}, - {"10","1"}, - {"59","0"}, - {"58","1"}, - {"57","0"}, - {"56","0"}, - {"55","4"}, - {"29","2"}, - {"27","2"}, - {"26","0"}, - {"25","5"}, - {"24","3"}, - {"23","1"}, - {"22","3"}, - {"21","2"}, - {"20","0"}])), - ?assertMatch(ExpectedResult, lists:sort(Data)). - -log_382cfe5b_test() -> - {ok, Data} = - run_log(fix_rebar_brokenness("log-382cfe5b-0ac2-48b8-83d1-717cb4620990.txt")), - ExpectedResult = lists:sort(versionify([{"18","0"}, - {"17","0"}, - {"15","1"}, - {"14","0"}, - {"10","0"}, - {"7","0"}, - {"6","0"}, - {"5","0"}, - {"4","0"}, - {"3","0"}, - {"2","1"}, - {"1","0"}, - {"0","0"}])), - ?assertMatch(ExpectedResult, lists:sort(Data)). - -log_d3564ef6_test() -> - {ok, Data} = run_log(fix_rebar_brokenness("log-d3564ef6-6437-41e7-90b6-dbdb849551a6_mod.txt")), - ExpectedResult = lists:sort(versionify([{"57","5"}, - {"56","3"}, - {"55","4"}, - {"54","0"}, - {"53","1"}, - {"82","0"}, - {"81","0"}, - {"80","1"}, - {"29","0"}, - {"28","5"}, - {"27","3"}, - {"26","1"}, - {"25","3"}, - {"24","2"}, - {"23","0"}, - {"22","1"}, - {"21","0"}, - {"20","2"}, - {"75","32"}, - {"79","2"}, - {"78","4"}, - {"74","7"}, - {"73","11"}, - {"72","0"}, - {"70","1"}, - {"47","4"}, - {"45","1"}, - {"44","1"}, - {"43","7"}, - {"42","1"}, - {"41","2"}, - {"40","2"}, - {"19","0"}, - {"18","0"}, - {"17","1"}, - {"16","0"}, - {"15","1"}, - {"14","0"}, - {"13","1"}, - {"12","0"}, - {"11","0"}, - {"10","0"}, - {"9","2"}, - {"4","5"}, - {"3","2"}, - {"0","3"}, - {"69","0"}, - {"68","1"}, - {"67","7"}, - {"39","3"}, - {"35","24"}, - {"33","0"}, - {"32","2"}, - {"30","2"}])), - ?assertMatch(ExpectedResult, lists:sort(Data)). - -log_ea2d264b_test() -> - {ok, Data} = run_log(fix_rebar_brokenness("log-ea2d264b-003e-4611-94ed-14efc7732083.txt")), - ExpectedResult = lists:sort(versionify([{"18","1"}, - {"17","0"}, - {"16","0"}, - {"15","0"}, - {"14","0"}, - {"13","1"}, - {"10","1"}, - {"9","1"}, - {"8","2"}, - {"6","0"}, - {"5","0"}, - {"4","0"}, - {"3","0"}, - {"2","0"}, - {"1","0"}, - {"0","1"}])), - ?assertMatch(ExpectedResult, lists:sort(Data)). - -%%============================================================================ -%% Internal Functions -%%============================================================================ -versionify(X) when erlang:is_list(X) -> - lists:map(fun versionify/1, X); -versionify({K, V}) -> - {erlang:list_to_binary(K), rcl_depsolver:parse_version(V)}. - -fix_rebar_brokenness(Filename) -> - Alt1 = filename:join(["./test", "data", Filename]), - Alt2 = filename:join(["../test", "data", Filename]), - case filelib:is_regular(Alt1) of - true -> - Alt1; - false -> - case filelib:is_regular(Alt2) of - true -> - Alt2; - false -> - io:format("~p~n", [Alt2]), - erlang:throw(unable_to_find_data_files) - end - end. - -run_data_file(Device) -> - Constraints = get_constraints(io:get_line(Device, "")), - rcl_depsolver:solve(process_packages(read_packages(Device)), Constraints). - -goble_lines(_Device, eof, Acc) -> - lists:reverse(Acc); -goble_lines(_Device, {error, Err}, _Acc) -> - erlang:throw(Err); -goble_lines(Device, ValidVal, Acc) -> - goble_lines(Device, io:get_line(Device, ""), [ValidVal | Acc]). - -goble_lines(Device) -> - goble_lines(Device, io:get_line(Device, ""), []). - -run_log_file(Device) -> - State0 = rcl_depsolver:new_graph(), - {Goals, State2} = - lists:foldl(fun(Line, Data) -> - process_add_goal(Line, - process_add_constraint(Line, - process_add_package(Line, Data))) - end, {[], State0}, goble_lines(Device)), - rcl_depsolver:solve(State2, Goals). - -read_packages(Device) -> - process_line(Device, io:get_line(Device, ""), []). - -process_line(Device, eof, Acc) -> - file:close(Device), - Acc; -process_line(Device, [], Acc) -> - process_line(Device, io:get_line(Device, ""), - Acc); -process_line(Device, "\n", Acc) -> - process_line(Device, io:get_line(Device, ""), - Acc); -process_line(Device, [$\s | Rest], [{Pkg, Vsn, Deps} | Acc]) -> - [DepPackage, Type, DepVsn] = string:tokens(Rest, " \n"), - Dep = - case Type of - "=" -> - {DepPackage, DepVsn}; - ">=" -> - {DepPackage, DepVsn, gte} - end, - process_line(Device, io:get_line(Device, ""), - [{Pkg, Vsn, [Dep | Deps]} | Acc]); -process_line(Device, Pkg, Acc) -> - [Package, Vsn] = string:tokens(Pkg, " \n"), - process_line(Device, io:get_line(Device, ""), - [{Package, Vsn, []} | Acc]). - -process_packages(Pkgs) -> - lists:foldl(fun({Pkg, Vsn, Constraints}, Dom0) -> - rcl_depsolver:add_package_version(Dom0, Pkg, Vsn, Constraints) - end, rcl_depsolver:new_graph(), Pkgs). - -get_constraints(ConLine) -> - AppVsns = string:tokens(ConLine, " \n"), - lists:map(fun(AppCon) -> - parse_app(AppCon, []) - end, AppVsns). -parse_app([$= | Rest], Acc) -> - {lists:reverse(Acc), Rest}; -parse_app([$>, $= | Rest], Acc) -> - {lists:reverse(Acc), Rest, gte}; -parse_app([Else | Rest], Acc) -> - parse_app(Rest, [Else | Acc]); -parse_app([], Acc) -> - lists:reverse(Acc). - -process_add_package(Line, {Goals, State0}) -> - case re:run(Line, ?ADD_PKG, [{capture, all, list}]) of - {match, [_All, _InstNumber, PkgName, _PkgCount, VersionCount]} -> - {Goals, - lists:foldl(fun(PkgVsn, State1) -> - rcl_depsolver:add_package_version(State1, - PkgName, - erlang:integer_to_list(PkgVsn), - []) - end, State0, lists:seq(0, - erlang:list_to_integer(VersionCount)))}; - _ -> - {Goals, State0} - end. - -process_add_constraint(Line, {Goals, State0}) -> - case re:run(Line, ?ADD_VC, [{capture, all, list}]) of - {match, [_All, _InstNumber, Pkg, Vsn, Dep, _Ignore, DepVsn]} -> - {Goals, - rcl_depsolver:add_package_version(State0, Pkg, Vsn, [{Dep, DepVsn}])}; - _ -> - {Goals, State0} - end. - -process_add_goal(Line, {Goals, State0}) -> - case re:run(Line, ?ADD_GOAL, [{capture, all, list}]) of - {match,[_All, _InstNumber, NewGoal]} -> - {[NewGoal | Goals], State0}; - _ -> - {Goals, State0} - end. |