rhc 1.32.2 → 1.33.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -131,7 +131,7 @@ module RHC::Commands
131
131
  debug args.inspect
132
132
  ssh.forward.local(*args)
133
133
  fs.bound = true
134
- rescue Errno::EADDRINUSE, Errno::EACCES => e
134
+ rescue Errno::EADDRINUSE, Errno::EACCES, Errno::EPERM => e
135
135
  warn "#{e} while forwarding port #{fs.port_from}. Trying local port #{fs.port_from+1}"
136
136
  fs.port_from += 1
137
137
  rescue Timeout::Error, Errno::EADDRNOTAVAIL, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Net::SSH::AuthenticationFailed => e
@@ -39,10 +39,19 @@ module RHC::Commands
39
39
 
40
40
  debug "Using user specified SSH: #{options.ssh}" if options.ssh
41
41
 
42
- command_line = [RHC::Helpers.split_path(ssh), ('-vvv' if debug?), rest_app.ssh_string.to_s, command].flatten.compact
42
+ command_line = [RHC::Helpers.split_path(ssh), ('-vv' if debug?), rest_app.ssh_string.to_s, command].flatten.compact
43
43
 
44
44
  debug "Invoking Kernel.exec with #{command_line.inspect}"
45
- Kernel.send(:exec, *command_line)
45
+ begin
46
+ Kernel.send(:exec, *command_line)
47
+ rescue Errno::ENOENT
48
+ debug "SSH executable #{ssh.inspect} not found, splitting and trying again..."
49
+
50
+ command_line = [ssh.chomp('"').reverse.chomp('"').reverse.split(' '), ('-vv' if debug?), rest_app.ssh_string.to_s, command].flatten.compact
51
+ debug "Invoking Kernel.exec with #{command_line.inspect}"
52
+
53
+ Kernel.send(:exec, *command_line)
54
+ end
46
55
  end
47
56
  end
48
57
 
@@ -268,7 +268,7 @@ module RHC
268
268
  else
269
269
  Net::SSH.start(ssh_uri.host, ssh_uri.user) do |ssh|
270
270
  File.open(filename, 'wb') do |file|
271
- ssh.exec! "snapshot" do |channel, stream, data|
271
+ ssh.exec! snapshot_cmd do |channel, stream, data|
272
272
  if stream == :stdout
273
273
  file.write(data)
274
274
  else
@@ -131,6 +131,24 @@ describe RHC::Commands::PortForward do
131
131
  end
132
132
  end
133
133
 
134
+ # Windows 7 reportedly returns EPERM rather than EACCES when the
135
+ # port is in use by a local service (see
136
+ # <https://bugzilla.redhat.com/show_bug.cgi?id=1125963>).
137
+ context 'when local port is in use by local service on Windows 7' do
138
+ before(:each) do
139
+ Net::SSH.should_receive(:start).with(@uri.host, @uri.user).and_yield(@ssh).twice
140
+ @ssh.should_receive(:exec!).with("rhc-list-ports").and_yield(nil, :stderr, 'mysql -> 127.0.0.1:3306')
141
+ forward = double(Net::SSH::Service::Forward)
142
+ @ssh.should_receive(:forward).at_least(2).and_return(forward)
143
+ forward.should_receive(:local).with(3306, '127.0.0.1', 3306).and_raise(Errno::EPERM)
144
+ forward.should_receive(:local).with(3307, '127.0.0.1', 3306)
145
+ @ssh.should_receive(:loop).and_raise(Interrupt.new)
146
+ end
147
+ it 'should bind to a higher port' do
148
+ run_output.should include("3307")
149
+ end
150
+ end
151
+
134
152
  context 'when host refuses connection' do
135
153
  before(:each) do
136
154
  Net::SSH.should_receive(:start).with(@uri.host, @uri.user).and_yield(@ssh).twice
@@ -36,7 +36,7 @@ describe RHC::Commands::Ssh do
36
36
  before(:each) do
37
37
  @domain = rest_client.add_domain("mockdomain")
38
38
  @domain.add_application("app1", "mock_type")
39
- Kernel.should_receive(:exec).with("ssh", "-vvv", "fakeuuidfortestsapp1@127.0.0.1").and_return(0)
39
+ Kernel.should_receive(:exec).with("ssh", "-vv", "fakeuuidfortestsapp1@127.0.0.1").and_return(0)
40
40
  end
41
41
  # It would be nice if this checked for the debug[123]: messages from standard error but im not sure how to look for that.
42
42
  it { run_output.should match("Connecting to fakeuuidfortestsapp") }
@@ -171,6 +171,23 @@ describe RHC::Commands::Ssh do
171
171
  end
172
172
  end
173
173
 
174
+ describe 'app ssh custom ssh with spaces' do
175
+ let(:arguments) { ['app', 'ssh', 'app1', '--ssh', '/path/to/ssh --with_custom_flag'] }
176
+ context 'when custom ssh does not exist as a path' do
177
+ before(:each) do
178
+ @domain = rest_client.add_domain("mockdomain")
179
+ @domain.add_application("app1", "mock_type")
180
+ RHC::Commands::Ssh.any_instance.should_not_receive(:has_ssh?)
181
+ File.should_receive(:exist?).at_least(1).and_return(true)
182
+ File.should_receive(:executable?).at_least(1).and_return(true)
183
+ subject.class.any_instance.stub(:discover_git_executable).and_return('git')
184
+ Kernel.should_receive(:exec).with('/path/to/ssh --with_custom_flag', "fakeuuidfortestsapp1@127.0.0.1").once.times.and_raise(Errno::ENOENT)
185
+ Kernel.should_receive(:exec).with('/path/to/ssh', '--with_custom_flag', "fakeuuidfortestsapp1@127.0.0.1").once.times.and_return(0)
186
+ end
187
+ it { expect { run }.to exit_with_code(0) }
188
+ end
189
+ end
190
+
174
191
  describe 'ssh tests' do
175
192
  let(:arguments) { ['app', 'ssh', 'app1', '-s /bin/blah'] }
176
193
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 147
4
+ hash: 155
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 32
9
- - 2
10
- version: 1.32.2
8
+ - 33
9
+ - 4
10
+ version: 1.33.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Red Hat
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2014-11-13 00:00:00 Z
18
+ date: 2014-12-04 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: net-ssh