File 0668-ssh-Remove-inet_port-from-tests.patch of Package erlang

From 3e1c5455d404180aa4362731098137ef2cc74b18 Mon Sep 17 00:00:00 2001
From: Hans Nilsson <hans@erlang.org>
Date: Fri, 10 Jan 2020 10:27:01 +0100
Subject: [PATCH 1/2] ssh: Remove inet_port() from tests

---
 lib/ssh/test/ssh_basic_SUITE.erl   | 14 ++++++++------
 lib/ssh/test/ssh_relay.erl         | 21 ++++++++++++++-------
 lib/ssh/test/ssh_sup_SUITE.erl     | 33 +++++++++++++--------------------
 lib/ssh/test/ssh_test_lib.erl      | 16 ----------------
 lib/ssh/test/ssh_upgrade_SUITE.erl |  3 +--
 5 files changed, 36 insertions(+), 51 deletions(-)

diff --git a/lib/ssh/test/ssh_basic_SUITE.erl b/lib/ssh/test/ssh_basic_SUITE.erl
index 30d03f842f..f8b883c643 100644
--- a/lib/ssh/test/ssh_basic_SUITE.erl
+++ b/lib/ssh/test/ssh_basic_SUITE.erl
@@ -866,7 +866,7 @@ daemon_already_started(Config) when is_list(Config) ->
 %%% Test that a failed daemon start does not leave the port open
 daemon_error_closes_port(Config) ->
     GoodSystemDir = proplists:get_value(data_dir, Config),
-    Port = ssh_test_lib:inet_port(),
+    Port = inet_port(),
     {error,_} = ssh_test_lib:daemon(Port, []), % No system dir
     case ssh_test_lib:daemon(Port, [{system_dir, GoodSystemDir}]) of
         {error,eaddrinuse} ->
@@ -1681,9 +1681,7 @@ renegotiate1(Config) ->
     {Pid, Host, DPort} = ssh_test_lib:std_daemon(Config,[{max_random_length_padding,0},
 							 {preferred_algorithms,Algs}]),
 
-    RPort = ssh_test_lib:inet_port(),
-    {ok,RelayPid} = ssh_relay:start_link({0,0,0,0}, RPort, Host, DPort),
-
+    {ok,RelayPid,_,RPort} = ssh_relay:start_link({0,0,0,0}, 0, Host, DPort),
 
     ConnectionRef = ssh_test_lib:std_connect(Config, Host, RPort, [{max_random_length_padding,0}]),
     {ok, SftpPid} = ssh_sftp:start_channel(ConnectionRef),
@@ -1721,8 +1719,7 @@ renegotiate2(Config) ->
     {Pid, Host, DPort} = ssh_test_lib:std_daemon(Config,[{max_random_length_padding,0},
 							 {preferred_algorithms,Algs}]),
 
-    RPort = ssh_test_lib:inet_port(),
-    {ok,RelayPid} = ssh_relay:start_link({0,0,0,0}, RPort, Host, DPort),
+    {ok,RelayPid,_,RPort} = ssh_relay:start_link({0,0,0,0}, 0, Host, DPort),
 
     ConnectionRef = ssh_test_lib:std_connect(Config, Host, RPort, [{max_random_length_padding,0}]),
     {ok, SftpPid} = ssh_sftp:start_channel(ConnectionRef),
@@ -1931,3 +1928,8 @@ new_do_shell_prompt(IO, N, Op, Str, More) ->
     new_do_shell(IO, N, [{Op,Str}|More]).
   
 %%--------------------------------------------------------------------
