public
Description: SSH connection multiplexing: execute commands simultaneously on multiple hosts via SSH
Homepage: http://rubyforge.org/projects/net-ssh
Clone URL: git://github.com/jamis/net-ssh-multi.git
use an abbreviated session definition syntax (borrowing further from 
Capistrano)
jamis (author)
Tue Apr 08 15:45:44 -0700 2008
commit  793696dbcf7ac3c763b113f611a56052493f318b
tree    2b80cc27f393be1325f3cf292f27e4e3418594c7
parent  73e7a6164730051cca2555ed70b0c34935049514
...
24
25
26
27
28
 
 
29
30
31
32
33
 
 
34
35
36
...
24
25
26
 
 
27
28
29
30
31
 
 
32
33
34
35
36
0
@@ -24,13 +24,13 @@ In a nutshell:
0
     session.via 'gateway', 'gateway-user'
0
 
0
     # define the servers we want to use
0
- session.use 'host1', 'user1'
0
- session.use 'host2', 'user2'
0
+ session.use 'user1@host1'
0
+ session.use 'user2@host2'
0
 
0
     # define servers in groups for more granular access
0
     session.group :app do
0
- session.use 'app1', 'user'
0
- session.use 'app2', 'user'
0
+ session.use 'user@app1'
0
+ session.use 'user@app2'
0
     end
0
 
0
     # execute commands on all servers
...
19
20
21
22
23
 
 
24
25
26
27
28
 
 
29
30
31
...
19
20
21
 
 
22
23
24
25
26
 
 
27
28
29
30
31
0
@@ -19,13 +19,13 @@ module Net; module SSH
0
   # session.via 'gateway', 'gateway-user'
0
   #
0
   # # define the servers we want to use
0
- # session.use 'host1', 'user1'
0
- # session.use 'host2', 'user2'
0
+ # session.use 'user1@host1'
0
+ # session.use 'user2@host2'
0
   #
0
   # # define servers in groups for more granular access
0
   # session.group :app do
0
- # session.use 'app1', 'user'
0
- # session.use 'app2', 'user'
0
+ # session.use 'user@app1'
0
+ # session.use 'user@app2'
0
   # end
0
   #
0
   # # execute commands on all servers
...
6
7
8
 
 
9
10
11
12
13
14
15
 
16
17
18
...
26
27
28
29
 
30
31
32
33
 
 
 
 
 
 
 
 
 
34
35
36
37
 
 
 
 
 
 
 
 
 
 
38
39
40
...
51
52
53
54
55
56
57
58
59
 
 
 
60
61
62
 
63
64
65
...
6
7
8
9
10
11
12
13
14
15
16
 
17
18
19
20
...
28
29
30
 
31
32
33
34
 
35
36
37
38
39
40
41
42
43
44
 
 
45
46
47
48
49
50
51
52
53
54
55
56
57
58
...
69
70
71
 
 
 
 
 
 
72
73
74
75
76
 
77
78
79
80
0
@@ -6,13 +6,15 @@ module Net; module SSH; module Multi
0
   # need to instantiate one of these directly: instead, you should use
0
   # Net::SSH::Multi::Session#use.
0
   class Server
0
+ include Comparable
0
+
0
     # The Net::SSH::Multi::Session instance that manages this server instance.
0
     attr_reader :master
0
 
0
     # The host name (or IP address) of the server to connect to.
0
     attr_reader :host
0
 
0
- # The user name to use when connecting to this server.
0
+ # The user name to use when logging into the server.
0
     attr_reader :user
0
 
0
     # The Hash of additional options to pass to Net::SSH when connecting
0
@@ -26,15 +28,31 @@ module Net; module SSH; module Multi
0
     # Creates a new Server instance with the given connection information. The
0
     # +master+ argument must be a reference to the Net::SSH::Multi::Session
0
     # instance that will manage this server reference. The +options+ hash must
0
- # conform to the options described for Net::SSH::start, with one addition:
0
+ # conform to the options described for Net::SSH::start, with two additions:
0
     #
