68 lines
1.9 KiB
Ruby
68 lines
1.9 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe WaitForClusterCreationWorker do
|
|
describe '#perform' do
|
|
context 'when cluster exists' do
|
|
let(:cluster) { create(:gcp_cluster) }
|
|
let(:operation) { double }
|
|
|
|
before do
|
|
allow(operation).to receive(:status).and_return(status)
|
|
allow(operation).to receive(:start_time).and_return(1.minute.ago)
|
|
allow(operation).to receive(:status_message).and_return('error')
|
|
allow_any_instance_of(Ci::FetchGcpOperationService).to receive(:execute).and_yield(operation)
|
|
end
|
|
|
|
context 'when operation status is RUNNING' do
|
|
let(:status) { 'RUNNING' }
|
|
|
|
it 'reschedules worker' do
|
|
expect(described_class).to receive(:perform_in)
|
|
|
|
described_class.new.perform(cluster.id)
|
|
end
|
|
|
|
context 'when operation timeout' do
|
|
before do
|
|
allow(operation).to receive(:start_time).and_return(30.minutes.ago.utc)
|
|
end
|
|
|
|
it 'sets an error message on cluster' do
|
|
described_class.new.perform(cluster.id)
|
|
|
|
expect(cluster.reload).to be_errored
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when operation status is DONE' do
|
|
let(:status) { 'DONE' }
|
|
|
|
it 'finalizes cluster creation' do
|
|
expect_any_instance_of(Ci::FinalizeClusterCreationService).to receive(:execute)
|
|
|
|
described_class.new.perform(cluster.id)
|
|
end
|
|
end
|
|
|
|
context 'when operation status is others' do
|
|
let(:status) { 'others' }
|
|
|
|
it 'sets an error message on cluster' do
|
|
described_class.new.perform(cluster.id)
|
|
|
|
expect(cluster.reload).to be_errored
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when cluster does not exist' do
|
|
it 'does not provision a cluster' do
|
|
expect_any_instance_of(Ci::FetchGcpOperationService).not_to receive(:execute)
|
|
|
|
described_class.new.perform(1234)
|
|
end
|
|
end
|
|
end
|
|
end
|