expect-behaviors

Ruby Mixin to add Expect Behaviors to SSH/Serial/Telnet controllers

Using the Mixin

Two public methods are required to support adding expect behaviors to your controller.

The you need to include the module in your class:

require 'expect/behavior'

class Klass
    include Expect::Behavior
end

Batteries Included: Expect::SSH

You can find an example which uses the module in this repo: Expect::SSH. This example implements the required methods:

##
    # exp_buffer - provide the current buffer contents and empty it
    def exp_buffer
      result = @receive_buffer
      @receive_buffer = ''
      result
    end

    ##
    # exp_process - should do one iteration of handle input and append buffer
    def exp_process
      sleep(@wait_sec.to_f)
      @ssh.process(0)
    end

Using Expect

Once Expect::Behaviors has been included you should be able to use Expect blocks in your code.

Here is an example assuming an instance of Expect::SSH that expects a switch prompt and includes a timeout block that expires after 3 seconds. It returns different values depending on how things work out.

result = @ssh.expect do
    when_matching(/switch-prompt1#/) do
      "switch 1"
    end
    when_matching(/switch-prompt2#/) do
      "switch 2"
    end
    when_timeout(3) do
      "timed out"
    end
end

You can set the timeout value:

@ssh.exp_timeout_sec = 2 * 60

You can set the exp_sleep_interval_sec between buffer checks:

@includer.exp_sleep_interval_sec = 10

Expect::Match

And you can use exp_match or return @exp_match from within a when_matching block to return an Expect::Match object.

Expect::Match exposes the following methods:

That's All the Crummy Documentation?

For now, yes. I need to learn how to use YARD and RDOC. Sorry!

-Franco