0
     # * :via => a Net::SSH::Gateway instance to use when establishing a
0
     # connection to this server.
0
- def initialize(master, host, user, options={})
0
+ # * :user => the name of the user to use when logging into this server.
0
+ #
0
+ # The +host+ argument may include the username and port number, in which
0
+ # case those values take precedence over similar values given in the +options+:
0
+ #
0
+ # server = Net::SSH::Multi::Server.new(session, 'user@host:1234')
0
+ # puts server.user #-> user
0
+ # puts server.port #-> 1234
0
+ def initialize(master, host, options={})
0
       @master = master
0
- @host = host
0
- @user = user
0
       @options = options.dup
0
+
0
+ @user, @host, port = host.match(/^(?:([^;,:=]+)@|)(.*?)(?::(\d+)|)$/)[1,3]
0
+
0
+ user_opt, port_opt = @options.delete(:user), @options.delete(:port)
0
+
0
+ @user = @user || user_opt || master.default_user
0
+ port ||= port_opt
0
+
0
+ @options[:port] = port.to_i if port
0
+
0
       @gateway = @options.delete(:via)
0
       @failed = false
0
     end
0
@@ -51,15 +69,12 @@ module Net; module SSH; module Multi
0
       options[:port] || 22
0
     end
0
 
0
- # Compares the given +server+ to this instance, and returns true if they
0
- # have the same host, user, and port.
0
- def eql?(server)
0
- host == server.host &&
0
- user == server.user &&
0
- port == server.port
0
+ # Gives server definitions a sort order, and allows comparison.
0
+ def <=>(server)
0
+ [host, port, user] <=> [server.host, server.port, server.user]
0
     end
0
 
0
- alias :== :eql?
0
+ alias :eql? :==
0
 
0
     # Generates a +Fixnum+ hash value for this object. This function has the
0
     # property that +a.eql?(b)+ implies +a.hash == b.hash+. The
...
20
21
22
23
24
 
 
25
26
27
28
29
 
 
30
31
32
...
65
66
67
 
 
 
 
 
 
68
69
70
...
92
93
94
 
95
96
97
...
171
172
173
174
175
176
177
178
 
 
 
 
 
179
180
181
...
20
21
22
 
 
23
24
25
26
27
 
 
28
29
30
31
32
...
65
66
67
68
69
70
71
72
73
74
75
76
...
98
99
100
101
102
103
104
...
178
179
180
 
 
 
 
 
181
182
183
184
185
186
187
188
0
@@ -20,13 +20,13 @@ module Net; module SSH; module Multi
0
   # session.via 'gateway', 'gateway-user'
0
   #
0
   # # define the servers we want to use
0
- # session.use 'host1', 'user1'
0
- # session.use 'host2', 'user2'
0
+ # session.use 'user1@host1'
0
+ # session.use 'user2@host2'
0
   #
0
   # # define servers in groups for more granular access
0
   # session.group :app do
0
- # session.use 'app1', 'user'
0
- # session.use 'app2', 'user'
0
+ # session.use 'user@app1'
0
+ # session.use 'user@app2'
0
   # end
0
   #
0
   # # execute commands on all servers
0
@@ -65,6 +65,12 @@ module Net; module SSH; module Multi
0
     # :warn if connection errors should cause a warning.
0
     attr_accessor :on_error
0
 
0
+ # The default user name to use when connecting to a server. If a user name
0
+ # is not given for a particular server, this value will be used. It defaults
0
+ # to ENV['USER'] || ENV['USERNAME'], or "unknown" if neither of those are
0
+ # set.
0
+ attr_accessor :default_user
0
+
0
     # The number of connections that are currently open.
0
     attr_reader :open_connections #:nodoc:
0
 
0
@@ -92,6 +98,7 @@ module Net; module SSH; module Multi
0
       @open_groups = []
0
       @connect_threads = []
0
       @on_error = :fail
0
+ @default_user = ENV['USER'] || ENV['USERNAME'] || "unknown"
0
 
0
       @open_connections = 0
0
       @pending_sessions = []
