diff options
Diffstat (limited to 'erts/emulator/test/smoke_test_SUITE.erl')
-rw-r--r-- | erts/emulator/test/smoke_test_SUITE.erl | 165 |
1 files changed, 71 insertions, 94 deletions
diff --git a/erts/emulator/test/smoke_test_SUITE.erl b/erts/emulator/test/smoke_test_SUITE.erl index 5b46342127..b59390a854 100644 --- a/erts/emulator/test/smoke_test_SUITE.erl +++ b/erts/emulator/test/smoke_test_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2011-2018. All Rights Reserved. +%% Copyright Ericsson AB 2011-2022. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -24,71 +24,63 @@ %-compile(export_all). -export([all/0, suite/0, - init_per_testcase/2, end_per_testcase/2]). + init_per_testcase/2, end_per_testcase/2]). -export([boot_combo/1, native_atomics/1, jump_table/1]). suite() -> - [{ct_hooks,[ts_install_cth]}, - {timetrap, {minutes, 2}}]. + [{ct_hooks, [ts_install_cth]}, + {timetrap, {minutes, 2}}]. -all() -> +all() -> [boot_combo, native_atomics, jump_table]. init_per_testcase(boot_combo = Case, Config) when is_list(Config) -> case erlang:system_info(build_type) of - opt -> - init_per_tc(Case, Config); - _ -> - {skip,"Cannot test boot_combo in special builds since beam.* may not exist"} + opt -> + init_per_tc(Case, Config); + _ -> + {skip, "Cannot test boot_combo in special builds since beam.* may not exist"} end; init_per_testcase(Case, Config) when is_list(Config) -> init_per_tc(Case, Config). init_per_tc(Case, Config) -> - [{testcase, Case}|Config]. + [{testcase, Case} | Config]. end_per_testcase(_Case, Config) when is_list(Config) -> - ok. + erts_test_utils:ept_check_leaked_nodes(Config). %%% %%% The test cases ------------------------------------------------------------- %%% boot_combo(Config) when is_list(Config) -> - ZFlags = os:getenv("ERL_ZFLAGS", ""), - NOOP = fun () -> ok end, - A42 = fun () -> - case erlang:system_info(threads) of - true -> - 42 = erlang:system_info(thread_pool_size); - false -> - ok - end - end, - try - chk_boot(Config, "+Ktrue", NOOP), - chk_boot(Config, "+A42", A42), - chk_boot(Config, "+Ktrue +A42", A42), - - WBTArgs = ["very_short", "short", "medium", "long", "very_long"], - WTArgs = ["very_low", "low", "medium", "high", "very_high"], - [chk_boot(Config, - " +sbwt " ++ WBT ++ - " +sbwtdcpu " ++ WBT ++ - " +sbwtdio " ++ WBT ++ - " +swt " ++ WT ++ - " +swtdcpu " ++ WT ++ - " +swtdio " ++ WT, NOOP) || WBT <- WBTArgs, WT <- WTArgs], - - WSArgs = ["legacy", "default"], - [chk_boot(Config, " +sws " ++ WS, NOOP) || WS <- WSArgs], - - %% A lot more combos could be implemented... - ok - after - os:putenv("ERL_ZFLAGS", ZFlags) - end. + NOOP = fun() -> ok end, + A42 = fun() -> + case erlang:system_info(threads) of + true -> + 42 = erlang:system_info(thread_pool_size); + false -> + ok + end + end, + + chk_boot(["+Ktrue"], NOOP), + chk_boot(["+A42"], A42), + chk_boot(["+Ktrue", "+A42"], A42), + + WBTArgs = ["very_short", "short", "medium", "long", "very_long"], + WTArgs = ["very_low", "low", "medium", "high", "very_high"], + [chk_boot(["+sbwt", WBT, + "+sbwtdcpu", WBT, + "+sbwtdio", WBT, + "+swt", WT, + "+swtdcpu", WT, + "+swtdio", WT], NOOP) || WBT <- WBTArgs, WT <- WTArgs], + + WSArgs = ["legacy", "default"], + [chk_boot(["+sws", WS], NOOP) || WS <- WSArgs]. native_atomics(Config) when is_list(Config) -> NA32Key = "32-bit native atomics", @@ -96,70 +88,55 @@ native_atomics(Config) when is_list(Config) -> DWNAKey = "Double word native atomics", EthreadInfo = erlang:system_info(ethread_info), io:format("~p~n", [EthreadInfo]), - {value,{NA32Key, NA32, _}} = lists:keysearch(NA32Key, 1, EthreadInfo), - {value,{NA64Key, NA64, _}} = lists:keysearch(NA64Key, 1, EthreadInfo), - {value,{DWNAKey, DWNA, _}} = lists:keysearch(DWNAKey, 1, EthreadInfo), + {value, {NA32Key, NA32, _}} = lists:keysearch(NA32Key, 1, EthreadInfo), + {value, {NA64Key, NA64, _}} = lists:keysearch(NA64Key, 1, EthreadInfo), + {value, {DWNAKey, DWNA, _}} = lists:keysearch(DWNAKey, 1, EthreadInfo), case {erlang:system_info(build_type), NA32, NA64, DWNA} of - {opt, "no", "no", _} -> - ct:fail(optimized_smp_runtime_without_native_atomics); - _ -> - {comment, - NA32 ++ " 32-bit, " - ++ NA64 ++ " 64-bit, and " - ++ DWNA ++ " double word native atomics"} + {opt, "no", "no", _} -> + ct:fail(optimized_smp_runtime_without_native_atomics); + _ -> + {comment, + NA32 ++ " 32-bit, " + ++ NA64 ++ " 64-bit, and " + ++ DWNA ++ " double word native atomics"} end. jump_table(Config) when is_list(Config) -> case erlang:system_info(beam_jump_table) of - true -> - ok; - false -> - case erlang:system_info(build_type) of - opt -> - ct:fail(optimized_without_beam_jump_table); - BT -> - {comment, "No beam jump table, but build type is " ++ atom_to_list(BT)} - end + true -> + ok; + false -> + case erlang:system_info(build_type) of + opt -> + ct:fail(optimized_without_beam_jump_table); + BT -> + {comment, "No beam jump table, but build type is " ++ atom_to_list(BT)} + end end. - + %%% %%% Aux functions -------------------------------------------------------------- %%% -chk_boot(Config, Args, Fun) -> - true = os:putenv("ERL_ZFLAGS", Args), +chk_boot(Args, Fun) -> Success = make_ref(), Parent = self(), - io:format("--- Testing ~s~n", [Args]), - {ok, Node} = start_node(Config), - Pid = spawn_link(Node, fun () -> - Fun(), - Parent ! {self(), Success} - end), + io:format("--- Testing ~s~n", [lists:join(" ", Args)]), + {ok, Peer, Node} = ?CT_PEER(Args), + %% if spawn_link is used, race condition happens when + %% remote process exits with 'noconnection' reason and fails + %% the test case + Pid = spawn(Node, fun() -> + Fun(), + Parent ! {self(), Success} + end), receive - {Pid, Success} -> - Node = node(Pid), - stop_node(Node), - io:format("--- Success!~n", []), - ok + {Pid, Success} -> + Node = node(Pid), + peer:stop(Peer), + io:format("--- Success!~n", []), + ok end. -start_node(Config) -> - start_node(Config, ""). - -start_node(Config, Args) when is_list(Config) -> - Pa = filename:dirname(code:which(?MODULE)), - Name = list_to_atom(atom_to_list(?MODULE) - ++ "-" - ++ atom_to_list(proplists:get_value(testcase, Config)) - ++ "-" - ++ integer_to_list(erlang:system_time(second)) - ++ "-" - ++ integer_to_list(erlang:unique_integer([positive]))), - Opts = [{args, "-pa "++Pa++" "++Args}], - test_server:start_node(Name, slave, Opts). - -stop_node(Node) -> - test_server:stop_node(Node). |