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