0
@@ -171,11 +178,11 @@ module Net; module SSH; module Multi
0
     # a different Net::SSH::Gateway instance (or +nil+) with the :via key in
0
     # the +options+.
0
     #
0
- # session.use 'host', 'user'
0
- # session.use 'host2', 'user2', :via => nil
0
- # session.use 'host3', 'user3', :via => Net::SSH::Gateway.new('gateway.host', 'user')
0
- def use(host, user, options={})
0
- server = Server.new(self, host, user, {:via => default_gateway}.merge(options))
0
+ # session.use 'host'
0
+ # session.use 'user@host2', :via => nil
0
+ # session.use 'host3', :user => "user3", :via => Net::SSH::Gateway.new('gateway.host', 'user')
0
+ def use(host, options={})
0
+ server = Server.new(self, host, {:via => default_gateway}.merge(options))
0
       exists = servers.index(server)
0
       if exists
0
         server = servers[exists]
...
3
4
5
6
 
7
8
9
10
 
11
12
13
14
 
15
16
17
18
 
19
20
21
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
24
25
26
27
 
 
28
29
30
31
32
33
34
35
 
 
36
37
38
39
40
41
42
43
 
 
44
45
46
47
48
49
50
51
 
 
52
53
54
55
56
57
58
 
59
60
61
62
 
63
64
65
66
 
67
68
69
70
71
 
72
73
74
75
 
76
77
78
79
 
80
81
82
...
84
85
86
87
88
 
 
89
90
91
92
93
94
 
95
96
97
98
99
 
100
101
102
103
 
104
105
106
...
111
112
113
114
 
115
116
117
118
 
119
120
121
...
124
125
126
127
 
128
129
130
131
 
132
133
134
...
136
137
138
139
 
140
141
142
...
144
145
146
147
 
148
149
150
151
 
152
153
154
...
156
157
158
159
 
160
161
162
163
 
164
165
166
...
168
169
170
171
 
172
173
174
175
 
176
177
178
...
182
183
184
185
 
186
187
188
189
 
190
191
192
...
196
197
198
199
200
 
 
201
202
203
...
3
4
5
 
6
7
8
9
 
10
11
12
13
 
14
15
16
17
 
18
19
20
21
 
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
 
42
43
44
45
46
47
48
49
 
 
50
51
52
53
54
55
56
57
 
 
58
59
60
61
62
63
64
65
 
 
66
67
68
69
70
71
72
73
 
74
75
76
77
 
78
79
80
81
 
82
83
84
85
86
 
87
88
89
90
 
91
92
93
94
 
95
96
97
98
...
100
101
102
 
 
103
104
105
106
107
108
109
 
110
111
112
113
114
 
115
116
117
118
 
119
120
121
122
...
127
128
129
 
130
131
132
133
 
134
135
136
137
...
140
141
142
 
143
144
145
146
 
147
148
149
150
...
152
153
154
 
155
156
157
158
...
160
161
162
 
163
164
165
166
 
167
168
169
170
...
172
173
174
 
175
176
177
178
 
179
180
181
182
...
184
185
186
 
187
188
189
190
 
191
192
193
194
...
198
199
200
 
201
202
203
204
 
205
206
207
208
...
212
213
214
 
 
215
216
217
218
219
0
@@ -3,80 +3,96 @@ require 'net/ssh/multi/server'
0
 
0
 class ServerTest < Test::Unit::TestCase
0
   def setup
0
- @master = mock('multi-session')
0
+ @master = stub('multi-session', :default_user => "bob")
0
   end
0
 
0
   def test_accessor_without_properties_should_access_empty_hash
0
- assert_nil server('host', 'user')[:foo]
0
+ assert_nil server('host')[:foo]
0
   end
0
 
0
   def test_accessor_with_properties_should_access_properties
0
- assert_equal "hello", server('host', 'user', :properties => { :foo => "hello" })[:foo]
0
+ assert_equal "hello", server('host', :properties => { :foo => "hello" })[:foo]
0
   end
0
 
0
   def test_port_should_return_22_by_default
