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 | 
