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 |