diff options
author | Erlang/OTP <[email protected]> | 2019-03-18 18:02:31 +0100 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2019-03-18 18:02:31 +0100 |
commit | d4266651c5662c3b6addcea291bc6bffffbb7fb5 (patch) | |
tree | 53702fc58bf4ebabe917f673293070d341ed8d18 /lib/erl_interface/test/erl_call_SUITE.erl | |
parent | 620ac3e68c5bc8b36143965fcf2892a07dc005c4 (diff) | |
parent | 543ca376a922c6dbe34e2207c4c512c5f6b5d624 (diff) | |
download | otp-d4266651c5662c3b6addcea291bc6bffffbb7fb5.tar.gz otp-d4266651c5662c3b6addcea291bc6bffffbb7fb5.tar.bz2 otp-d4266651c5662c3b6addcea291bc6bffffbb7fb5.zip |
Merge branch 'rickard/erl_call/ERL-881/OTP-15676' into maint-21
* rickard/erl_call/ERL-881/OTP-15676:
Add smoke test for erl_call
Add new api functions to ei_fake_prog
Fix timeout value when waiting for emulator start
Fix initialization of erl_call
Diffstat (limited to 'lib/erl_interface/test/erl_call_SUITE.erl')
-rw-r--r-- | lib/erl_interface/test/erl_call_SUITE.erl | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/erl_interface/test/erl_call_SUITE.erl b/lib/erl_interface/test/erl_call_SUITE.erl new file mode 100644 index 0000000000..9e2b2e4251 --- /dev/null +++ b/lib/erl_interface/test/erl_call_SUITE.erl @@ -0,0 +1,96 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2019. 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. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% %CopyrightEnd% +%% + +%% +-module(erl_call_SUITE). + +-include_lib("common_test/include/ct.hrl"). + +-export([all/0, smoke/1]). + +all() -> + [smoke]. + +smoke(Config) when is_list(Config) -> + ErlCall = find_erl_call(), + NameSwitch = case net_kernel:longnames() of + true -> + "-name"; + false -> + "-sname" + end, + Name = atom_to_list(?MODULE) + ++ "-" + ++ integer_to_list(erlang:system_time(microsecond)), + + ArgsList = ["-s", "-a", "erlang node", NameSwitch, Name], + io:format("erl_call: \"~ts\"\n~nargs list: ~p~n", [ErlCall, ArgsList]), + CmdRes = get_smoke_port_res(open_port({spawn_executable, ErlCall}, + [{args, ArgsList}, eof]), []), + io:format("CmdRes: ~p~n", [CmdRes]), + + [_, Hostname] = string:lexemes(atom_to_list(node()), "@"), + NodeName = list_to_atom(Name ++ "@" ++ Hostname), + io:format("NodeName: ~p~n~n", [NodeName]), + + pong = net_adm:ping(NodeName), + rpc:cast(NodeName, erlang, halt, []), + NodeName = list_to_atom(string:trim(CmdRes, both, "'")), + ok. + +% +% Utility functions... +% + +find_erl_call() -> + ErlCallName = case os:type() of + {win32, _} -> "erl_call.exe"; + _ -> "erl_call" + end, + LibDir = code:lib_dir(erl_interface), + InstalledErlCall = filename:join([LibDir, "bin", ErlCallName]), + TargetDir = erlang:system_info(system_architecture), + TargetErlCall = filename:join([LibDir, "bin", TargetDir, ErlCallName]), + + try + lists:foreach(fun (F) -> + io:format("Checking: \"~ts\"~n", [F]), + case file:read_file_info(F) of + {ok, _} -> + throw(F); + _ -> + ok + end + end, + [InstalledErlCall, TargetErlCall]), + exit({missing, erl_call}) + catch + throw:ErlCall -> + ErlCall + end. + +get_smoke_port_res(Port, Acc) when is_port(Port) -> + receive + {Port, {data, Data}} -> + get_smoke_port_res(Port, [Acc|Data]); + {Port, eof} -> + lists:flatten(Acc) + end. + |