57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require 'workers/stack_sync_worker' | ||
|  | require 'lib/executors/stack_executor' | ||
|  | 
 | ||
|  | RSpec.describe StackSyncWorker, type: :worker, stubbed_connector: true, init_messages: true do | ||
|  |   let(:worker) { described_class.new } | ||
|  |   let(:stack) { build(:stack) } | ||
|  |   let(:perform) { worker.perform('stack_name' => 'stack') } | ||
|  |   let(:executor) { | ||
|  |     instance_double(Devops::Executor::StackExecutor, | ||
|  |       delete_stale_servers: nil, | ||
|  |       persist_new_servers: nil, | ||
|  |       bootstrap_just_persisted: double('result', reason: 'ok', code: 0) | ||
|  |     ) | ||
|  |   } | ||
|  | 
 | ||
|  |   before do | ||
|  |     allow(worker).to receive(:update_report) | ||
|  |     allow(worker).to receive(:executor) { executor } | ||
|  |     allow(worker).to receive(:sleep) | ||
|  |     allow(stubbed_connector).to receive(:stack) { stack } | ||
|  |     allow(stubbed_connector).to receive(:lock_persisting_stack) | ||
|  |     allow(stubbed_connector).to receive(:unlock_persisting_stack) | ||
|  |   end | ||
|  | 
 | ||
|  |   it 'saves report with owner set to SYSTEM' do | ||
|  |     expect(worker).to receive(:update_report) do |options| | ||
|  |       expect(options).to include('created_by' => 'SYSTEM') | ||
|  |     end | ||
|  |     perform | ||
|  |   end | ||
|  | 
 | ||
|  |   it 'locks persisting of a stack before start and unlocks after finish' do | ||
|  |     expect(worker).to receive(:wait_until_stack_is_unlocked).ordered | ||
|  |     expect(stack).to receive(:lock_persisting!).ordered | ||
|  |     expect(executor).to receive(:delete_stale_servers).ordered | ||
|  |     expect(executor).to receive(:persist_new_servers).ordered | ||
|  |     expect(stack).to receive(:unlock_persisting!).ordered | ||
|  |     perform | ||
|  |   end | ||
|  | 
 | ||
|  |   it 'unlocks persisting even in case of failures' do | ||
|  |     allow(executor).to receive(:persist_new_servers) { raise } | ||
|  |     expect(stack).to receive(:unlock_persisting!) | ||
|  |     expect { perform }.to raise_error StandardError | ||
|  |   end | ||
|  | 
 | ||
|  |   it 'waites until stack is unlocked' do | ||
|  |     allow(stubbed_connector).to receive(:stack).and_return( | ||
|  |       build(:stack, persisting_is_locked: true), | ||
|  |       build(:stack, persisting_is_locked: true), | ||
|  |       build(:stack, persisting_is_locked: false) | ||
|  |     ) | ||
|  |     expect(worker).to receive(:sleep).exactly(2).times | ||
|  |     perform | ||
|  |   end | ||
|  | 
 | ||
|  | end |