diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/stdlib/test/gen_statem_SUITE.erl | 165 |
1 files changed, 86 insertions, 79 deletions
diff --git a/lib/stdlib/test/gen_statem_SUITE.erl b/lib/stdlib/test/gen_statem_SUITE.erl index 0429c0e5f4..321573b721 100644 --- a/lib/stdlib/test/gen_statem_SUITE.erl +++ b/lib/stdlib/test/gen_statem_SUITE.erl @@ -26,7 +26,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}, + {timetrap,{minutes,1}}]. all() -> [{group, start}, @@ -82,27 +84,24 @@ end_per_group(_GroupName, Config) -> Config. init_per_testcase(_CaseName, Config) -> - ?t:messages_get(), - Dog = ?t:timetrap(?t:minutes(1)), + flush(), %%% dbg:tracer(), %%% dbg:p(all, c), %%% dbg:tpl(gen_statem, cx), %%% dbg:tpl(proc_lib, cx), %%% dbg:tpl(gen, cx), %%% dbg:tpl(sys, cx), - [{watchdog, Dog} | Config]. + Config. end_per_testcase(_CaseName, Config) -> %%% dbg:stop(), - Dog = ?config(watchdog, Config), - test_server:timetrap_cancel(Dog), Config. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -define(EXPECT_FAILURE(Code, Reason), try begin Code end of - _ -> - ?t:fail() + Reason -> + ct:fail({unexpected,Reason}) catch error:Reason -> Reason; exit:Reason -> Reason @@ -110,7 +109,7 @@ end_per_testcase(_CaseName, Config) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% anonymous -start1(Config) when is_list(Config) -> +start1(Config) -> %%OldFl = process_flag(trap_exit, true), {ok,Pid0} = gen_statem:start_link(?MODULE, start_arg(Config, []), []), @@ -125,7 +124,7 @@ start1(Config) when is_list(Config) -> ok = verify_empty_msgq(). %% anonymous w. shutdown -start2(Config) when is_list(Config) -> +start2(Config) -> %% Dont link when shutdown {ok,Pid0} = gen_statem:start(?MODULE, start_arg(Config, []), []), ok = do_func_test(Pid0), @@ -135,7 +134,7 @@ start2(Config) when is_list(Config) -> ok = verify_empty_msgq(). %% anonymous with timeout -start3(Config) when is_list(Config) -> +start3(Config) -> %%OldFl = process_flag(trap_exit, true), {ok,Pid0} = @@ -152,7 +151,7 @@ start3(Config) when is_list(Config) -> ok = verify_empty_msgq(). %% anonymous with ignore -start4(Config) when is_list(Config) -> +start4(Config) -> OldFl = process_flag(trap_exit, true), ignore = gen_statem:start(?MODULE, start_arg(Config, ignore), []), @@ -161,8 +160,7 @@ start4(Config) when is_list(Config) -> ok = verify_empty_msgq(). %% anonymous with stop -start5(suite) -> []; -start5(Config) when is_list(Config) -> +start5(Config) -> OldFl = process_flag(trap_exit, true), {error,stopped} = gen_statem:start(?MODULE, start_arg(Config, stop), []), @@ -171,7 +169,7 @@ start5(Config) when is_list(Config) -> ok = verify_empty_msgq(). %% anonymous linked -start6(Config) when is_list(Config) -> +start6(Config) -> {ok,Pid} = gen_statem:start_link(?MODULE, start_arg(Config, []), []), ok = do_func_test(Pid), ok = do_sync_func_test(Pid), @@ -180,7 +178,7 @@ start6(Config) when is_list(Config) -> ok = verify_empty_msgq(). %% global register linked -start7(Config) when is_list(Config) -> +start7(Config) -> STM = {global,my_stm}, {ok,Pid} = @@ -200,7 +198,7 @@ start7(Config) when is_list(Config) -> %% local register -start8(Config) when is_list(Config) -> +start8(Config) -> %%OldFl = process_flag(trap_exit, true), Name = my_stm, STM = {local,Name}, @@ -220,7 +218,7 @@ start8(Config) when is_list(Config) -> ok = verify_empty_msgq(). %% local register linked -start9(Config) when is_list(Config) -> +start9(Config) -> %%OldFl = process_flag(trap_exit, true), Name = my_stm, STM = {local,Name}, @@ -240,7 +238,7 @@ start9(Config) when is_list(Config) -> ok = verify_empty_msgq(). %% global register -start10(Config) when is_list(Config) -> +start10(Config) -> STM = {global,my_stm}, {ok,Pid} = @@ -259,7 +257,7 @@ start10(Config) when is_list(Config) -> ok = verify_empty_msgq(). %% Stop registered processes -start11(Config) when is_list(Config) -> +start11(Config) -> Name = my_stm, LocalSTM = {local,Name}, GlobalSTM = {global,Name}, @@ -278,14 +276,14 @@ start11(Config) when is_list(Config) -> receive after 1 -> true end, Result = gen_statem:start(GlobalSTM, ?MODULE, start_arg(Config, []), []), - io:format("Result = ~p~n",[Result]), + ct:log("Result = ~p~n",[Result]), {ok,_Pid3} = Result, stop_it(GlobalSTM), ok = verify_empty_msgq(). %% Via register linked -start12(Config) when is_list(Config) -> +start12(Config) -> dummy_via:reset(), VIA = {via,dummy_via,my_stm}, @@ -378,19 +376,20 @@ stop7(Config) -> %% Anonymous on remote node stop8(Config) -> - {ok,Node} = ?t:start_node(gen_statem_stop8, slave, []), + Node = gen_statem_stop8, + {ok,NodeName} = ct_slave:start(Node), Dir = filename:dirname(code:which(?MODULE)), - rpc:call(Node, code, add_path, [Dir]), + rpc:call(NodeName, code, add_path, [Dir]), {ok,Pid} = rpc:call( - Node, gen_statem,start, + NodeName, gen_statem,start, [?MODULE,start_arg(Config, []),[]]), ok = gen_statem:stop(Pid), - false = rpc:call(Node, erlang, is_process_alive, [Pid]), + false = rpc:call(NodeName, erlang, is_process_alive, [Pid]), noproc = ?EXPECT_FAILURE(gen_statem:stop(Pid), Reason1), - true = ?t:stop_node(Node), - {{nodedown,Node},{sys,terminate,_}} = + {ok,NodeName} = ct_slave:stop(Node), + {{nodedown,NodeName},{sys,terminate,_}} = ?EXPECT_FAILURE(gen_statem:stop(Pid), Reason2), ok. @@ -398,46 +397,48 @@ stop8(Config) -> stop9(Config) -> Name = to_stop, LocalSTM = {local,Name}, - {ok,Node} = ?t:start_node(gen_statem__stop9, slave, []), - STM = {Name,Node}, + Node = gen_statem__stop9, + {ok,NodeName} = ct_slave:start(Node), + STM = {Name,NodeName}, Dir = filename:dirname(code:which(?MODULE)), - rpc:call(Node, code, add_path, [Dir]), + rpc:call(NodeName, code, add_path, [Dir]), {ok,Pid} = rpc:call( - Node, gen_statem, start, + NodeName, gen_statem, start, [LocalSTM,?MODULE,start_arg(Config, []),[]]), ok = gen_statem:stop(STM), - undefined = rpc:call(Node,erlang,whereis,[Name]), - false = rpc:call(Node,erlang,is_process_alive,[Pid]), + undefined = rpc:call(NodeName,erlang,whereis,[Name]), + false = rpc:call(NodeName,erlang,is_process_alive,[Pid]), noproc = ?EXPECT_FAILURE(gen_statem:stop(STM), Reason1), - true = ?t:stop_node(Node), - {{nodedown,Node},{sys,terminate,_}} = + {ok,NodeName} = ct_slave:stop(Node), + {{nodedown,NodeName},{sys,terminate,_}} = ?EXPECT_FAILURE(gen_statem:stop(STM), Reason2), ok. %% Globally registered name on remote node stop10(Config) -> + Node = gen_statem_stop10, STM = {global,to_stop}, - {ok,Node} = ?t:start_node(gen_statem_stop10, slave, []), + {ok,NodeName} = ct_slave:start(Node), Dir = filename:dirname(code:which(?MODULE)), - rpc:call(Node,code,add_path,[Dir]), + rpc:call(NodeName,code,add_path,[Dir]), {ok,Pid} = rpc:call( - Node, gen_statem, start, + NodeName, gen_statem, start, [STM,?MODULE,start_arg(Config, []),[]]), global:sync(), ok = gen_statem:stop(STM), - false = rpc:call(Node, erlang, is_process_alive, [Pid]), + false = rpc:call(NodeName, erlang, is_process_alive, [Pid]), noproc = ?EXPECT_FAILURE(gen_statem:stop(STM), Reason1), - true = ?t:stop_node(Node), + {ok,NodeName} = ct_slave:stop(Node), noproc = ?EXPECT_FAILURE(gen_statem:stop(STM), Reason2), ok. %% Check that time outs in calls work -abnormal1(Config) when is_list(Config) -> +abnormal1(Config) -> Name = abnormal1, LocalSTM = {local,Name}, @@ -455,7 +456,7 @@ abnormal1(Config) when is_list(Config) -> %% Check that bad return values makes the stm crash. Note that we must %% trap exit since we must link to get the real bad_return_ error -abnormal2(Config) when is_list(Config) -> +abnormal2(Config) -> OldFl = process_flag(trap_exit, true), {ok,Pid} = gen_statem:start_link(?MODULE, start_arg(Config, []), []), @@ -465,13 +466,13 @@ abnormal2(Config) when is_list(Config) -> receive {'EXIT',Pid,{bad_return_value,badreturn}} -> ok after 5000 -> - ?t:fail(gen_statem_did_not_die) + ct:fail(gen_statem_did_not_die) end, process_flag(trap_exit, OldFl), ok = verify_empty_msgq(). -shutdown(Config) when is_list(Config) -> +shutdown(Config) -> process_flag(trap_exit, true), {ok,Pid0} = gen_statem:start_link(?MODULE, start_arg(Config, []), []), @@ -486,15 +487,15 @@ shutdown(Config) when is_list(Config) -> receive Any -> - io:format("Unexpected: ~p", [Any]), - ?t:fail() + ct:log("Unexpected: ~p", [Any]), + ct:fail({unexpected,Any}) after 500 -> ok end. -sys1(Config) when is_list(Config) -> +sys1(Config) -> {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []), {status, Pid, {module,gen_statem}, _} = sys:get_status(Pid), sys:suspend(Pid), @@ -507,7 +508,7 @@ sys1(Config) when is_list(Config) -> end), receive {Tag,_} -> - ?t:fail() + ct:fail(should_be_suspended) after 3000 -> exit(Caller, ok) end, @@ -517,7 +518,7 @@ sys1(Config) when is_list(Config) -> sys:resume(Pid), stop_it(Pid). -call_format_status(Config) when is_list(Config) -> +call_format_status(Config) -> {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []), Status = sys:get_status(Pid), {status,Pid,_Mod,[_PDict,running,_,_, Data]} = Status, @@ -573,7 +574,7 @@ call_format_status(Config) when is_list(Config) -> -error_format_status(Config) when is_list(Config) -> +error_format_status(Config) -> error_logger_forwarder:register(), OldFl = process_flag(trap_exit, true), Data = "called format_status", @@ -593,10 +594,10 @@ error_format_status(Config) when is_list(Config) -> ok; Other when is_tuple(Other), element(1, Other) =:= error -> error_logger_forwarder:unregister(), - ?t:fail({unexpected,Other}) + ct:fail({unexpected,Other}) after 1000 -> error_logger_forwarder:unregister(), - ?t:fail() + ct:fail(timeout) end, process_flag(trap_exit, OldFl), error_logger_forwarder:unregister(), @@ -609,7 +610,7 @@ error_format_status(Config) when is_list(Config) -> end, ok = verify_empty_msgq(). -terminate_crash_format(Config) when is_list(Config) -> +terminate_crash_format(Config) -> error_logger_forwarder:register(), OldFl = process_flag(trap_exit, true), Data = crash_terminate, @@ -629,10 +630,10 @@ terminate_crash_format(Config) when is_list(Config) -> ok; Other when is_tuple(Other), element(1, Other) =:= error -> error_logger_forwarder:unregister(), - ?t:fail({unexpected,Other}) + ct:fail({unexpected,Other}) after 1000 -> error_logger_forwarder:unregister(), - ?t:fail() + ct:fail(timeout) end, process_flag(trap_exit, OldFl), error_logger_forwarder:unregister(), @@ -646,7 +647,7 @@ terminate_crash_format(Config) when is_list(Config) -> ok = verify_empty_msgq(). -get_state(Config) when is_list(Config) -> +get_state(Config) -> State = self(), {ok,Pid} = gen_statem:start( @@ -675,7 +676,7 @@ get_state(Config) when is_list(Config) -> stop_it(Pid3), ok = verify_empty_msgq(). -replace_state(Config) when is_list(Config) -> +replace_state(Config) -> State = self(), {ok, Pid} = gen_statem:start( @@ -707,7 +708,7 @@ replace_state(Config) when is_list(Config) -> ok = verify_empty_msgq(). %% Hibernation -hibernate(Config) when is_list(Config) -> +hibernate(Config) -> OldFl = process_flag(trap_exit, true), {ok,Pid0} = @@ -718,7 +719,7 @@ hibernate(Config) when is_list(Config) -> receive {'EXIT',Pid0,normal} -> ok after 5000 -> - ?t:fail(gen_statem_did_not_die) + ct:fail(gen_statem_did_not_die) end, {ok,Pid} = @@ -801,7 +802,7 @@ hibernate(Config) when is_list(Config) -> receive {'EXIT',Pid,normal} -> ok after 5000 -> - ?t:fail(gen_statem_did_not_die) + ct:fail(gen_statem_did_not_die) end, ok = verify_empty_msgq(). @@ -810,8 +811,8 @@ is_in_erlang_hibernate(Pid) -> is_in_erlang_hibernate_1(200, Pid). is_in_erlang_hibernate_1(0, Pid) -> - io:format("~p\n", [erlang:process_info(Pid, current_function)]), - ?t:fail(not_in_erlang_hibernate_3); + ct:log("~p\n", [erlang:process_info(Pid, current_function)]), + ct:fail(not_in_erlang_hibernate_3); is_in_erlang_hibernate_1(N, Pid) -> {current_function,MFA} = erlang:process_info(Pid, current_function), case MFA of @@ -827,8 +828,8 @@ is_not_in_erlang_hibernate(Pid) -> is_not_in_erlang_hibernate_1(200, Pid). is_not_in_erlang_hibernate_1(0, Pid) -> - io:format("~p\n", [erlang:process_info(Pid, current_function)]), - ?t:fail(not_in_erlang_hibernate_3); + ct:log("~p\n", [erlang:process_info(Pid, current_function)]), + ct:fail(not_in_erlang_hibernate_3); is_not_in_erlang_hibernate_1(N, Pid) -> {current_function,MFA} = erlang:process_info(Pid, current_function), case MFA of @@ -839,10 +840,8 @@ is_not_in_erlang_hibernate_1(N, Pid) -> ok end. -%%sys1(suite) -> []; -%%sys1(_) -> -enter_loop(Config) when is_list(Config) -> +enter_loop(_Config) -> OldFlag = process_flag(trap_exit, true), dummy_via:reset(), @@ -856,7 +855,7 @@ enter_loop(Config) when is_list(Config) -> {'EXIT',Pid1a,normal} -> ok after 5000 -> - ?t:fail(gen_statem_did_not_die) + ct:fail(gen_statem_did_not_die) end, %% Unregistered process + {local,Name} @@ -866,7 +865,7 @@ enter_loop(Config) when is_list(Config) -> {'EXIT',Pid1b,process_not_registered} -> ok after 5000 -> - ?t:fail(gen_statem_did_not_die) + ct:fail(gen_statem_did_not_die) end, %% Globally registered process + {global,Name} @@ -878,7 +877,7 @@ enter_loop(Config) when is_list(Config) -> {'EXIT',Pid2a,normal} -> ok after 5000 -> - ?t:fail(gen_statem_did_not_die) + ct:fail(gen_statem_did_not_die) end, %% Unregistered process + {global,Name} @@ -888,7 +887,7 @@ enter_loop(Config) when is_list(Config) -> {'EXIT',Pid2b,process_not_registered_globally} -> ok after 5000 -> - ?t:fail(gen_statem_did_not_die) + ct:fail(gen_statem_did_not_die) end, %% Unregistered process + no name @@ -900,7 +899,7 @@ enter_loop(Config) when is_list(Config) -> {'EXIT',Pid3,normal} -> ok after 5000 -> - ?t:fail(gen_statem_did_not_die) + ct:fail(gen_statem_did_not_die) end, %% Process not started using proc_lib @@ -913,7 +912,7 @@ enter_loop(Config) when is_list(Config) -> {'EXIT',Pid4,process_was_not_started_by_proc_lib} -> ok after 5000 -> - ?t:fail(gen_statem_did_not_die) + ct:fail(gen_statem_did_not_die) end, %% Make sure I am the parent, ie that ordering a shutdown will @@ -926,7 +925,7 @@ enter_loop(Config) when is_list(Config) -> {'EXIT',Pid5,shutdown} -> ok after 5000 -> - ?t:fail(gen_statem_did_not_die) + ct:fail(gen_statem_did_not_die) end, %% Make sure gen_statem:enter_loop does not accept {local,Name} @@ -939,7 +938,7 @@ enter_loop(Config) when is_list(Config) -> {'EXIT',Pid6a,process_not_registered} -> ok after 1000 -> - ?t:fail(gen_statem_started) + ct:fail(gen_statem_started) end, unregister(armitage), @@ -953,7 +952,7 @@ enter_loop(Config) when is_list(Config) -> {'EXIT',Pid6b,process_not_registered_globally} -> ok after 1000 -> - ?t:fail(gen_statem_started) + ct:fail(gen_statem_started) end, global:unregister_name(armitage), @@ -964,7 +963,7 @@ enter_loop(Config) when is_list(Config) -> {'EXIT',Pid6c,{process_not_registered_via,dummy_via}} -> ok after 1000 -> - ?t:fail( + ct:fail( {gen_statem_started, process_info(self(), messages)}) end, @@ -1105,7 +1104,7 @@ do_sync_disconnect(STM) -> verify_empty_msgq() -> receive after 500 -> ok end, - [] = ?t:messages_get(), + [] = flush(), ok. start_arg(Config, Arg) -> @@ -1388,3 +1387,11 @@ format_status(terminate, [_Pdict,State,Data]) -> {formatted,State,Data}; format_status(normal, [_Pdict,_State,_Data]) -> [format_status_called]. + +flush() -> + receive + Msg -> + [Msg|flush()] + after 0 -> + [] + end. |