diff options
Diffstat (limited to 'lib/kernel/test/kernel_SUITE.erl')
-rw-r--r-- | lib/kernel/test/kernel_SUITE.erl | 110 |
1 files changed, 54 insertions, 56 deletions
diff --git a/lib/kernel/test/kernel_SUITE.erl b/lib/kernel/test/kernel_SUITE.erl index a70aa1fa30..48e4db2ad3 100644 --- a/lib/kernel/test/kernel_SUITE.erl +++ b/lib/kernel/test/kernel_SUITE.erl @@ -23,7 +23,7 @@ -module(kernel_SUITE). -include_lib("common_test/include/ct.hrl"). --compile(r21). +-compile(r22). %% Test server specific exports -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, @@ -55,7 +55,19 @@ init_per_group(_GroupName, Config) -> end_per_group(_GroupName, Config) -> Config. - +init_per_testcase(appup_test, Config) -> + %% We check if the test results were released using a version + %% of Erlang/OTP that was a tagged version or not. On a non-tagged + %% version this testcase most likely will fail. + case file:read_file( + filename:join( + proplists:get_value(data_dir,Config), "otp_version_tickets")) of + {ok,<<"DEVELOPMENT",_/binary>>} -> + {skip, "This is a development version, test might fail " + "because of incorrect version numbers"}; + {ok,_NotDev} -> + Config + end; init_per_testcase(_Case, Config) -> Config. end_per_testcase(_Case, _Config) -> @@ -75,8 +87,6 @@ app_test(Config) when is_list(Config) -> appup_test(_Config) -> appup_tests(kernel,create_test_vsns(kernel)). -appup_tests(_App,{[],[]}) -> - {skip,"no previous releases available"}; appup_tests(App,{OkVsns0,NokVsns}) -> application:load(App), {_,_,Vsn} = lists:keyfind(App,1,application:loaded_applications()), @@ -89,8 +99,7 @@ appup_tests(App,{OkVsns0,NokVsns}) -> OkVsns0 -> OkVsns0; Ok -> - ct:log("Current version, ~p, is same as in previous release.~n" - "Removing this from the list of ok versions.", + ct:log("Removed current version ~p from the list of ok versions to test.", [Vsn]), Ok end, @@ -105,57 +114,46 @@ appup_tests(App,{OkVsns0,NokVsns}) -> ok. create_test_vsns(App) -> - ThisMajor = erlang:system_info(otp_release), - FirstMajor = previous_major(ThisMajor), - SecondMajor = previous_major(previous_major(FirstMajor)), - Ok = app_vsn(App,[ThisMajor,FirstMajor]), - Nok0 = app_vsn(App,[SecondMajor]), + S = otp_vsns:read_state(), + Rel = list_to_integer(erlang:system_info(otp_release)), + AppStr = atom_to_list(App), + Ok = ok_app_vsns(S, Rel, AppStr), + Nok0 = nok_app_vsns(S, Rel, AppStr, hd(Ok)), Nok = case Ok of - [Ok1|_] -> - [Ok1 ++ ",1" | Nok0]; % illegal - _ -> - Nok0 - end, - {Ok,Nok}. - -previous_major("17") -> - "r16b"; -previous_major("r16b") -> - "r15b"; -previous_major(Rel) -> - integer_to_list(list_to_integer(Rel)-1). - -app_vsn(App,[R|Rs]) -> - OldRel = - case test_server:is_release_available(R) of - true -> - {release,R}; - false -> - case ct:get_config({otp_releases,list_to_atom(R)}) of - undefined -> - false; - Prog0 -> - case os:find_executable(Prog0) of - false -> - false; - Prog -> - {prog,Prog} - end - end - end, - case OldRel of - false -> - app_vsn(App,Rs); - _ -> - {ok,N} = test_server:start_node(prevrel,peer,[{erl,[OldRel]}]), - _ = rpc:call(N,application,load,[App]), - As = rpc:call(N,application,loaded_applications,[]), - {_,_,V} = lists:keyfind(App,1,As), - test_server:stop_node(N), - [V|app_vsn(App,Rs)] - end; -app_vsn(_App,[]) -> - []. + [Ok1|_] -> + [Ok1 ++ ",1" | Nok0]; % illegal + _ -> + Nok0 + end, + {Ok, Nok}. + +ok_app_vsns(S, Rel, AppStr) -> + AppVsns0 = get_rel_app_vsns(S, Rel-2, AppStr), + AppVsns1 = get_rel_app_vsns(S, Rel-1, AppStr), + AppVsns2 = try + get_rel_app_vsns(S, Rel, AppStr) + catch + _:_ -> [] + end, + lists:usort(AppVsns2 ++ AppVsns1 ++ AppVsns0). + +nok_app_vsns(S, Rel, AppStr, EarliestOkVsn) -> + AppVsns0 = get_rel_app_vsns(S, Rel-4, AppStr), + AppVsns1 = get_rel_app_vsns(S, Rel-3, AppStr), + %% Earliest OK version may exist in not OK versions + %% as well if there were no application version bump + %% between two releases, so we need to remove it + %% if that is the case... + lists:usort(AppVsns1 ++ AppVsns0) -- EarliestOkVsn. + +get_rel_app_vsns(S, Rel, App) -> + RelStr = integer_to_list(Rel), + OtpVsns = otp_vsns:branch_vsns(S, "maint-"++RelStr), + lists:map(fun (OtpVsn) -> + AppVsn = otp_vsns:app_vsn(S, OtpVsn, App), + [_, Vsn] = string:lexemes(AppVsn, "-"), + Vsn + end, OtpVsns). check_appup([Vsn|Vsns],Instrs,Expected) -> case systools_relup:appup_search_for_version(Vsn, Instrs) of |