+inet_port() ->
+    {ok, Socket} = gen_tcp:listen(0, [{reuseaddr, true}]),
+    {ok, Port} = inet:port(Socket),
+    gen_tcp:close(Socket),
+    Port.
diff --git a/lib/ssh/test/ssh_relay.erl b/lib/ssh/test/ssh_relay.erl
index 763130358b..3bb4cb2071 100644
--- a/lib/ssh/test/ssh_relay.erl
+++ b/lib/ssh/test/ssh_relay.erl
@@ -28,8 +28,7 @@
 	 }).
 
 -record(state, {
-	  local_addr,
-	  local_port,
+          sockname,
 	  peer_addr,
 	  peer_port,
 	  lpid,
@@ -92,11 +91,17 @@ release_next(Srv, Dir, TriggerDir) ->
 %% @doc
 %% Starts the server
 %%
-%% @spec start_link() -> {ok, Pid} | ignore | {error, Error}
+%% @spec start_link() -> {ok, Pid, Host, Port} | ignore | {error, Error}
 %% @end
 %%--------------------------------------------------------------------
 start_link(ListenAddr, ListenPort, PeerAddr, PeerPort) ->
-    gen_server:start_link(?MODULE, [ListenAddr, ListenPort, PeerAddr, PeerPort], []).
+    case gen_server:start_link(?MODULE, [ListenAddr, ListenPort, PeerAddr, PeerPort], []) of
+        {ok,Pid} ->
+            {ok,{Host,Port}} = gen_server:call(Pid, get_sockname),
+            {ok, Pid, Host, Port};
+        Other ->
+            Other
+    end.
 
 stop(Srv) ->
     unlink(Srv),
@@ -126,11 +131,11 @@ init([ListenAddr, ListenPort, PeerAddr, PeerPort | _Options]) ->
 	     end,
     case gen_tcp:listen(ListenPort, [{reuseaddr, true}, {backlog, 1}, {active, false}, binary | IfAddr]) of
 	{ok, LSock} ->
+            {ok, SName} = inet:sockname(LSock),
 	    Parent = self(),
 	    {LPid, _LMod} = spawn_monitor(fun() -> listen(Parent, LSock) end),
-	    S = #state{local_addr = ListenAddr,
-		       local_port = ListenPort,
-		       lpid = LPid,
+	    S = #state{sockname = SName,
+                       lpid = LPid,
 		       peer_addr = ssh_test_lib:ntoa(
                                      ssh_test_lib:mangle_connect_address(PeerAddr)),
 		       peer_port = PeerPort
@@ -174,6 +179,8 @@ handle_call({release, Dir}, _From, State) ->
     end;
 handle_call({release_next, _Dir, _TriggerDir}, _From, State) ->
     {reply, {error, nyi}, State};
+handle_call(get_sockname, _From, State) ->
+    {reply, {ok,State#state.sockname}, State};
 
 handle_call(Request, _From, State) ->
     Reply = {unhandled, Request},
diff --git a/lib/ssh/test/ssh_sup_SUITE.erl b/lib/ssh/test/ssh_sup_SUITE.erl
index a0e3d809be..73bfc13eef 100644
--- a/lib/ssh/test/ssh_sup_SUITE.erl
+++ b/lib/ssh/test/ssh_sup_SUITE.erl
@@ -58,11 +58,10 @@ end_per_group(_GroupName, Config) ->
 init_per_suite(Config) ->
     ?CHECK_CRYPTO(
        begin
-	   Port = ssh_test_lib:inet_port(node()),
 	   PrivDir = proplists:get_value(priv_dir, Config),
 	   UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
 	   file:make_dir(UserDir),
-	   [{userdir, UserDir},{port, Port}, {host, "localhost"}, {host_ip, any} | Config]
+	   [{userdir, UserDir} | Config]
        end).
 
 end_per_suite(_) ->
@@ -136,13 +135,11 @@ sshc_subtree(Config) when is_list(Config) ->
 sshd_subtree() ->
     [{doc, "Make sure the sshd subtree is correct"}].
 sshd_subtree(Config) when is_list(Config) ->
-    HostIP = proplists:get_value(host_ip, Config),
-    Port = proplists:get_value(port, Config),
     SystemDir = proplists:get_value(data_dir, Config),
-    {ok,Daemon} = ssh:daemon(HostIP, Port, [{system_dir, SystemDir},
-                                            {failfun, fun ssh_test_lib:failfun/2},
-                                            {user_passwords,
-                                             [{?USER, ?PASSWD}]}]),
+    {Daemon, HostIP, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
+                                                  {failfun, fun ssh_test_lib:failfun/2},
+                                                  {user_passwords,
+                                                   [{?USER, ?PASSWD}]}]),
 
     ct:log("Expect HostIP=~p, Port=~p, Daemon=~p",[HostIP,Port,Daemon]),
     ?wait_match([{{server,ssh_system_sup, ListenIP, Port, ?DEFAULT_PROFILE},
@@ -151,7 +148,7 @@ sshd_subtree(Config) when is_list(Config) ->
 		supervisor:which_children(sshd_sup),
 		[ListenIP,Daemon]),
     true = ssh_test_lib:match_ip(HostIP, ListenIP),
-    check_sshd_system_tree(Daemon, Config),
+    check_sshd_system_tree(Daemon, HostIP, Port, Config),
     ssh:stop_daemon(HostIP, Port),
     ct:sleep(?WAIT_FOR_SHUTDOWN),
     ?wait_match([], supervisor:which_children(sshd_sup)).
@@ -160,16 +157,14 @@ sshd_subtree(Config) when is_list(Config) ->
 sshd_subtree_profile() ->
     [{doc, "Make sure the sshd subtree using profile option is correct"}].	
 sshd_subtree_profile(Config) when is_list(Config) ->
-    HostIP = proplists:get_value(host_ip, Config),
-    Port = proplists:get_value(port, Config),
     Profile = proplists:get_value(profile, Config), 
     SystemDir = proplists:get_value(data_dir, Config),
 
-    {ok, Daemon} = ssh:daemon(HostIP, Port, [{system_dir, SystemDir},
-                                             {failfun, fun ssh_test_lib:failfun/2},
-                                             {user_passwords,
-                                              [{?USER, ?PASSWD}]},
-                                             {profile, Profile}]),
+    {Daemon, HostIP, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
+                                                  {failfun, fun ssh_test_lib:failfun/2},
+                                                  {user_passwords,
+                                                   [{?USER, ?PASSWD}]},
+                                                  {profile, Profile}]),
     ct:log("Expect HostIP=~p, Port=~p, Profile=~p, Daemon=~p",[HostIP,Port,Profile,Daemon]),
     ?wait_match([{{server,ssh_system_sup, ListenIP,Port,Profile},
 		  Daemon, supervisor,
@@ -177,7 +172,7 @@ sshd_subtree_profile(Config) when is_list(Config) ->
 		supervisor:which_children(sshd_sup),
 		[ListenIP,Daemon]),
     true = ssh_test_lib:match_ip(HostIP, ListenIP),
-    check_sshd_system_tree(Daemon, Config),
+    check_sshd_system_tree(Daemon, HostIP, Port, Config),
     ssh:stop_daemon(HostIP, Port, Profile),
     ct:sleep(?WAIT_FOR_SHUTDOWN),
     ?wait_match([], supervisor:which_children(sshd_sup)).
@@ -354,9 +349,7 @@ chk_empty_con_daemon(Daemon) ->
 %%-------------------------------------------------------------------------
 %% Help functions
 %%-------------------------------------------------------------------------
-check_sshd_system_tree(Daemon, Config) -> 
-    Host = proplists:get_value(host, Config),
-    Port = proplists:get_value(port, Config),
+check_sshd_system_tree(Daemon, Host, Port, Config) -> 
     UserDir = proplists:get_value(userdir, Config),
     {ok, Client} = ssh:connect(Host, Port, [{silently_accept_hosts, true},
                                             {user_interaction, false},
diff --git a/lib/ssh/test/ssh_test_lib.erl b/lib/ssh/test/ssh_test_lib.erl
index 036820fa8d..a4794dde1b 100644
--- a/lib/ssh/test/ssh_test_lib.erl
+++ b/lib/ssh/test/ssh_test_lib.erl
@@ -353,12 +353,6 @@ receive_exec_result(Data, ConnectionRef, ChannelId) ->
     expected = receive_exec_result(Closed).
 
 
-inet_port()->
-    {ok, Socket} = gen_tcp:listen(0, [{reuseaddr, true}]),
-    {ok, Port} = inet:port(Socket),
-    gen_tcp:close(Socket),
-    Port.
-
 setup_ssh_auth_keys(RSAFile, DSAFile, Dir) ->
     Entries = ssh_file_entry(RSAFile) ++ ssh_file_entry(DSAFile),
     AuthKeys = public_key:ssh_encode(Entries , auth_keys),
@@ -611,16 +605,6 @@ del_dirs(Dir) ->
 	    ok
     end.
 
-inet_port(Node) ->
-    {Port, Socket} = do_inet_port(Node),
-     rpc:call(Node, gen_tcp, close, [Socket]),
-     Port.
-
-do_inet_port(Node) ->
-    {ok, Socket} = rpc:call(Node, gen_tcp, listen, [0, [{reuseaddr, true}]]),
-    {ok, Port} = rpc:call(Node, inet, port, [Socket]),
-    {Port, Socket}.
-
 openssh_sanity_check(Config) ->
     ssh:start(),
     case ssh:connect("localhost", 22, [{password,""}]) of
diff --git a/lib/ssh/test/ssh_upgrade_SUITE.erl b/lib/ssh/test/ssh_upgrade_SUITE.erl
index 7b9b109fa1..de9d7b2b1c 100644
--- a/lib/ssh/test/ssh_upgrade_SUITE.erl
+++ b/lib/ssh/test/ssh_upgrade_SUITE.erl
@@ -149,8 +149,7 @@ setup_server_client(#state{config=Config} = State) ->
 	
     SFTP = ssh_sftpd:subsystem_spec([{root,FtpRootDir},{cwd,FtpRootDir}]),
 
-    {Server,Host,Port} = ssh_test_lib:daemon(ssh_test_lib:inet_port(), % when lower rel is 18.x
-					     [{system_dir,DataDir},
+    {Server,Host,Port} = ssh_test_lib:daemon([{system_dir,DataDir},
 					      {user_passwords,[{"hej","hopp"}]},
 					      {subsystems,[SFTP]}]),
     
-- 
2.16.4

openSUSE Build Service is sponsored by