0
- assert_equal 22, server('host', 'user').port
0
+ assert_equal 22, server('host').port
0
   end
0
 
0
   def test_port_should_return_given_port_when_present
0
- assert_equal 1234, server('host', 'user', :port => 1234).port
0
+ assert_equal 1234, server('host', :port => 1234).port
0
+ end
0
+
0
+ def test_port_should_return_parsed_port_when_present
0
+ assert_equal 1234, server('host:1234', :port => 1235).port
0
+ end
0
+
0
+ def test_user_should_return_default_user_by_default
0
+ assert_equal "bob", server('host').user
0
+ end
0
+
0
+ def test_user_should_return_given_user_when_present
0
+ assert_equal "jim", server('host', :user => "jim").user
0
+ end
0
+
0
+ def test_user_should_return_parsed_user_when_present
0
+ assert_equal "jim", server('jim@host', :user => "john").user
0
   end
0
 
0
   def test_equivalence_when_host_and_user_and_port_match
0
- s1 = server('host', 'user', :port => 1234)
0
- s2 = server('host', 'user', :port => 1234)
0
+ s1 = server('user@host:1234')
0
+ s2 = server('user@host:1234')
0
     assert s1.eql?(s2)
0
     assert_equal s1.hash, s2.hash
0
     assert s1 == s2
0
   end
0
 
0
   def test_equivalence_when_host_mismatch
0
- s1 = server('host1', 'user', :port => 1234)
0
- s2 = server('host2', 'user', :port => 1234)
0
+ s1 = server('user@host1:1234')
0
+ s2 = server('user@host2:1234')
0
     assert !s1.eql?(s2)
0
     assert_not_equal s1.hash, s2.hash
0
     assert s1 != s2
0
   end
0
 
0
   def test_equivalence_when_port_mismatch
0
- s1 = server('host', 'user', :port => 1234)
0
- s2 = server('host', 'user', :port => 1235)
0
+ s1 = server('user@host:1234')
0
+ s2 = server('user@host:1235')
0
     assert !s1.eql?(s2)
0
     assert_not_equal s1.hash, s2.hash
0
     assert s1 != s2
0
   end
0
 
0
   def test_equivalence_when_user_mismatch
0
- s1 = server('host', 'user1', :port => 1234)
0
- s2 = server('host', 'user2', :port => 1234)
0
+ s1 = server('user1@host:1234')
0
+ s2 = server('user2@host:1234')
0
     assert !s1.eql?(s2)
0
     assert_not_equal s1.hash, s2.hash
0
     assert s1 != s2
0
   end
0
 
0
   def test_to_s_should_include_user_and_host
0
- assert_equal "user@host", server('host', 'user').to_s
0
+ assert_equal "user@host", server('user@host').to_s
0
   end
0
 
0
   def test_to_s_should_include_user_and_host_and_port_when_port_is_given
0
- assert_equal "user@host:1234", server('host', 'user', :port => 1234).to_s
0
+ assert_equal "user@host:1234", server('user@host:1234').to_s
0
   end
0
 
0
   def test_gateway_should_be_nil_by_default
0
- assert_nil server('host', 'user').gateway
0
+ assert_nil server('host').gateway
0
   end
0
 
0
   def test_gateway_should_be_set_with_the_via_value
0
     gateway = mock('gateway')
0
- assert_equal gateway, server('host', 'user', :via => gateway).gateway
0
+ assert_equal gateway, server('host', :via => gateway).gateway
0
   end
0
 
0
   def test_session_with_default_argument_should_not_instantiate_session
0
- assert_nil server('host', 'user').session
0
+ assert_nil server('host').session
0
   end
0
 
0
   def test_session_with_true_argument_should_instantiate_and_cache_session
0
- srv = server('host', 'user', :port => 1234)
0
+ srv = server('host')
0
     session = expect_connection_to(srv)
0
     assert_equal session, srv.session(true)
0
     assert_equal session, srv.session(true)
