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
|