File 2567-ct-Add-ct_ssh-shell-2-3.patch of Package erlang

From 8d27ace14a1dd9b9899fedec818b789081e33e83 Mon Sep 17 00:00:00 2001
From: Siri Hansen <siri@erlang.org>
Date: Wed, 17 May 2017 16:13:00 +0200
Subject: [PATCH] [ct] Add ct_ssh:shell/2,3

---
 lib/common_test/doc/src/ct_ssh.xml | 27 +++++++++++++++++++++++++++
 lib/common_test/src/ct_ssh.erl     | 28 +++++++++++++++++++++++++++-
 2 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/lib/common_test/doc/src/ct_ssh.xml b/lib/common_test/doc/src/ct_ssh.xml
index 137e4c3f1..63627d884 100644
--- a/lib/common_test/doc/src/ct_ssh.xml
+++ b/lib/common_test/doc/src/ct_ssh.xml
@@ -1034,6 +1034,33 @@ ChannelId, 0, Data, End, Timeout)</c></seealso>.</p>
     </func>
 
     <func>
+      <name>shell(SSH, ChannelId) -&gt; ok | {error, Reason}</name>
+      <fsummary>Equivalent to shell(SSH, ChannelId, DefaultTimeout).</fsummary>
+      <desc><marker id="shell-2"/>
+        <p>Equivalent to
+          <seealso marker="#shell-3"><c>ct_ssh:shell(SSH, ChannelId,
+            DefaultTimeout)</c></seealso>.</p>
+      </desc>
+    </func>
+
+    <func>
+      <name>shell(SSH, ChannelId, Timeout) -&gt; ok | {error, Reason}</name>
+      <fsummary>Requests that the user default shell is executed at the
+        server end.</fsummary>
+      <type>
+        <v>SSH = connection()</v>
+        <v>ChannelId = integer()</v>
+        <v>Timeout = integer()</v>
+        <v>Reason = term()</v>
+      </type>
+      <desc><marker id="shell-3"/>
+        <p>Requests that the user default shell (typically defined in
+          <c>/etc/passwd</c> in Unix systems) is executed at the
+          server end.</p>
+      </desc>
+    </func>
+
+    <func>
       <name>subsystem(SSH, ChannelId, Subsystem) -&gt; Status | {error, Reason}</name>
       <fsummary>Equivalent to subsystem(SSH, ChannelId, Subsystem,
         DefaultTimeout).</fsummary>
diff --git a/lib/common_test/src/ct_ssh.erl b/lib/common_test/src/ct_ssh.erl
index 6ab3bf036..5ac91f396 100644
--- a/lib/common_test/src/ct_ssh.erl
+++ b/lib/common_test/src/ct_ssh.erl
@@ -68,7 +68,8 @@
  	 send_and_receive/3, send_and_receive/4, send_and_receive/5,
 	 send_and_receive/6,
  	 exec/2, exec/3, exec/4,
- 	 subsystem/3, subsystem/4]).
+         subsystem/3, subsystem/4,
+         shell/2, shell/3]).
 
 %% STFP Functions
 -export([sftp_connect/1, 
@@ -94,6 +95,7 @@
 
 -record(state, {ssh_ref, conn_type, target}).
 
+-type handle() :: pid().
 
 %%%-----------------------------------------------------------------
 %%%------------------------ SSH COMMANDS ---------------------------
@@ -490,6 +492,22 @@ subsystem(SSH, ChannelId, Subsystem, Timeout) ->
     call(SSH, {subsystem,ChannelId,Subsystem,Timeout}).
 
 
+-spec shell(SSH, ChannelId) -> Result when
+      SSH :: handle() | ct:target_name(),
+      ChannelId :: ssh:ssh_channel_id(),
+      Result :: ok | {error,term()}.
+shell(SSH, ChannelId) ->
+    shell(SSH, ChannelId, ?DEFAULT_TIMEOUT).
+
+-spec shell(SSH, ChannelId, Timeout) -> Result when
+      SSH :: handle() | ct:target_name(),
+      ChannelId :: ssh:ssh_channel_id(),
+      Timeout :: timeout(),
+      Result :: ok | {error,term()}.
+shell(SSH, ChannelId, Timeout) ->
+    call(SSH, {shell,ChannelId,Timeout}).
+
+
 %%%-----------------------------------------------------------------
 %%%------------------------ SFTP COMMANDS --------------------------
 
@@ -1067,6 +1085,14 @@ handle_msg({subsystem,Chn,Subsystem,TO}, State) ->
     Result = ssh_connection:subsystem(SSHRef, Chn, Subsystem, TO),
     {Result,State};
 
+handle_msg({shell,Chn,TO}, State) ->
+    #state{ssh_ref=SSHRef, target=Target} = State,
+    try_log(heading(shell,Target),
+	    "SSH Ref: ~p, Chn: ~p, Timeout: ~p",
+            [SSHRef,Chn,TO]),
+    Result = ssh_connection:shell(SSHRef, Chn),
+    {Result,State};
+
 %% --- SFTP Commands ---
 
 handle_msg({read_file,Srv,File}=Cmd, S=#state{ssh_ref=SSHRef}) ->
-- 
2.13.0

openSUSE Build Service is sponsored by