0
@@ -84,23 +100,23 @@ class ServerTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_session_that_cannot_authenticate_adds_host_to_exception_message
0
- srv = server('host', 'user')
0
- Net::SSH.expects(:start).with('host', 'user', {}).raises(Net::SSH::AuthenticationFailed.new('user'))
0
+ srv = server('host')
0
+ Net::SSH.expects(:start).with('host', 'bob', {}).raises(Net::SSH::AuthenticationFailed.new('bob'))
0
 
0
     begin
0
       srv.new_session
0
       flunk
0
     rescue Net::SSH::AuthenticationFailed => e
0
- assert_equal "user@host", e.message
0
+ assert_equal "bob@host", e.message
0
     end
0
   end
0
 
0
   def test_close_channels_when_session_is_not_open_should_not_do_anything
0
- assert_nothing_raised { server('host', 'user').close_channels }
0
+ assert_nothing_raised { server('host').close_channels }
0
   end
0
 
0
   def test_close_channels_when_session_is_open_should_iterate_over_open_channels_and_close_them
0
- srv = server('host', 'user')
0
+ srv = server('host')
0
     session = expect_connection_to(srv)
0
     c1 = mock('channel', :close => nil)
0
     c2 = mock('channel', :close => nil)
0
@@ -111,11 +127,11 @@ class ServerTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_close_when_session_is_not_open_should_not_do_anything
0
- assert_nothing_raised { server('host', 'user').close }
0
+ assert_nothing_raised { server('host').close }
0
   end
0
 
0
   def test_close_when_session_is_open_should_close_session
0
- srv = server('host', 'user')
0
+ srv = server('host')
0
     session = expect_connection_to(srv)
0
     session.expects(:close)
0
     @master.expects(:server_closed).with(srv)
0
@@ -124,11 +140,11 @@ class ServerTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_busy_should_be_false_when_session_is_not_open
0
- assert !server('host', 'user').busy?
0
+ assert !server('host').busy?
0
   end
0
 
0
   def test_busy_should_be_false_when_session_is_not_busy
0
- srv = server('host', 'user')
0
+ srv = server('host')
0
     session = expect_connection_to(srv)
0
     session.expects(:busy?).returns(false)
0
     srv.session(true)
0
@@ -136,7 +152,7 @@ class ServerTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_busy_should_be_true_when_session_is_busy
0
- srv = server('host', 'user')
0
+ srv = server('host')
0
     session = expect_connection_to(srv)
0
     session.expects(:busy?).returns(true)
0
     srv.session(true)
0
@@ -144,11 +160,11 @@ class ServerTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_preprocess_should_be_nil_when_session_is_not_open
0
- assert_nil server('host', 'user').preprocess
0
+ assert_nil server('host').preprocess
0
   end
0
 
0
   def test_preprocess_should_return_result_of_session_preprocess
0
- srv = server('host', 'user')
0
+ srv = server('host')
0
     session = expect_connection_to(srv)
0
     session.expects(:preprocess).returns(:result)
0
     srv.session(true)
0
@@ -156,11 +172,11 @@ class ServerTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_readers_should_return_empty_array_when_session_is_not_open
0
- assert_equal [], server('host', 'user').readers
0
+ assert_equal [], server('host').readers
0
   end
0
 
0
   def test_readers_should_return_all_listeners_when_session_is_open
0
- srv = server('host', 'user')
0
+ srv = server('host')
0
     session = expect_connection_to(srv)
0
     session.expects(:listeners).returns(1 => 2, 3 => 4, 5 => 6, 7 => 8)
0
     srv.session(true)
0
@@ -168,11 +184,11 @@ class ServerTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_writers_should_return_empty_array_when_session_is_not_open
0
- assert_equal [], server('host', 'user').writers
0
+ assert_equal [], server('host').writers
0
   end
0
 
0
   def test_writers_should_return_all_listeners_that_are_pending_writes_when_session_is_open
0
- srv = server('host', 'user')
0
+ srv = server('host')
0
     session = expect_connection_to(srv)
0
     listeners = { writer(:ready) => 1, writer(:reader) => 2,
0
       writer(:reader) => 3, writer(:idle) => 4, writer(:ready) => 5 }
