fluke/devops-service/spec/workers/stack_sync_worker_spec.rb

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