58 lines
2.0 KiB
Ruby
58 lines
2.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Database::CiNamespaceMirrorsConsistencyCheckWorker do
|
|
let(:worker) { described_class.new }
|
|
|
|
describe '#perform' do
|
|
it 'executes the consistency check on namespaces' do
|
|
expect(Database::ConsistencyCheckService).to receive(:new).and_call_original
|
|
expected_result = { batches: 0, matches: 0, mismatches: 0, mismatches_details: [] }
|
|
expect(worker).to receive(:log_extra_metadata_on_done).with(:results, expected_result)
|
|
worker.perform
|
|
end
|
|
|
|
context 'logs should contain the detailed mismatches' do
|
|
let(:first_namespace) { Namespace.all.order(:id).limit(1).first }
|
|
let(:missing_namespace) { Namespace.all.order(:id).limit(2).last }
|
|
|
|
before do
|
|
redis_shared_state_cleanup!
|
|
create_list(:namespace, 10) # This will also create Ci::NameSpaceMirror objects
|
|
missing_namespace.delete
|
|
|
|
allow_next_instance_of(Database::ConsistencyCheckService) do |instance|
|
|
allow(instance).to receive(:random_start_id).and_return(Namespace.first.id)
|
|
end
|
|
end
|
|
|
|
it 'reports the differences to the logs' do
|
|
expected_result = {
|
|
batches: 1,
|
|
matches: 9,
|
|
mismatches: 1,
|
|
mismatches_details: [{
|
|
id: missing_namespace.id,
|
|
source_table: nil,
|
|
target_table: [missing_namespace.traversal_ids]
|
|
}],
|
|
start_id: first_namespace.id,
|
|
next_start_id: first_namespace.id # The batch size > number of namespaces
|
|
}
|
|
expect(worker).to receive(:log_extra_metadata_on_done).with(:results, expected_result)
|
|
worker.perform
|
|
end
|
|
|
|
it 'calls the consistency_fix_service to fix the inconsistencies' do
|
|
allow_next_instance_of(Database::ConsistencyFixService) do |instance|
|
|
expect(instance).to receive(:execute).with(
|
|
ids: [missing_namespace.id]
|
|
).and_call_original
|
|
end
|
|
worker.perform
|
|
end
|
|
end
|
|
end
|
|
end
|