0
@@ -182,11 +198,11 @@ class ServerTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_postprocess_should_return_true_when_session_is_not_open
0
- assert_equal true, server('host', 'user').postprocess([], [])
0
+ assert_equal true, server('host').postprocess([], [])
0
   end
0
 
0
   def test_postprocess_should_call_session_postprocess_with_ios_belonging_to_session
0
- srv = server('host', 'user')
0
+ srv = server('host')
0
     session = expect_connection_to(srv)
0
     session.expects(:listeners).returns(1 => 2, 3 => 4, 5 => 6, 7 => 8)
0
     session.expects(:postprocess).with([1,3], [7]).returns(:result)
0
@@ -196,8 +212,8 @@ class ServerTest < Test::Unit::TestCase
0
 
0
   private
0
 
0
- def server(host, user, options={})
0
- Net::SSH::Multi::Server.new(@master, host, user, options)
0
+ def server(host, options={})
0
+ Net::SSH::Multi::Server.new(@master, host, options)
0
     end
0
 
0
     def expect_connection_to(server)
...
12
13
14
15
16
 
 
 
 
 
 
17
18
19
...
24
25
26
27
 
28
29
30
...
32
33
34
35
 
36
37
38
...
51
52
53
54
55
 
 
56
57
58
...
12
13
14
 
 
15
16
17
18
19
20
21
22
23
...
28
29
30
 
31
32
33
34
...
36
37
38
 
39
40
41
42
...
55
56
57
 
 
58
59
60
61
62
0
@@ -12,8 +12,12 @@ class SessionActionsTest < Test::Unit::TestCase
0
       @servers = []
0
     end
0
 
0
- def use(h, u, o={})
0
- server = Net::SSH::Multi::Server.new(self, h, u, o)
0
+ def default_user
0
+ "user"
0
+ end
0
+
0
+ def use(h, o={})
0
+ server = Net::SSH::Multi::Server.new(self, h, o)
0
       servers << server
0
       server
0
     end
0
@@ -24,7 +28,7 @@ class SessionActionsTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_busy_should_be_true_if_any_server_is_busy
0
- srv1, srv2, srv3 = @session.use('h1', 'u1'), @session.use('h2', 'u2'), @session.use('h3', 'u3')
0
+ srv1, srv2, srv3 = @session.use('h1'), @session.use('h2'), @session.use('h3')
0
     srv1.stubs(:busy?).returns(false)
0
     srv2.stubs(:busy?).returns(false)
0
     srv3.stubs(:busy?).returns(true)
0
@@ -32,7 +36,7 @@ class SessionActionsTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_busy_should_be_false_if_all_servers_are_not_busy
0
- srv1, srv2, srv3 = @session.use('h1', 'u1', :properties => {:a => 1}), @session.use('h2', 'u2', :properties => {:a => 1, :b => 2}), @session.use('h3', 'u3')
0
+ srv1, srv2, srv3 = @session.use('h1'), @session.use('h2'), @session.use('h3')
0
     srv1.stubs(:busy?).returns(false)
0
     srv2.stubs(:busy?).returns(false)
0
     srv3.stubs(:busy?).returns(false)
0
@@ -51,8 +55,8 @@ class SessionActionsTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_open_channel_should_delegate_to_sessions_and_set_accessors_on_each_channel_and_return_multi_channel
0
- srv1 = @session.use('h1', 'u1')
0
- srv2 = @session.use('h2', 'u2')
0
+ srv1 = @session.use('h1')
0
+ srv2 = @session.use('h2')
0
     s1 = { :server => srv1 }
0
     s2 = { :server => srv2 }
0
     c1 = { :stub => :value }
...
44
45
46
47
 
48
49
50
...
54
55
56
57
 
58
59
60
...
62
63
64
65
 
66
67
68
69
70
71
 
 
72
73
74
...
96
97
98
99
100
 
 
101
102
103
104
105
106
 
107
108
109
...
113
114
115
116
117
 
 
118
119
120
121
 
122
123
 
124
125
126
127
 
