85 lines
2.9 KiB
Ruby
85 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::BackgroundMigration::NullifyLastErrorFromProjectMirrorData, feature_category: :source_code_management do # rubocop:disable Layout/LineLength
|
|
it 'nullifies last_error column on all rows' do
|
|
namespaces = table(:namespaces)
|
|
projects = table(:projects)
|
|
project_import_states = table(:project_mirror_data)
|
|
|
|
group = namespaces.create!(name: 'gitlab', path: 'gitlab-org')
|
|
|
|
project_namespace_1 = namespaces.create!(name: 'gitlab', path: 'gitlab-org')
|
|
project_namespace_2 = namespaces.create!(name: 'gitlab', path: 'gitlab-org')
|
|
project_namespace_3 = namespaces.create!(name: 'gitlab', path: 'gitlab-org')
|
|
|
|
project_1 = projects.create!(
|
|
namespace_id: group.id,
|
|
project_namespace_id: project_namespace_1.id,
|
|
name: 'test1'
|
|
)
|
|
project_2 = projects.create!(
|
|
namespace_id: group.id,
|
|
project_namespace_id: project_namespace_2.id,
|
|
name: 'test2'
|
|
)
|
|
project_3 = projects.create!(
|
|
namespace_id: group.id,
|
|
project_namespace_id: project_namespace_3.id,
|
|
name: 'test3'
|
|
)
|
|
|
|
project_import_state_1 = project_import_states.create!(
|
|
project_id: project_1.id,
|
|
status: 0,
|
|
last_update_started_at: 1.hour.ago,
|
|
last_update_scheduled_at: 1.hour.ago,
|
|
last_update_at: 1.hour.ago,
|
|
last_successful_update_at: 2.days.ago,
|
|
last_error: '13:fetch remote: "fatal: unable to look up user:pass@gitlab.com (port 9418) (nodename nor servname provided, or not known)\n": exit status 128.', # rubocop:disable Layout/LineLength
|
|
correlation_id_value: SecureRandom.uuid,
|
|
jid: SecureRandom.uuid
|
|
)
|
|
|
|
project_import_states.create!(
|
|
project_id: project_2.id,
|
|
status: 1,
|
|
last_update_started_at: 1.hour.ago,
|
|
last_update_scheduled_at: 1.hour.ago,
|
|
last_update_at: 1.hour.ago,
|
|
last_successful_update_at: nil,
|
|
next_execution_timestamp: 1.day.from_now,
|
|
last_error: '',
|
|
correlation_id_value: SecureRandom.uuid,
|
|
jid: SecureRandom.uuid
|
|
)
|
|
|
|
project_import_state_3 = project_import_states.create!(
|
|
project_id: project_3.id,
|
|
status: 2,
|
|
last_update_started_at: 1.hour.ago,
|
|
last_update_scheduled_at: 1.hour.ago,
|
|
last_update_at: 1.hour.ago,
|
|
last_successful_update_at: 1.hour.ago,
|
|
next_execution_timestamp: 1.day.from_now,
|
|
last_error: nil,
|
|
correlation_id_value: SecureRandom.uuid,
|
|
jid: SecureRandom.uuid
|
|
)
|
|
|
|
migration = described_class.new(
|
|
start_id: project_import_state_1.id,
|
|
end_id: project_import_state_3.id,
|
|
batch_table: :project_mirror_data,
|
|
batch_column: :id,
|
|
sub_batch_size: 1,
|
|
pause_ms: 0,
|
|
connection: ApplicationRecord.connection
|
|
)
|
|
|
|
w_last_error_count = -> { project_import_states.where.not(last_error: nil).count } # rubocop:disable CodeReuse/ActiveRecord
|
|
expect { migration.perform }.to change(&w_last_error_count).from(2).to(0)
|
|
end
|
|
end
|