Class: Net::SSH::Test::Channel
- Inherits:
-
Object
- Object
- Net::SSH::Test::Channel
- Defined in:
- lib/net/ssh/test/channel.rb
Overview
A mock channel, used for scripting actions in tests. It wraps a Net::SSH::Test::Script instance, and delegates to it for the most part. This class has little real functionality on its own, but rather acts as a convenience for scripting channel-related activity for later comparison in a unit test.
story do |session|
channel = session.opens_channel
channel.sends_exec "ls"
channel.gets_data "result of ls"
channel.gets_close
channel.sends_close
end
Instance Attribute Summary collapse
-
#local_id ⇒ Object
Returns the local (client-assigned) id for this channel, or a Proc object that will return the local-id later if the local id has not yet been set.
-
#remote_id ⇒ Object
Returns the remote (server-assigned) id for this channel, or a Proc object that will return the remote-id later if the remote id has not yet been set.
-
#script ⇒ Object
readonly
The Net::SSH::Test::Script instance employed by this mock channel.
Instance Method Summary collapse
-
#gets_close ⇒ Object
Scripts the reception of a “channel close” packet from the remote end.
-
#gets_data(data) ⇒ Object
Scripts the reception of a channel data packet from the remote end.
-
#gets_eof ⇒ Object
Scripts the reception of an EOF packet from the remote end.
-
#gets_exit_status(status = 0) ⇒ Object
Scripts the reception of an “exit-status” channel request packet.
-
#initialize(script) ⇒ Channel
constructor
Creates a new Test::Channel instance on top of the given
script
(which must be a Net::SSH::Test::Script instance). -
#inject_remote_delay! ⇒ Object
Because adjacent calls to #gets_data will sometimes cause the data packets to be concatenated (causing expectations in tests to fail), you may need to separate those calls with calls to #inject_remote_delay! (which essentially just mimics receiving an empty data packet):.
-
#sends_close ⇒ Object
Scripts the sending of a “channel close” packet across the channel.
-
#sends_data(data) ⇒ Object
Scripts the sending of a data packet across the channel.
-
#sends_eof ⇒ Object
Scripts the sending of an EOF packet across the channel.
-
#sends_exec(command, reply = true, success = true) ⇒ Object
Scripts the sending of an “exec” channel request packet to the mock server.
-
#sends_subsystem(subsystem, reply = true, success = true) ⇒ Object
Scripts the sending of a “subsystem” channel request packet to the mock server.
Constructor Details
#initialize(script) ⇒ Channel
Creates a new Test::Channel instance on top of the given script
(which must be a Net::SSH::Test::Script instance).
28 29 30 31 |
# File 'lib/net/ssh/test/channel.rb', line 28 def initialize(script) @script = script @local_id = @remote_id = nil end |
Instance Attribute Details
#local_id ⇒ Object
Returns the local (client-assigned) id for this channel, or a Proc object that will return the local-id later if the local id has not yet been set. (See Net::SSH::Test::Packet#instantiate!.)
36 37 38 |
# File 'lib/net/ssh/test/channel.rb', line 36 def local_id @local_id || Proc.new { @local_id or raise "local-id has not been set yet!" } end |
#remote_id ⇒ Object
Returns the remote (server-assigned) id for this channel, or a Proc object that will return the remote-id later if the remote id has not yet been set. (See Net::SSH::Test::Packet#instantiate!.)
43 44 45 |
# File 'lib/net/ssh/test/channel.rb', line 43 def remote_id @remote_id || Proc.new { @remote_id or raise "remote-id has not been set yet!" } end |
#script ⇒ Object (readonly)
The Net::SSH::Test::Script instance employed by this mock channel.
18 19 20 |
# File 'lib/net/ssh/test/channel.rb', line 18 def script @script end |
Instance Method Details
#gets_close ⇒ Object
Scripts the reception of a “channel close” packet from the remote end.
channel.gets_close
124 125 126 |
# File 'lib/net/ssh/test/channel.rb', line 124 def gets_close script.gets_channel_close(self) end |
#gets_data(data) ⇒ Object
Scripts the reception of a channel data packet from the remote end.
channel.gets_data "bar"
103 104 105 |
# File 'lib/net/ssh/test/channel.rb', line 103 def gets_data(data) script.gets_channel_data(self, data) end |
#gets_eof ⇒ Object
Scripts the reception of an EOF packet from the remote end.
channel.gets_eof
117 118 119 |
# File 'lib/net/ssh/test/channel.rb', line 117 def gets_eof script.gets_channel_eof(self) end |
#gets_exit_status(status = 0) ⇒ Object
Scripts the reception of an “exit-status” channel request packet.
channel.gets_exit_status(127)
110 111 112 |
# File 'lib/net/ssh/test/channel.rb', line 110 def gets_exit_status(status=0) script.gets_channel_request(self, "exit-status", false, status) end |
#inject_remote_delay! ⇒ Object
Because adjacent calls to #gets_data will sometimes cause the data packets to be concatenated (causing expectations in tests to fail), you may need to separate those calls with calls to #inject_remote_delay! (which essentially just mimics receiving an empty data packet):
channel.gets_data "abcdefg"
channel.inject_remote_delay!
channel.gets_data "hijklmn"
55 56 57 |
# File 'lib/net/ssh/test/channel.rb', line 55 def inject_remote_delay! gets_data("") end |
#sends_close ⇒ Object
Scripts the sending of a “channel close” packet across the channel.
channel.sends_close
96 97 98 |
# File 'lib/net/ssh/test/channel.rb', line 96 def sends_close script.sends_channel_close(self) end |
#sends_data(data) ⇒ Object
Scripts the sending of a data packet across the channel.
channel.sends_data "foo"
82 83 84 |
# File 'lib/net/ssh/test/channel.rb', line 82 def sends_data(data) script.sends_channel_data(self, data) end |
#sends_eof ⇒ Object
Scripts the sending of an EOF packet across the channel.
channel.sends_eof
89 90 91 |
# File 'lib/net/ssh/test/channel.rb', line 89 def sends_eof script.sends_channel_eof(self) end |
#sends_exec(command, reply = true, success = true) ⇒ Object
Scripts the sending of an “exec” channel request packet to the mock server. If reply
is true, then the server is expected to reply to the request, otherwise no response to this request will be sent. If success
is true
, then the request will be successful, otherwise a failure will be scripted.
channel.sends_exec "ls -l"
66 67 68 |
# File 'lib/net/ssh/test/channel.rb', line 66 def sends_exec(command, reply=true, success=true) script.sends_channel_request(self, "exec", reply, command, success) end |
#sends_subsystem(subsystem, reply = true, success = true) ⇒ Object
Scripts the sending of a “subsystem” channel request packet to the mock server. See #sends_exec for a discussion of the meaning of the reply
and success
arguments.
channel.sends_subsystem "sftp"
75 76 77 |
# File 'lib/net/ssh/test/channel.rb', line 75 def sends_subsystem(subsystem, reply=true, success=true) script.sends_channel_request(self, "subsystem", reply, subsystem, success) end |