128
129
 
130
131
132
133
 
134
135
136
137
138
139
 
140
141
142
...
160
161
162
163
 
164
165
166
167
168
169
 
170
171
172
173
174
175
 
176
177
178
179
180
181
 
182
183
184
...
189
190
191
192
 
193
194
195
...
44
45
46
 
47
48
49
50
...
54
55
56
 
57
58
59
60
...
62
63
64
 
65
66
67
68
69
 
 
70
71
72
73
74
...
96
97
98
 
 
99
100
101
102
103
104
105
 
106
107
108
109
...
113
114
115
 
 
116
117
118
119
120
 
121
122
 
123
124
125
126
 
127
128
 
129
130
131
132
 
133
134
135
136
137
138
 
139
140
141
142
...
160
161
162
 
163
164
165
166
167
168
 
169
170
171
172
173
174
 
175
176
177
178
179
180
 
181
182
183
184
...
189
190
191
 
192
193
194
195
0
@@ -44,7 +44,7 @@ class SessionTest < Test::Unit::TestCase
0
 
0
   def test_use_should_add_new_server_to_server_list
0
     @session.open_groups.concat([:first, :second])
0
- server = @session.use('host', 'user', :a => :b)
0
+ server = @session.use('user@host', :a => :b)
0
     assert_equal [server], @session.servers
0
     assert_equal 'host', server.host
0
     assert_equal 'user', server.user
0
@@ -54,7 +54,7 @@ class SessionTest < Test::Unit::TestCase
0
 
0
   def test_use_with_open_groups_should_add_new_server_to_server_list_and_groups
0
     @session.open_groups.concat([:first, :second])
0
- server = @session.use('host', 'user')
0
+ server = @session.use('host')
0
     assert_equal [server], @session.groups[:first]
0
     assert_equal [server], @session.groups[:second]
0
   end
0
@@ -62,13 +62,13 @@ class SessionTest < Test::Unit::TestCase
0
   def test_use_with_default_gateway_should_set_gateway_on_server
0
     Net::SSH::Gateway.expects(:new).with('host', 'user', {}).returns(:gateway)
0
     @session.via('host', 'user')
0
- server = @session.use('host2', 'user2')
0
+ server = @session.use('host2')
0
     assert_equal :gateway, server.gateway
0
   end
0
 
0
   def test_use_with_duplicate_server_will_not_add_server_twice
0
- s1 = @session.use('host', 'user')
0
- s2 = @session.use('host', 'user')
0
+ s1 = @session.use('host')
0
+ s2 = @session.use('host')
0
     assert_equal 1, @session.servers.length
0
     assert_equal s1.object_id, s2.object_id
0
   end
0
@@ -96,14 +96,14 @@ class SessionTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_on_should_return_subsession_containing_only_the_given_servers
0
- s1 = @session.use('h1', 'u1')
0
- s2 = @session.use('h2', 'u2')
0
+ s1 = @session.use('h1')
0
+ s2 = @session.use('h2')
0
     subsession = @session.on(s1, s2)
0
     assert_equal [s1, s2], subsession.servers
0
   end
0
 
0
   def test_on_should_yield_subsession_if_block_is_given
0
- s1 = @session.use('h1', 'u1')
0
+ s1 = @session.use('h1')
0
     yielded = nil
0
     result = @session.on(s1) do |s|
0
       yielded = s
0
@@ -113,30 +113,30 @@ class SessionTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_servers_for_should_return_all_servers_if_no_arguments
0
- srv1, srv2, srv3 = @session.use('h1', 'u1'), @session.use('h2', 'u2'), @session.use('h3', 'u3')
0
- assert_equal %w(h1 h2 h3), @session.servers_for.map { |s| s.host }.sort
0
+ srv1, srv2, srv3 = @session.use('h1'), @session.use('h2'), @session.use('h3')
0
+ assert_equal [srv1, srv2, srv3], @session.servers_for.sort
0
   end
0
 
0
   def test_servers_for_should_return_servers_only_for_given_group
