\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /opt/chef/embedded/lib/ruby/gems/2.7.0/gems/net-ssh-6.1.0/lib/net/ssh/

Viewing File: test.rb

require 'net/ssh/transport/session'
require 'net/ssh/connection/session'
require 'net/ssh/test/kex'
require 'net/ssh/test/socket'

module Net
  module SSH

    # 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!
    module Test
      # If a block is given, yields the script for the test socket (#socket).
      # Otherwise, simply returns the socket's script. See Net::SSH::Test::Script.
      def story
        Net::SSH::Test::Extensions::IO.with_test_extension { yield socket.script if block_given? }
        return socket.script
      end

      # Returns the test socket instance to use for these tests (see
      # Net::SSH::Test::Socket).
      def socket(options={})
        @socket ||= Net::SSH::Test::Socket.new
      end

      # Returns the connection session (Net::SSH::Connection::Session) for use
      # in these tests. It is a fully functional SSH session, operating over
      # a mock socket (#socket).
      def connection(options={})
        @connection ||= Net::SSH::Connection::Session.new(transport(options), options)
      end

      # Returns the transport session (Net::SSH::Transport::Session) for use
      # in these tests. It is a fully functional SSH transport session, operating
      # over a mock socket (#socket).
      def transport(options={})
        @transport ||= Net::SSH::Transport::Session.new(
          options[:host] || "localhost",
          options.merge(kex: "test", host_key: "ssh-rsa", append_all_supported_algorithms: true, verify_host_key: :never, proxy: socket(options))
        )
      end

      # First asserts that a story has been described (see #story). Then yields,
      # and then asserts that all items described in the script have been
      # processed. Typically, this is called immediately after a story has
      # been built, and the SSH commands being tested are then executed within
      # the block passed to this assertion.
      def assert_scripted
        raise "there is no script to be processed" if socket.script.events.empty?
        Net::SSH::Test::Extensions::IO.with_test_extension { yield }
        assert socket.script.events.empty?, "there should not be any remaining scripted events, but there are still" \
                                            "#{socket.script.events.length} pending"
      end
    end

  end
end