2424-export ([all /0 , suite /0 , groups /0 , init_per_suite /1 , end_per_suite /1 ,
2525 init_per_group /2 , end_per_group /2 ,
2626 app_test /1 , appup_test /1 , eunit_test /1 , eunit_exact_test /1 ,
27- fixture_test /1 , primitive_test /1 , surefire_utf8_test /1 ,
27+ fixture_test /1 , node_test / 1 , primitive_test /1 , surefire_utf8_test /1 ,
2828 surefire_latin_test /1 , surefire_c0_test /1 , surefire_ensure_dir_test /1 ,
2929 stacktrace_at_timeout_test /1 , scale_timeouts_test /1 ,
3030 report_failed_setup_inparallel_test /1 , parse_commandline_test /1 ]).
@@ -42,8 +42,8 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
4242
4343all () ->
4444 [app_test , appup_test , eunit_test , eunit_exact_test , primitive_test ,
45- fixture_test , surefire_utf8_test , surefire_latin_test , surefire_c0_test ,
46- surefire_ensure_dir_test , stacktrace_at_timeout_test ,
45+ fixture_test , node_test , surefire_utf8_test , surefire_latin_test ,
46+ surefire_c0_test , surefire_ensure_dir_test , stacktrace_at_timeout_test ,
4747 scale_timeouts_test , report_failed_setup_inparallel_test ,
4848 parse_commandline_test ].
4949
@@ -155,6 +155,64 @@ fixture_test(Config) when is_list(Config) ->
155155 [{1 , fun (_A , _B ) -> fun () -> a_test end end }]}),
156156 ok .
157157
158+ node_test (Config ) when is_list (Config ) ->
159+ T = fun () -> ok end ,
160+ % % Plain tests
161+ ok = eunit :test ({node , eunit_node_plain , [T , T , T ]}),
162+ % % Instantiator receives node name as atom
163+ ok = eunit :test (
164+ {node , eunit_node_inst , fun (Node ) ->
165+ true = is_atom (Node ),
166+ {spawn , Node , [
167+ fun () -> Node = node () end
168+ ]}
169+ end }),
170+ % % With extra args
171+ ok = eunit :test (
172+ {node , eunit_node_args , " +S 1" , fun (Node ) ->
173+ true = is_atom (Node ),
174+ {spawn , Node , [T ]}
175+ end }),
176+ % % Test {node, ...} during system initialization (non-distributed).
177+ % % Verifies that auto-starting net_kernel is safe with -eval, -s,
178+ % % -run, and -S flags as described in init(3).
179+ PrivDir = proplists :get_value (priv_dir , Config , " ." ),
180+ HelperMod = eunit_node_init_test ,
181+ HelperSrc = filename :join (PrivDir , atom_to_list (HelperMod ) ++ " .erl" ),
182+ ok = file :write_file (HelperSrc ,
183+ " -module(" ++ atom_to_list (HelperMod ) ++ " ).\n "
184+ " -export([start/0, start/1]).\n "
185+ " start() -> start([]).\n "
186+ " start(_) ->\n "
187+ " ok = eunit:test({node, init_test, fun() -> ok end}),\n "
188+ " halt(0).\n " ),
189+ {ok , HelperMod } = compile :file (HelperSrc , [{outdir , PrivDir }]),
190+ [Exec | ExecArgs ] = string :split (ct :get_progname (), " " , all ),
191+ Erl = os :find_executable (Exec ),
192+ BaseArgs = ExecArgs ++ [" -noshell" ],
193+ % % -eval
194+ 0 = run_erl_cmd (Erl , BaseArgs ++ [" -eval" ,
195+ " ok = eunit:test({node, init_eval, fun() -> ok end}), halt(0)." ]),
196+ % % -s
197+ 0 = run_erl_cmd (Erl , BaseArgs ++ [" -pa" , PrivDir ,
198+ " -s" , atom_to_list (HelperMod ), " start" ]),
199+ % % -run
200+ 0 = run_erl_cmd (Erl , BaseArgs ++ [" -pa" , PrivDir ,
201+ " -run" , atom_to_list (HelperMod ), " start" ]),
202+ % % -S
203+ 0 = run_erl_cmd (Erl , BaseArgs ++ [" -pa" , PrivDir ,
204+ " -S" , atom_to_list (HelperMod ), " start" ]),
205+ ok .
206+
207+ run_erl_cmd (Erl , Args ) ->
208+ Port = open_port ({spawn_executable , Erl },
209+ [{args , Args }, stderr_to_stdout , exit_status , hide ]),
210+ receive
211+ {Port , {exit_status , Status }} -> Status
212+ after 30_000 ->
213+ ct :fail ({erl_timeout , Args })
214+ end .
215+
158216check_test_results (Primitive , Expected ) ->
159217 receive
160218 {test_report , TestReport } ->
0 commit comments