summaryrefslogtreecommitdiff
path: root/lib/kernel/test/kernel_SUITE.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kernel/test/kernel_SUITE.erl')
-rw-r--r--lib/kernel/test/kernel_SUITE.erl110
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