59 lines
2.4 KiB
Ruby
59 lines
2.4 KiB
Ruby
|
|
require 'workers/stack_bootstrap_worker'
|
||
|
|
|
||
|
|
RSpec.describe StackServersBootstrapper, stubbed_connector: true do
|
||
|
|
let(:out) { double(:out, puts: nil, flush: nil) }
|
||
|
|
let(:jid) { 1000 }
|
||
|
|
let(:bootstrapper) { described_class.new(out, jid) }
|
||
|
|
let(:servers) { [build(:server, id: 'a'), build(:server, id: 'b')] }
|
||
|
|
let(:bootstrap_job_ids) { %w(100 200) }
|
||
|
|
let(:subreport1) { build(:report, id: bootstrap_job_ids.first) }
|
||
|
|
let(:subreport2) { build(:report, id: bootstrap_job_ids.last) }
|
||
|
|
|
||
|
|
describe '#bootstrap' do
|
||
|
|
let(:bootstrap!) { bootstrapper.bootstrap(servers) }
|
||
|
|
|
||
|
|
before do
|
||
|
|
allow(Worker).to receive(:start_async).and_return(*bootstrap_job_ids)
|
||
|
|
allow(stubbed_connector).to receive(:add_report_subreports)
|
||
|
|
allow(stubbed_connector).to receive(:report) do |subreport_id|
|
||
|
|
subreport_id == '100' ? subreport1 : subreport2
|
||
|
|
end
|
||
|
|
allow(bootstrapper).to receive(:sleep)
|
||
|
|
end
|
||
|
|
|
||
|
|
it 'start bootstrap workers' do
|
||
|
|
expect(Worker).to receive(:start_async).with(BootstrapWorker, hash_including(:server_attrs, :bootstrap_template, :owner))
|
||
|
|
bootstrap!
|
||
|
|
end
|
||
|
|
|
||
|
|
it 'add subreports' do
|
||
|
|
expect(stubbed_connector).to receive(:add_report_subreports).with(jid, bootstrap_job_ids)
|
||
|
|
bootstrap!
|
||
|
|
end
|
||
|
|
|
||
|
|
it 'waits for job to end' do
|
||
|
|
allow(subreport1).to receive(:status).and_return('running', 'running', 'running', 'completed')
|
||
|
|
allow(subreport2).to receive(:status).and_return('running', 'running', 'running', 'completed')
|
||
|
|
expect(bootstrapper).to receive(:sleep).exactly(2*4).times
|
||
|
|
bootstrap!
|
||
|
|
end
|
||
|
|
|
||
|
|
it 'raises StackServerBootstrapError if an error occured during bootstrap' do
|
||
|
|
allow(subreport1).to receive(:status) {'failed'}
|
||
|
|
allow(subreport1).to receive(:job_result_code) { Devops::Executor::ServerExecutor.error_code(:server_bootstrap_fail) }
|
||
|
|
expect { bootstrap! }.to raise_error StackServerBootstrapError
|
||
|
|
end
|
||
|
|
|
||
|
|
it 'raises StackServerDeployError if an error occured during deploy' do
|
||
|
|
allow(subreport1).to receive(:status) {'failed'}
|
||
|
|
allow(subreport1).to receive(:job_result_code) { Devops::Executor::ServerExecutor.error_code(:deploy_failed) }
|
||
|
|
expect { bootstrap! }.to raise_error StackServerDeployError
|
||
|
|
end
|
||
|
|
|
||
|
|
it "raises StackServerBootstrapDeployTimeout if bootstrap and deploy hasn't been finished in 5000 seconds" do
|
||
|
|
allow(subreport1).to receive(:status) {'running'}
|
||
|
|
expect { bootstrap! }.to raise_error StackServerBootstrapDeployTimeout
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|