Thanks for the info Aslak, I have rewritten my code like you suggest
but have one issue with raising an exception. When I try the code in
the console an exception is raised correctly but in my test code I get
a message "command did not return expected result"
# test
describe Ssh, "Remote" do
before(:each) do
@ssh = mock(Net::SSH)
@response = mock(Net::SSH)
@connection = Ssh::Remote.new
@connection.should_receive(:start).with('server', 'root').and_return(@ssh)
@connection.should_receive(:close)
@ssh.should_receive(:send_command).with('ls /').and_return(@response)
@response.should_receive(:stdout).and_return('a list')
end
it "should raise exception if response does not match expected" do
@connection.remote_command('server', 'root', [{:command => 'ls /',
:expects => /blah/}]).
should raise_error(Ssh::CommandError, 'command did not return
expected result')
end
end
# code exception.rb
module Ssh
class CommandError < Exception
end
end
# ssh.rb
require 'net/ssh'
require 'ssh/exception'
module Ssh
class Remote
def remote_command(server, user, commands=[])
shell = start(server, user)
commands.each do |command|
out = shell.send_command command[:command]
unless out.stdout =~ command[:expects] or command[:expects].blank?
close
raise(CommandError.new, 'command did not return expected result')
end
end
close
return true
end
def start(server, user)
@session = Net::SSH.start(server, user)
@session.shell.sync
end
def close()
@session.close
end
end
end
Thanks
Jamie
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users