module Net::SSH::Test

This module may be used in unit tests, for when you want to test that your SSH state machines are really doing what you expect they are doing. You will typically include this module in your unit test class, and then build a “story” of expected sends and receives:

require 'minitest/autorun'
require 'net/ssh/test'

class MyTest < Minitest::Test
  include Net::SSH::Test

  def test_exec_via_channel_works
    story do |session|
      channel = session.opens_channel
      channel.sends_exec "ls"
      channel.gets_data "result of ls"
      channel.gets_close
      channel.sends_close
    end

    assert_scripted do
      result = nil

      connection.open_channel do |ch|
        ch.exec("ls") do |success|
          ch.on_data { |c, data| result = data }
          ch.on_close { |c| c.close }
        end
      end

      connection.loop
      assert_equal "result of ls", result
    end
  end
end

See Net::SSH::Test::Channel and Net::SSH::Test::Script for more options.

Note that the Net::SSH::Test system is rather finicky yet, and can be kind of frustrating to get working. Any suggestions for improvement will be welcome!