mirror of
https://github.com/capistrano/capistrano
synced 2023-03-27 23:21:18 -04:00
6efd009569
git-svn-id: http://svn.rubyonrails.org/rails/tools/capistrano@3786 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
104 lines
3 KiB
Ruby
104 lines
3 KiB
Ruby
$:.unshift File.dirname(__FILE__) + "/../lib"
|
|
|
|
require File.dirname(__FILE__) + "/utils"
|
|
require 'test/unit'
|
|
require 'capistrano/ssh'
|
|
|
|
class SSHTest < Test::Unit::TestCase
|
|
class MockSSH
|
|
AuthenticationFailed = Net::SSH::AuthenticationFailed
|
|
|
|
class <<self
|
|
attr_accessor :story
|
|
attr_accessor :invocations
|
|
end
|
|
|
|
def self.start(server, opts, &block)
|
|
@invocations << [server, opts, block]
|
|
err = story.shift
|
|
raise err if err
|
|
end
|
|
end
|
|
|
|
def setup
|
|
@config = MockConfiguration.new
|
|
@config[:user] = 'demo'
|
|
@config[:password] = 'c0c0nutfr0st1ng'
|
|
MockSSH.story = []
|
|
MockSSH.invocations = []
|
|
end
|
|
|
|
def test_publickey_auth_succeeds_default_port_no_block
|
|
Net.const_during(:SSH, MockSSH) do
|
|
Capistrano::SSH.connect('demo.server.i', @config)
|
|
end
|
|
|
|
assert_equal 1, MockSSH.invocations.length
|
|
assert_equal 'demo.server.i', MockSSH.invocations.first[0]
|
|
assert_equal 22, MockSSH.invocations.first[1][:port]
|
|
assert_equal 'demo', MockSSH.invocations.first[1][:username]
|
|
assert_nil MockSSH.invocations.first[1][:password]
|
|
assert_equal %w(publickey hostbased),
|
|
MockSSH.invocations.first[1][:auth_methods]
|
|
assert_nil MockSSH.invocations.first[2]
|
|
end
|
|
|
|
def test_publickey_auth_succeeds_explicit_port_no_block
|
|
Net.const_during(:SSH, MockSSH) do
|
|
Capistrano::SSH.connect('demo.server.i', @config, 23)
|
|
end
|
|
|
|
assert_equal 1, MockSSH.invocations.length
|
|
assert_equal 23, MockSSH.invocations.first[1][:port]
|
|
assert_nil MockSSH.invocations.first[2]
|
|
end
|
|
|
|
def test_publickey_auth_succeeds_with_block
|
|
Net.const_during(:SSH, MockSSH) do
|
|
Capistrano::SSH.connect('demo.server.i', @config) do |session|
|
|
end
|
|
end
|
|
|
|
assert_equal 1, MockSSH.invocations.length
|
|
assert_instance_of Proc, MockSSH.invocations.first[2]
|
|
end
|
|
|
|
def test_publickey_auth_fails
|
|
MockSSH.story << Net::SSH::AuthenticationFailed
|
|
|
|
Net.const_during(:SSH, MockSSH) do
|
|
Capistrano::SSH.connect('demo.server.i', @config)
|
|
end
|
|
|
|
assert_equal 2, MockSSH.invocations.length
|
|
|
|
assert_nil MockSSH.invocations.first[1][:password]
|
|
assert_equal %w(publickey hostbased),
|
|
MockSSH.invocations.first[1][:auth_methods]
|
|
|
|
assert_equal 'c0c0nutfr0st1ng', MockSSH.invocations.last[1][:password]
|
|
assert_equal %w(password keyboard-interactive),
|
|
MockSSH.invocations.last[1][:auth_methods]
|
|
end
|
|
|
|
def test_password_auth_fails
|
|
MockSSH.story << Net::SSH::AuthenticationFailed
|
|
MockSSH.story << Net::SSH::AuthenticationFailed
|
|
|
|
Net.const_during(:SSH, MockSSH) do
|
|
assert_raises(Net::SSH::AuthenticationFailed) do
|
|
Capistrano::SSH.connect('demo.server.i', @config)
|
|
end
|
|
end
|
|
|
|
assert_equal 2, MockSSH.invocations.length
|
|
|
|
assert_nil MockSSH.invocations.first[1][:password]
|
|
assert_equal %w(publickey hostbased),
|
|
MockSSH.invocations.first[1][:auth_methods]
|
|
|
|
assert_equal 'c0c0nutfr0st1ng', MockSSH.invocations.last[1][:password]
|
|
assert_equal %w(password keyboard-interactive),
|
|
MockSSH.invocations.last[1][:auth_methods]
|
|
end
|
|
end
|