0
- srv1, srv2, srv3 = @session.use('h1', 'u1'), @session.use('h2', 'u2'), @session.use('h3', 'u3')
0
+ srv1, srv2, srv3 = @session.use('h1'), @session.use('h2'), @session.use('h3')
0
     @session.group :app => [srv1, srv2], :db => [srv3]
0
- assert_equal %w(h1 h2), @session.servers_for(:app).map { |s| s.host }.sort
0
+ assert_equal [srv1, srv2], @session.servers_for(:app).sort
0
   end
0
 
0
   def test_servers_for_should_not_return_duplicate_servers
0
- srv1, srv2, srv3 = @session.use('h1', 'u1'), @session.use('h2', 'u2'), @session.use('h3', 'u3')
0
+ srv1, srv2, srv3 = @session.use('h1'), @session.use('h2'), @session.use('h3')
0
     @session.group :app => [srv1, srv2], :db => [srv2, srv3]
0
- assert_equal ["h1", "h2", "h3"], @session.servers_for(:app, :db).map { |s| s.host }.sort
0
+ assert_equal [srv1, srv2, srv3], @session.servers_for(:app, :db).sort
0
   end
0
 
0
   def test_servers_for_should_correctly_apply_only_and_except_constraints
0
- srv1, srv2, srv3 = @session.use('h1', 'u1', :properties => {:a => 1}), @session.use('h2', 'u2', :properties => {:a => 1, :b => 2}), @session.use('h3', 'u3')
0
+ srv1, srv2, srv3 = @session.use('h1', :properties => {:a => 1}), @session.use('h2', :properties => {:a => 1, :b => 2}), @session.use('h3')
0
     @session.group :app => [srv1, srv2, srv3]
0
     assert_equal [srv1], @session.servers_for(:app => {:only => {:a => 1}, :except => {:b => 2}})
0
   end
0
 
0
   def test_close_should_close_server_sessions
0
- srv1, srv2 = @session.use('h1', 'u1'), @session.use('h2', 'u2')
0
+ srv1, srv2 = @session.use('h1'), @session.use('h2')
0
     srv1.expects(:close_channels)
0
     srv2.expects(:close_channels)
0
     srv1.expects(:close)
0
@@ -160,25 +160,25 @@ class SessionTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_preprocess_should_immediately_return_false_if_block_returns_false
0
- srv = @session.use('h1', 'u1')
0
+ srv = @session.use('h1')
0
     srv.expects(:preprocess).never
0
     assert_equal false, @session.preprocess { false }
0
   end
0
 
0
   def test_preprocess_should_call_preprocess_on_component_servers
0
- srv = @session.use('h1', 'u1')
0
+ srv = @session.use('h1')
0
     srv.expects(:preprocess)
0
     assert_equal :hello, @session.preprocess { :hello }
0
   end
0
 
0
   def test_preprocess_should_succeed_even_without_block
0
- srv = @session.use('h1', 'u1')
0
+ srv = @session.use('h1')
0
     srv.expects(:preprocess)
0
     assert_equal true, @session.preprocess
0
   end
0
 
0
   def test_postprocess_should_call_postprocess_on_component_servers
0
- srv = @session.use('h1', 'u1')
0
+ srv = @session.use('h1')
0
     srv.expects(:postprocess).with([:a], [:b])
0
     assert_equal true, @session.postprocess([:a], [:b])
0
   end
0
@@ -189,7 +189,7 @@ class SessionTest < Test::Unit::TestCase
0
 
0
   def test_process_should_call_select_on_combined_readers_and_writers_from_all_servers
0
     @session.expects(:postprocess).with([:b, :c], [:a, :c])
0
- srv1, srv2, srv3 = @session.use('h1', 'u1'), @session.use('h2', 'u2'), @session.use('h3', 'u3')
0
+ srv1, srv2, srv3 = @session.use('h1'), @session.use('h2'), @session.use('h3')
0
     srv1.expects(:readers).returns([:a])
0
     srv1.expects(:writers).returns([:a])
0
     srv2.expects(:readers).returns([])

Comments

    No one has commented yet.