diff options
Diffstat (limited to 'lib/kernel/test/init_SUITE.erl')
-rw-r--r-- | lib/kernel/test/init_SUITE.erl | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/kernel/test/init_SUITE.erl b/lib/kernel/test/init_SUITE.erl index 9d35611d93..47e44200bf 100644 --- a/lib/kernel/test/init_SUITE.erl +++ b/lib/kernel/test/init_SUITE.erl @@ -25,7 +25,7 @@ init_per_group/2,end_per_group/2]). -export([get_arguments/1, get_argument/1, boot_var/1, restart/1, - many_restarts/0, many_restarts/1, + many_restarts/0, many_restarts/1, restart_with_mode/1, get_plain_arguments/1, reboot/1, stop_status/1, stop/1, get_status/1, script_id/1, find_system_processes/0]). @@ -48,7 +48,7 @@ suite() -> all() -> [get_arguments, get_argument, boot_var, - many_restarts, + many_restarts, restart_with_mode, get_plain_arguments, restart, stop_status, get_status, script_id, {group, boot}]. @@ -348,6 +348,29 @@ wait_for(N,Node,EHPid) -> wait_for(N-1,Node,EHPid) end. +restart_with_mode(Config) when is_list(Config) -> + %% We cannot use loose_node because it doesn't run in + %% embedded mode so we quickly start one that exits after restarting + {ok,[[Erl]]} = init:get_argument(progname), + ModPath = filename:dirname(code:which(?MODULE)), + + Quote = case os:type() of + {win32,_} -> + [$"]; + {unix,_} -> + [$'] + end, + + Eval1 = Quote ++ "Mode=code:get_mode(), io:fwrite(Mode), case Mode of interactive -> init:restart([{mode,embedded}]); embedded -> erlang:halt() end" ++ Quote, + Cmd1 = Erl ++ " -mode interactive -noshell -eval " ++ Eval1, + "interactiveembedded" = os:cmd(Cmd1), + + Eval2 = Quote ++ "Mode=code:get_mode(), io:fwrite(Mode), case Mode of embedded -> init:restart([{mode,interactive}]); interactive -> erlang:halt() end" ++ Quote, + Cmd2 = Erl ++ " -mode embedded -noshell -eval " ++ Eval2, + "embeddedinteractive" = os:cmd(Cmd2), + + ok. + %% ------------------------------------------------ %% Slave executes erlang:halt() on master nodedown. %% Therefore the slave process must be killed |