net-ssh-gateway 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +7 -0
- data/Manifest +7 -0
- data/README.rdoc +70 -0
- data/Rakefile +28 -0
- data/lib/net/ssh/gateway.rb +203 -0
- data/net-ssh-gateway.gemspec +58 -0
- data/setup.rb +1585 -0
- data/test/gateway_test.rb +116 -0
- metadata +68 -0
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'mocha'
|
3
|
+
require 'net/ssh/gateway'
|
4
|
+
|
5
|
+
class GatewayTest < Test::Unit::TestCase
|
6
|
+
def teardown
|
7
|
+
Thread.list { |t| t.kill unless Thread.current == t }
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_shutdown_without_any_open_connections_should_terminate_session
|
11
|
+
session, gateway = new_gateway
|
12
|
+
session.expects(:close)
|
13
|
+
gateway.shutdown!
|
14
|
+
assert !gateway.active?
|
15
|
+
assert session.forward.active_locals.empty?
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_open_should_start_local_ports_at_65535
|
19
|
+
gateway_session, gateway = new_gateway
|
20
|
+
assert_equal 65535, gateway.open("app1", 22)
|
21
|
+
assert_equal [65535, "app1", 22], gateway_session.forward.active_locals[65535]
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_open_should_decrement_port_and_retry_if_ports_are_in_use
|
25
|
+
gateway_session, gateway = new_gateway(:reserved => lambda { |n| n > 65000 })
|
26
|
+
assert_equal 65000, gateway.open("app1", 22)
|
27
|
+
assert_equal [65000, "app1", 22], gateway_session.forward.active_locals[65000]
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_ssh_should_return_connection_when_no_block_is_given
|
31
|
+
gateway_session, gateway = new_gateway
|
32
|
+
expect_connect_to("127.0.0.1", "user", :port => 65535).returns(result = mock("session"))
|
33
|
+
newsess = gateway.ssh("app1", "user")
|
34
|
+
assert_equal result, newsess
|
35
|
+
assert_equal [65535, "app1", 22], gateway_session.forward.active_locals[65535]
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_ssh_with_block_should_yield_session_and_then_close_port
|
39
|
+
gateway_session, gateway = new_gateway
|
40
|
+
expect_connect_to("127.0.0.1", "user", :port => 65535).yields(result = mock("session"))
|
41
|
+
yielded = false
|
42
|
+
gateway.ssh("app1", "user") do |newsess|
|
43
|
+
yielded = true
|
44
|
+
assert_equal result, newsess
|
45
|
+
end
|
46
|
+
assert yielded
|
47
|
+
assert gateway_session.forward.active_locals.empty?
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_shutdown_should_cancel_active_forwarded_ports
|
51
|
+
gateway_session, gateway = new_gateway
|
52
|
+
gateway.open("app1", 80)
|
53
|
+
assert !gateway_session.forward.active_locals.empty?
|
54
|
+
gateway.shutdown!
|
55
|
+
assert gateway_session.forward.active_locals.empty?
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def expect_connect_to(host, user, options={})
|
61
|
+
Net::SSH.expects(:start).with do |real_host, real_user, real_options|
|
62
|
+
host == real_host &&
|
63
|
+
user == real_user &&
|
64
|
+
options[:port] == real_options[:port]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def new_gateway(options={})
|
69
|
+
session = MockSession.new(options)
|
70
|
+
expect_connect_to("test.host", "tester").returns(session)
|
71
|
+
[session, Net::SSH::Gateway.new("test.host", "tester")]
|
72
|
+
end
|
73
|
+
|
74
|
+
class MockForward
|
75
|
+
attr_reader :active_locals
|
76
|
+
|
77
|
+
def initialize(options)
|
78
|
+
@options = options
|
79
|
+
@active_locals = {}
|
80
|
+
end
|
81
|
+
|
82
|
+
def cancel_local(port)
|
83
|
+
@active_locals.delete(port)
|
84
|
+
end
|
85
|
+
|
86
|
+
def local(lport, host, rport)
|
87
|
+
raise Errno::EADDRINUSE if @options[:reserved] && @options[:reserved][lport]
|
88
|
+
@active_locals[lport] = [lport, host, rport]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class MockSession
|
93
|
+
attr_reader :forward
|
94
|
+
|
95
|
+
def initialize(options={})
|
96
|
+
@forward = MockForward.new(options)
|
97
|
+
end
|
98
|
+
|
99
|
+
def close
|
100
|
+
end
|
101
|
+
|
102
|
+
def process(wait=nil)
|
103
|
+
true
|
104
|
+
end
|
105
|
+
|
106
|
+
def looping?
|
107
|
+
@looping
|
108
|
+
end
|
109
|
+
|
110
|
+
def loop
|
111
|
+
@looping = true
|
112
|
+
sleep 0.1 while yield
|
113
|
+
@looping = false
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: net-ssh-gateway
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jamis Buck
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-05-01 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: net-ssh
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.99.1
|
23
|
+
version:
|
24
|
+
description: A simple library to assist in establishing tunneled Net::SSH connections
|
25
|
+
email: jamis@jamisbuck.org
|
26
|
+
executables: []
|
27
|
+
|
28
|
+
extensions: []
|
29
|
+
|
30
|
+
extra_rdoc_files: []
|
31
|
+
|
32
|
+
files:
|
33
|
+
- CHANGELOG.rdoc
|
34
|
+
- lib/net/ssh/gateway.rb
|
35
|
+
- Manifest
|
36
|
+
- Rakefile
|
37
|
+
- README.rdoc
|
38
|
+
- setup.rb
|
39
|
+
- test/gateway_test.rb
|
40
|
+
- net-ssh-gateway.gemspec
|
41
|
+
has_rdoc: true
|
42
|
+
homepage: http://net-ssh.rubyforge.org/gateway
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: "0"
|
53
|
+
version:
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
version:
|
60
|
+
requirements: []
|
61
|
+
|
62
|
+
rubyforge_project: net-ssh-gateway
|
63
|
+
rubygems_version: 1.1.1
|
64
|
+
signing_key:
|
65
|
+
specification_version: 2
|
66
|
+
summary: A simple library to assist in establishing tunneled Net::SSH connections
|
67
|
+
test_files:
|
68
|
+
- test/gateway_test.rb
|