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 | 
