summaryrefslogtreecommitdiff
path: root/lib/ssl/test/ssl_bench_test_lib.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ssl/test/ssl_bench_test_lib.erl')
-rw-r--r--lib/ssl/test/ssl_bench_test_lib.erl59
1 files changed, 58 insertions, 1 deletions
diff --git a/lib/ssl/test/ssl_bench_test_lib.erl b/lib/ssl/test/ssl_bench_test_lib.erl
index 04cda889df..648b42fb03 100644
--- a/lib/ssl/test/ssl_bench_test_lib.erl
+++ b/lib/ssl/test/ssl_bench_test_lib.erl
@@ -20,7 +20,7 @@
-module(ssl_bench_test_lib).
%% API
--export([setup/1]).
+-export([setup/1, cleanup/1]).
%% Internal exports
-export([setup_server/1]).
@@ -28,6 +28,51 @@
-define(remote_host, "NETMARKS_REMOTE_HOST").
setup(Name) ->
+ NameStr = atom_to_list(Name),
+ case os:getenv(?remote_host) of
+ false ->
+ {ok, Host} = inet:gethostname(),
+ Remote = false,
+ ok;
+ Host ->
+ Remote = true,
+ ok
+ end,
+ Node = list_to_atom(NameStr ++ "@" ++ Host),
+ case net_adm:ping(Node) of
+ pong ->
+ Node;
+ pang ->
+ PeerOptions =
+ #{name => NameStr,
+ host => Host},
+ ct:pal("PeerOptions: ~p~n", [PeerOptions]),
+ {ok, _Pid, Node} =
+ peer:start(
+ case Remote of
+ true ->
+ Ssh = find_executable("ssh"),
+ Erl = find_executable("erl"),
+ PeerOptions#{exec => {Ssh, [Host, Erl]}};
+ false ->
+ PeerOptions
+ end),
+ Path = code:get_path(),
+ true = erpc:call(Node, code, set_path, [Path]),
+ ok = erpc:call(Node, ?MODULE, setup_server, [node()]),
+ ct:pal("Client (~p) using ~ts~n",[node(), code:which(ssl)]),
+ (Node =:= node()) andalso restrict_schedulers(client),
+ Node
+ end.
+
+find_executable(Prog) ->
+ case os:find_executable(Prog) of
+ false -> Prog;
+ P -> P
+ end.
+
+-ifdef(undefined).
+setup(Name) ->
Host = case os:getenv(?remote_host) of
false ->
{ok, This} = inet:gethostname(),
@@ -61,6 +106,7 @@ setup(Name) ->
ct:pal("Client (~p) using ~ts~n",[node(), code:which(ssl)]),
(Node =:= node()) andalso restrict_schedulers(client),
Node.
+-endif.
setup_server(ClientNode) ->
(ClientNode =:= node()) andalso restrict_schedulers(server),
@@ -73,3 +119,14 @@ restrict_schedulers(Type) ->
Extra = if (Type =:= server) -> -Extra0; true -> Extra0 end,
Scheds = erlang:system_info(schedulers),
erlang:system_flag(schedulers_online, (Scheds div 2) + Extra).
+
+cleanup(Node) ->
+ try erpc:call(Node, erlang, halt, [], 5000) of
+ Result ->
+ ct:fail({unexpected_return, Result})
+ catch
+ error : {erpc,noconnection} ->
+ ok;
+ Class : Reason : Stacktrace ->
+ ct:fail({unexpected_exception, {Class,Reason,Stacktrace}})
+ end.