aboutsummaryrefslogtreecommitdiffstats
path: root/lib/common_test
diff options
context:
space:
mode:
authorLukas Larsson <[email protected]>2010-11-30 14:48:34 +0100
committerLukas Larsson <[email protected]>2010-12-08 18:07:54 +0100
commitc0c7e05de55b83ed6d53da628cb345fc4f4da864 (patch)
tree0ac5ef0eeefa2546d5030ae477f170654a43bca2 /lib/common_test
parent78be3bba07f0311c19e7e63b486bd8616a7f2759 (diff)
downloadotp-c0c7e05de55b83ed6d53da628cb345fc4f4da864.tar.gz
otp-c0c7e05de55b83ed6d53da628cb345fc4f4da864.tar.bz2
otp-c0c7e05de55b83ed6d53da628cb345fc4f4da864.zip
Add test case for init_per_suite recover scenario
Diffstat (limited to 'lib/common_test')
-rw-r--r--lib/common_test/test/ct_suite_callback_SUITE.erl52
-rw-r--r--lib/common_test/test/ct_suite_callback_SUITE_data/scb/tests/ct_scb_fail_per_suite_SUITE.erl47
-rw-r--r--lib/common_test/test/ct_suite_callback_SUITE_data/scb/tests/recover_post_suite_scb.erl74
3 files changed, 171 insertions, 2 deletions
diff --git a/lib/common_test/test/ct_suite_callback_SUITE.erl b/lib/common_test/test/ct_suite_callback_SUITE.erl
index ab30ca368c..53087956b9 100644
--- a/lib/common_test/test/ct_suite_callback_SUITE.erl
+++ b/lib/common_test/test/ct_suite_callback_SUITE.erl
@@ -76,7 +76,7 @@ all(suite) ->
minimal_and_maximal_scb, faulty_scb_undef, scope_per_suite_scb,
scope_per_group_scb, scope_suite_scb,
fail_pre_suite_scb, fail_post_suite_scb, skip_pre_suite_scb,
- skip_post_suite_scb, update_config_scb
+ skip_post_suite_scb, recover_post_suite_scb, update_config_scb
]).
@@ -136,6 +136,10 @@ skip_post_suite_scb(Config) ->
do_test(skip_post_suite_scb, "ct_scb_empty_SUITE.erl",
[skip_post_suite_scb],Config).
+recover_post_suite_scb(Config) ->
+ do_test(recover_post_suite_scb, "ct_scb_fail_per_suite_SUITE.erl",
+ [recover_post_suite_scb],Config).
+
update_config_scb(Config) ->
do_test(update_config_scb, "ct_update_config_SUITE.erl",
[update_config_scb],Config).
@@ -415,7 +419,7 @@ test_events(fail_pre_suite_scb) ->
{?eh,tc_start,{ct_scb_empty_SUITE,init_per_suite}},
{?eh,scb,{'_',pre_init_per_suite,[ct_scb_empty_SUITE,'$proplist',[]]}},
{?eh,scb,{'_',post_init_per_suite,[ct_scb_empty_SUITE,'$proplist',
- {error,"Test failure"},[]]}},
+ {fail,"Test failure"},[]]}},
{?eh,tc_done,{ct_scb_empty_SUITE,init_per_suite,
{failed, {error,"Test failure"}}}},
{?eh,scb,{'_',on_tc_fail,
@@ -519,6 +523,36 @@ test_events(skip_post_suite_scb) ->
{?eh,stop_logging,[]}
];
+test_events(recover_post_suite_scb) ->
+ Suite = ct_scb_fail_per_suite_SUITE,
+ [
+ {?eh,start_logging,'_'},
+ {?eh,scb,{'_',init,[[]]}},
+ {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
+ {?eh,tc_start,{Suite,init_per_suite}},
+ {?eh,scb,{'_',pre_init_per_suite,[Suite,'$proplist','$proplist']}},
+ {?eh,scb,{'_',post_init_per_suite,[Suite,contains([tc_status]),
+ {'EXIT',{'_','_'}},[]]}},
+ {?eh,tc_done,{Suite,init_per_suite,ok}},
+
+ {?eh,tc_start,{Suite,test_case}},
+ {?eh,scb,{'_',pre_init_per_testcase,
+ [test_case, not_contains([tc_status]),[]]}},
+ {?eh,scb,{'_',post_end_per_testcase,
+ [test_case, contains([tc_status]),'_',[]]}},
+ {?eh,tc_done,{Suite,test_case,ok}},
+
+ {?eh,tc_start,{Suite,end_per_suite}},
+ {?eh,scb,{'_',pre_end_per_suite,
+ [Suite,not_contains([tc_status]),[]]}},
+ {?eh,scb,{'_',post_end_per_suite,
+ [Suite,not_contains([tc_status]),'_',[]]}},
+ {?eh,tc_done,{Suite,end_per_suite,ok}},
+ {?eh,test_done,{'DEF','STOP_TIME'}},
+ {?eh,scb,{'_',terminate,[[]]}},
+ {?eh,stop_logging,[]}
+ ];
+
test_events(update_config_scb) ->
[
{?eh,start_logging,{'DEF','RUNDIR'}},
@@ -639,9 +673,23 @@ contains(List) ->
fun(Proplist) when is_list(Proplist) ->
contains(List,Proplist)
end.
+contains([{Ele,Pos}|T] = L,[H|T2]) ->
+ case element(Pos,H) of
+ Ele ->
+ contains(T,T2);
+ _ ->
+ contains(L,T2)
+ end;
contains([Ele|T],[{Ele,_}|T2])->
contains(T,T2);
contains(List,[_|T]) ->
contains(List,T);
contains([],_) ->
match.
+
+not_contains(List) ->
+ fun(Proplist) when is_list(Proplist) ->
+ [] = [Ele || {Ele,_} <- Proplist,
+ Test <- List,
+ Test =:= Ele]
+ end.
diff --git a/lib/common_test/test/ct_suite_callback_SUITE_data/scb/tests/ct_scb_fail_per_suite_SUITE.erl b/lib/common_test/test/ct_suite_callback_SUITE_data/scb/tests/ct_scb_fail_per_suite_SUITE.erl
new file mode 100644
index 0000000000..dfc7c37e8d
--- /dev/null
+++ b/lib/common_test/test/ct_suite_callback_SUITE_data/scb/tests/ct_scb_fail_per_suite_SUITE.erl
@@ -0,0 +1,47 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(ct_scb_fail_per_suite_SUITE).
+
+-suite_defaults([{timetrap, {minutes, 10}}]).
+
+%% Note: This directive should only be used in test suites.
+-compile(export_all).
+
+-include("ct.hrl").
+
+%% Test server callback functions
+init_per_suite(Config) ->
+ ok = nok.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_testcase(_TestCase, Config) ->
+ Config.
+
+end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+all() ->
+ [test_case].
+
+%% Test cases starts here.
+test_case(Config) when is_list(Config) ->
+ ok.
diff --git a/lib/common_test/test/ct_suite_callback_SUITE_data/scb/tests/recover_post_suite_scb.erl b/lib/common_test/test/ct_suite_callback_SUITE_data/scb/tests/recover_post_suite_scb.erl
new file mode 100644
index 0000000000..864a09e3d0
--- /dev/null
+++ b/lib/common_test/test/ct_suite_callback_SUITE_data/scb/tests/recover_post_suite_scb.erl
@@ -0,0 +1,74 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(recover_post_suite_scb).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% Suite Callbacks
+-compile(export_all).
+
+init(Opts) ->
+ empty_scb:init(Opts).
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_scb:pre_init_per_suite(Suite,Config,State).
+
+post_init_per_suite(Suite,Config,{'EXIT',Reason} = Return,State) ->
+ empty_scb:post_init_per_suite(Suite,Config,Return,State),
+ {lists:keydelete(tc_status,1,Config),State};
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_scb:post_init_per_suite(Suite,Config,Return,State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_scb:pre_end_per_suite(Suite,Config,State).
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_scb:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ empty_scb:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_scb:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ empty_scb:pre_end_per_group(Group,Config,State).
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_scb:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_scb:pre_init_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_scb:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_scb:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_scb:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_scb:terminate(State).