spec/beaker/dsl/helpers/host_helpers_spec.rb in beaker-4.42.0 vs spec/beaker/dsl/helpers/host_helpers_spec.rb in beaker-5.0.0
- old
+ new
@@ -7,204 +7,183 @@
include Beaker::DSL::Patterns
def logger
RSpec::Mocks::Double.new('logger').as_null_object
end
-
end
describe ClassMixedWithDSLHelpers do
- let( :opts ) { Beaker::Options::Presets.env_vars }
- let( :command ){ 'ls' }
- let( :host ) { double.as_null_object }
- let( :result ) { Beaker::Result.new( host, command ) }
+ let(:opts) { Beaker::Options::Presets.env_vars }
+ let(:command) { 'ls' }
+ let(:host) { double.as_null_object }
+ let(:result) { Beaker::Result.new(host, command) }
- let( :master ) { make_host( 'master', :roles => %w( master agent default) ) }
- let( :agent ) { make_host( 'agent', :roles => %w( agent ) ) }
- let( :custom ) { make_host( 'custom', :roles => %w( custom agent ) ) }
- let( :dash ) { make_host( 'console', :roles => %w( dashboard agent ) ) }
- let( :db ) { make_host( 'db', :roles => %w( database agent ) ) }
- let( :hosts ) { [ master, agent, dash, db, custom ] }
+ let(:master) { make_host('master', :roles => %w(master agent default)) }
+ let(:agent) { make_host('agent', :roles => %w(agent)) }
+ let(:custom) { make_host('custom', :roles => %w(custom agent)) }
+ let(:dash) { make_host('console', :roles => %w(dashboard agent)) }
+ let(:db) { make_host('db', :roles => %w(database agent)) }
+ let(:hosts) { [master, agent, dash, db, custom] }
describe '#on' do
-
before do
result.stdout = 'stdout'
result.stderr = 'stderr'
result.exit_code = 0
end
it 'allows the environment the command is run within to be specified' do
- allow( subject ).to receive( :hosts ).and_return( hosts )
+ allow(subject).to receive(:hosts).and_return(hosts)
- expect( Beaker::Command ).to receive( :new ).
- with( 'ls ~/.bin', [], {'ENV' => { :HOME => '/tmp/test_home' }} )
+ expect(Beaker::Command).to receive(:new)
+ .with('ls ~/.bin', [], { 'ENV' => { :HOME => '/tmp/test_home' } })
- subject.on( host, 'ls ~/.bin', :environment => {:HOME => '/tmp/test_home' } )
+ subject.on(host, 'ls ~/.bin', :environment => { :HOME => '/tmp/test_home' })
end
describe 'with a beaker command object passed in as the command argument' do
- let( :command ) { Beaker::Command.new('commander command', [], :environment => {:HOME => 'default'}) }
+ let(:command) { Beaker::Command.new('commander command', [], :environment => { :HOME => 'default' }) }
it 'overwrites the command environment with the environment specified in #on' do
- expect( host ).to receive( :exec ) do |command|
- expect(command.environment).to eq({:HOME => 'override'})
+ expect(host).to receive(:exec) do |command|
+ expect(command.environment).to eq({ :HOME => 'override' })
end
- subject.on( host, command, :environment => {:HOME => 'override'})
+ subject.on(host, command, :environment => { :HOME => 'override' })
end
it 'uses the command environment if there is no overriding argument in #on' do
- expect( host ).to receive( :exec ) do |command|
- expect(command.environment).to eq({:HOME => 'default'})
+ expect(host).to receive(:exec) do |command|
+ expect(command.environment).to eq({ :HOME => 'default' })
end
- subject.on( host, command )
+ subject.on(host, command)
end
-
end
it 'if the host is a String Object, finds the matching hosts with that String as role' do
- allow( subject ).to receive( :hosts ).and_return( hosts )
+ allow(subject).to receive(:hosts).and_return(hosts)
- expect( master ).to receive( :exec ).once
+ expect(master).to receive(:exec).once
- subject.on( 'master', 'echo hello')
+ subject.on('master', 'echo hello')
end
it 'if the host is a Symbol Object, finds the matching hosts with that Symbol as role' do
- allow( subject ).to receive( :hosts ).and_return( hosts )
+ allow(subject).to receive(:hosts).and_return(hosts)
- expect( master ).to receive( :exec ).once
+ expect(master).to receive(:exec).once
- subject.on( :master, 'echo hello')
+ subject.on(:master, 'echo hello')
end
it 'executes in parallel if run_in_parallel=true' do
InParallel::InParallelExecutor.logger = logger
FakeFS.deactivate!
- allow( subject ).to receive( :hosts ).and_return( hosts )
+ allow(subject).to receive(:hosts).and_return(hosts)
expected = []
hosts.each_with_index do |host, i|
expected << i
- allow( host ).to receive( :exec ).and_return( i )
+ allow(host).to receive(:exec).and_return(i)
end
# This will only get hit if forking processes is supported and at least 2 items are being submitted to run in parallel
- expect( InParallel::InParallelExecutor ).to receive(:_execute_in_parallel).with(any_args).and_call_original.exactly(5).times
- results = subject.on( hosts, command, {:run_in_parallel => true})
- expect( results ).to be == expected
+ expect(InParallel::InParallelExecutor).to receive(:_execute_in_parallel).with(any_args).and_call_original.exactly(5).times
+ results = subject.on(hosts, command, { :run_in_parallel => true })
+ expect(results).to be == expected
end
it 'delegates to itself for each host passed' do
- allow( subject ).to receive( :hosts ).and_return( hosts )
+ allow(subject).to receive(:hosts).and_return(hosts)
expected = []
hosts.each_with_index do |host, i|
expected << i
- expect( host ).to receive( :exec ).and_return( i )
+ expect(host).to receive(:exec).and_return(i)
end
- results = subject.on( hosts, command )
- expect( results ).to be == expected
+ results = subject.on(hosts, command)
+ expect(results).to be == expected
end
context 'upon command completion' do
before do
- allow( subject ).to receive( :hosts ).and_return( hosts )
- expect( host ).to receive( :exec ).and_return( result )
- @res = subject.on( host, command )
+ allow(subject).to receive(:hosts).and_return(hosts)
+ expect(host).to receive(:exec).and_return(result)
+ @res = subject.on(host, command)
end
it 'returns the result of the action' do
- expect( @res ).to be == result
+ expect(@res).to be == result
end
it 'provides access to stdout' do
- expect( @res.stdout ).to be == 'stdout'
+ expect(@res.stdout).to be == 'stdout'
end
it 'provides access to stderr' do
- expect( @res.stderr ).to be == 'stderr'
+ expect(@res.stderr).to be == 'stderr'
end
it 'provides access to exit_code' do
- expect( @res.exit_code ).to be == 0
+ expect(@res.exit_code).to be == 0
end
end
context 'when passed a block with arity of 1' do
before do
- allow( subject ).to receive( :hosts ).and_return( hosts )
- expect( host ).to receive( :exec ).and_return( result )
+ allow(subject).to receive(:hosts).and_return(hosts)
+ expect(host).to receive(:exec).and_return(result)
end
it 'yields result' do
subject.on host, command do |containing_class|
- expect( containing_class ).
- to be_an_instance_of( Beaker::Result )
+ expect(containing_class)
+ .to be_an_instance_of(Beaker::Result)
end
end
it 'provides access to stdout' do
subject.on host, command do |containing_class|
- expect( containing_class.stdout ).to be == 'stdout'
+ expect(containing_class.stdout).to be == 'stdout'
end
end
it 'provides access to stderr' do
subject.on host, command do |containing_class|
- expect( containing_class.stderr ).to be == 'stderr'
+ expect(containing_class.stderr).to be == 'stderr'
end
end
it 'provides access to exit_code' do
subject.on host, command do |containing_class|
- expect( containing_class.exit_code ).to be == 0
+ expect(containing_class.exit_code).to be == 0
end
end
end
context 'when passed a block with arity of 0' do
before do
- allow( subject ).to receive( :hosts ).and_return( hosts )
- expect( host ).to receive( :exec ).and_return( result )
+ allow(subject).to receive(:hosts).and_return(hosts)
+ expect(host).to receive(:exec).and_return(result)
end
it 'yields self' do
subject.on host, command do
- expect( subject ).
- to be_an_instance_of( described_class )
+ expect(subject)
+ .to be_an_instance_of(described_class)
end
end
-
- it 'provides access to stdout' do
- subject.on host, command do
- expect( subject.stdout ).to be == 'stdout'
- end
- end
-
- it 'provides access to stderr' do
- subject.on host, command do
- expect( subject.stderr ).to be == 'stderr'
- end
- end
-
- it 'provides access to exit_code' do
- subject.on host, command do
- expect( subject.exit_code ).to be == 0
- end
- end
end
it 'errors if command is not a String or Beaker::Command' do
- expect {
- subject.on( host, Object.new )
- }.to raise_error( ArgumentError, /called\ with\ a\ String\ or\ Beaker/ )
+ expect do
+ subject.on(host, Object.new)
+ end.to raise_error(ArgumentError, /called\ with\ a\ String\ or\ Beaker/)
end
it 'executes the passed Beaker::Command if given as command argument' do
- command_test = Beaker::Command.new( 'echo face_testing' )
- expect( master ).to receive( :exec ).with( command_test, anything )
- subject.on( master, command_test )
+ command_test = Beaker::Command.new('echo face_testing')
+ expect(master).to receive(:exec).with(command_test, anything)
+ subject.on(master, command_test)
end
end
describe "#retry_on" do
it 'fails correctly when command never succeeds' do
@@ -213,174 +192,174 @@
result.exit_code = 1
retries = 5
opts = {
- :max_retries => retries,
+ :max_retries => retries,
:retry_interval => 0.0001,
}
- allow( subject ).to receive(:on).and_return(result)
- expect( subject ).to receive(:on).exactly(retries+2)
+ allow(subject).to receive(:on).and_return(result)
+ expect(subject).to receive(:on).exactly(retries + 2)
expect { subject.retry_on(host, command, opts) }.to raise_error(RuntimeError)
end
it 'will return success correctly if it succeeds the first time' do
result.stdout = 'stdout'
result.stderr = 'stderr'
result.exit_code = 0
opts = {
- :max_retries => 5,
+ :max_retries => 5,
:retry_interval => 0.0001,
}
- allow( subject ).to receive(:on).and_return(result)
- expect( subject ).to receive(:on).once
+ allow(subject).to receive(:on).and_return(result)
+ expect(subject).to receive(:on).once
result_given = subject.retry_on(host, command, opts)
expect(result_given.exit_code).to be === 0
end
it 'will return success correctly if it succeeds after failing a few times' do
result.stdout = 'stdout'
result.stderr = 'stderr'
opts = {
- :max_retries => 10,
+ :max_retries => 10,
:retry_interval => 0.1,
}
reps_num = 4
count = 0
- allow( subject ).to receive(:on) do
+ allow(subject).to receive(:on) do
result.exit_code = count > reps_num ? 0 : 1
count += 1
result
end
- expect( subject ).to receive(:on).exactly(reps_num + 2)
+ expect(subject).to receive(:on).exactly(reps_num + 2)
result_given = subject.retry_on(host, command, opts)
expect(result_given.exit_code).to be === 0
end
end
describe "shell" do
it 'delegates to #on with the default host' do
- allow( subject ).to receive( :hosts ).and_return( hosts )
+ allow(subject).to receive(:hosts).and_return(hosts)
- expect( subject ).to receive( :on ).with( master, "echo hello", {}).once
+ expect(subject).to receive(:on).with(master, "echo hello", {}).once
- subject.shell( "echo hello" )
+ subject.shell("echo hello")
end
end
describe '#scp_from' do
it 'delegates to the host' do
- allow( subject ).to receive( :hosts ).and_return( hosts )
- expect( subject ).to receive( :logger ).exactly( hosts.length ).times
- expect( result ).to receive( :log ).exactly( hosts.length ).times
+ allow(subject).to receive(:hosts).and_return(hosts)
+ expect(subject).to receive(:logger).exactly(hosts.length).times
+ expect(result).to receive(:log).exactly(hosts.length).times
hosts.each do |host|
- expect( host ).to receive( :do_scp_from ).and_return( result )
+ expect(host).to receive(:do_scp_from).and_return(result)
end
- subject.scp_from( hosts, '/var/log/my.log', 'log/my.log' )
+ subject.scp_from(hosts, '/var/log/my.log', 'log/my.log')
end
end
describe '#scp_to' do
it 'delegates to the host' do
- allow( subject ).to receive( :hosts ).and_return( hosts )
- expect( subject ).to receive( :logger ).exactly( hosts.length ).times
- expect( result ).to receive( :log ).exactly( hosts.length ).times
+ allow(subject).to receive(:hosts).and_return(hosts)
+ expect(subject).to receive(:logger).exactly(hosts.length).times
+ expect(result).to receive(:log).exactly(hosts.length).times
hosts.each do |host|
- expect( host ).to receive( :do_scp_to ).and_return( result )
+ expect(host).to receive(:do_scp_to).and_return(result)
end
- subject.scp_to( hosts, '/var/log/my.log', 'log/my.log' )
+ subject.scp_to(hosts, '/var/log/my.log', 'log/my.log')
end
end
describe '#rsync_to' do
it 'delegates to the host' do
- allow( subject ).to receive( :hosts ).and_return( hosts )
+ allow(subject).to receive(:hosts).and_return(hosts)
hosts.each do |host|
- expect( host ).to receive( :do_rsync_to ).and_return( result )
+ expect(host).to receive(:do_rsync_to).and_return(result)
end
- subject.rsync_to( hosts, '/var/log/my.log', 'log/my.log' )
+ subject.rsync_to(hosts, '/var/log/my.log', 'log/my.log')
end
end
describe '#create_remote_file using scp' do
it 'scps the contents passed in to the hosts' do
my_opts = { :silent => true }
tmpfile = double
- expect( tmpfile ).to receive( :path ).twice.
- and_return( '/local/path/to/blah' )
+ expect(tmpfile).to receive(:path).twice
+ .and_return('/local/path/to/blah')
- expect( Tempfile ).to receive( :open ).and_yield( tmpfile )
+ expect(Tempfile).to receive(:open).and_yield(tmpfile)
- expect( File ).to receive( :open )
+ expect(File).to receive(:open)
- expect( subject ).to receive( :scp_to ).
- with( hosts, '/local/path/to/blah', '/remote/path', my_opts )
+ expect(subject).to receive(:scp_to)
+ .with(hosts, '/local/path/to/blah', '/remote/path', my_opts)
- subject.create_remote_file( hosts, '/remote/path', 'blah', my_opts )
+ subject.create_remote_file(hosts, '/remote/path', 'blah', my_opts)
end
end
describe '#create_remote_file using rsync' do
it 'scps the contents passed in to the hosts' do
my_opts = { :silent => true, :protocol => 'rsync' }
tmpfile = double
- expect( tmpfile ).to receive( :path ).twice.
- and_return( '/local/path/to/blah' )
+ expect(tmpfile).to receive(:path).twice
+ .and_return('/local/path/to/blah')
- expect( Tempfile ).to receive( :open ).and_yield( tmpfile )
+ expect(Tempfile).to receive(:open).and_yield(tmpfile)
- expect( File ).to receive( :open )
+ expect(File).to receive(:open)
- expect( subject ).to receive( :rsync_to ).
- with( hosts, '/local/path/to/blah', '/remote/path', my_opts )
+ expect(subject).to receive(:rsync_to)
+ .with(hosts, '/local/path/to/blah', '/remote/path', my_opts)
- subject.create_remote_file( hosts, '/remote/path', 'blah', my_opts )
+ subject.create_remote_file(hosts, '/remote/path', 'blah', my_opts)
end
end
describe '#run_script_on' do
it 'scps the script to a tmpdir and executes it on host(s)' do
- expect( subject ).to receive( :scp_to )
- expect( subject ).to receive( :on )
- subject.run_script_on( 'host', '~/.bin/make-enterprisy' )
+ expect(subject).to receive(:scp_to)
+ expect(subject).to receive(:on)
+ subject.run_script_on('host', '~/.bin/make-enterprisy')
end
end
describe '#run_script' do
it 'delegates to #run_script_on with the default host' do
- allow( subject ).to receive( :hosts ).and_return( hosts )
+ allow(subject).to receive(:hosts).and_return(hosts)
- expect( subject ).to receive( :run_script_on ).with( master, "/tmp/test.sh", {}).once
+ expect(subject).to receive(:run_script_on).with(master, "/tmp/test.sh", {}).once
- subject.run_script( '/tmp/test.sh' )
+ subject.run_script('/tmp/test.sh')
end
end
describe '#install_package' do
it 'delegates to Host#install_package with arguments on the passed Host' do
- expect( host ).to receive( :install_package ).with( 'pkg_name', '', '1.2.3' )
- subject.install_package( host, 'pkg_name', '1.2.3' )
+ expect(host).to receive(:install_package).with('pkg_name', '', '1.2.3')
+ subject.install_package(host, 'pkg_name', '1.2.3')
end
end
describe '#uninstall_package' do
it 'delegates to Host#uninstall_package on the passed Host' do
- expect( host ).to receive( :uninstall_package ).with( 'pkg_name' )
- subject.uninstall_package( host, 'pkg_name' )
+ expect(host).to receive(:uninstall_package).with('pkg_name')
+ subject.uninstall_package(host, 'pkg_name')
end
end
end