diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2018-12-18 21:35:14 -0200 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2018-12-18 21:35:14 -0200 |
commit | 4a132952db680e84f66014ebb4e68e713fa31d35 (patch) | |
tree | 3d629d46c3a9af496aa2385d039508445db80715 | |
parent | 754f66113e91ba880ed92075bd06adc1509c1d8f (diff) | |
download | gitlab-ce-4a132952db680e84f66014ebb4e68e713fa31d35.tar.gz |
Extract a shared example for legacy and hashed storage migrations tests
3 files changed, 46 insertions, 78 deletions
diff --git a/spec/lib/gitlab/background_migration/backfill_hashed_project_repositories_spec.rb b/spec/lib/gitlab/background_migration/backfill_hashed_project_repositories_spec.rb index 236e63ada45..e802613490b 100644 --- a/spec/lib/gitlab/background_migration/backfill_hashed_project_repositories_spec.rb +++ b/spec/lib/gitlab/background_migration/backfill_hashed_project_repositories_spec.rb @@ -3,43 +3,5 @@ require 'spec_helper' describe Gitlab::BackgroundMigration::BackfillHashedProjectRepositories, :migration, schema: 20181130102132 do - describe '#perform' do - let(:namespaces) { table(:namespaces) } - let(:project_repositories) { table(:project_repositories) } - let(:projects) { table(:projects) } - let(:shards) { table(:shards) } - let(:group) { namespaces.create!(name: 'foo', path: 'foo') } - let(:shard) { shards.create!(name: 'default') } - - it 'creates a project_repository row for projects on hashed storage that need one' do - projects.create!(id: 1, name: 'foo', path: 'foo', namespace_id: group.id, storage_version: 1) - projects.create!(id: 2, name: 'bar', path: 'bar', namespace_id: group.id, storage_version: 2) - - expect { described_class.new.perform(1, projects.last.id) }.to change(project_repositories, :count).by(2) - end - - it 'does nothing for projects on hashed storage that have already a project_repository row' do - projects.create!(id: 1, name: 'foo', path: 'foo', namespace_id: group.id, storage_version: 1) - project_repositories.create!(project_id: 1, disk_path: '@phony/foo/bar', shard_id: shard.id) - - expect { described_class.new.perform(1, projects.last.id) }.not_to change(project_repositories, :count) - end - - it 'does nothing for projects on legacy storage' do - projects.create!(name: 'foo', path: 'foo', namespace_id: group.id, storage_version: 0) - - expect { described_class.new.perform(1, projects.last.id) }.not_to change(project_repositories, :count) - end - - it 'inserts rows in a single query' do - projects.create!(name: 'foo', path: 'foo', namespace_id: group.id, storage_version: 1, repository_storage: shard.name) - - control_count = ActiveRecord::QueryRecorder.new { described_class.new.perform(1, projects.last.id) } - - projects.create!(name: 'bar', path: 'bar', namespace_id: group.id, storage_version: 1, repository_storage: shard.name) - projects.create!(name: 'zoo', path: 'zoo', namespace_id: group.id, storage_version: 1, repository_storage: shard.name) - - expect { described_class.new.perform(1, projects.last.id) }.not_to exceed_query_limit(control_count) - end - end + it_behaves_like 'backfill migration for project repositories', :hashed end diff --git a/spec/lib/gitlab/background_migration/backfill_legacy_project_repositories_spec.rb b/spec/lib/gitlab/background_migration/backfill_legacy_project_repositories_spec.rb index 313f0ccc6b6..ae4b53d62e6 100644 --- a/spec/lib/gitlab/background_migration/backfill_legacy_project_repositories_spec.rb +++ b/spec/lib/gitlab/background_migration/backfill_legacy_project_repositories_spec.rb @@ -3,43 +3,5 @@ require 'spec_helper' describe Gitlab::BackgroundMigration::BackfillLegacyProjectRepositories, :migration, schema: 20181218192239 do - describe '#perform' do - let(:namespaces) { table(:namespaces) } - let(:project_repositories) { table(:project_repositories) } - let(:projects) { table(:projects) } - let(:shards) { table(:shards) } - let(:group) { namespaces.create!(name: 'foo', path: 'foo') } - let(:shard) { shards.create!(name: 'default') } - - it 'creates a project_repository row for projects on legacy storage that need one' do - projects.create!(id: 1, name: 'foo', path: 'foo', namespace_id: group.id, storage_version: nil) - projects.create!(id: 2, name: 'bar', path: 'bar', namespace_id: group.id, storage_version: 0) - - expect { described_class.new.perform(1, projects.last.id) }.to change(project_repositories, :count).by(2) - end - - it 'does nothing for projects on legacy storage that have already a project_repository row' do - projects.create!(id: 1, name: 'foo', path: 'foo', namespace_id: group.id, storage_version: 0) - project_repositories.create!(project_id: 1, disk_path: 'phony/foo/bar', shard_id: shard.id) - - expect { described_class.new.perform(1, projects.last.id) }.not_to change(project_repositories, :count) - end - - it 'does nothing for projects on hashed storage' do - projects.create!(name: 'foo', path: 'foo', namespace_id: group.id, storage_version: 1) - - expect { described_class.new.perform(1, projects.last.id) }.not_to change(project_repositories, :count) - end - - it 'inserts rows in a single query' do - projects.create!(name: 'foo', path: 'foo', namespace_id: group.id, storage_version: 0, repository_storage: shard.name) - - control_count = ActiveRecord::QueryRecorder.new { described_class.new.perform(1, projects.last.id) } - - projects.create!(name: 'bar', path: 'bar', namespace_id: group.id, storage_version: 0, repository_storage: shard.name) - projects.create!(name: 'zoo', path: 'zoo', namespace_id: group.id, storage_version: 0, repository_storage: shard.name) - - expect { described_class.new.perform(1, projects.last.id) }.not_to exceed_query_limit(control_count) - end - end + it_behaves_like 'backfill migration for project repositories', :legacy end diff --git a/spec/support/shared_examples/lib/gitlab/background_migration/backfill_project_repositories_examples.rb b/spec/support/shared_examples/lib/gitlab/background_migration/backfill_project_repositories_examples.rb new file mode 100644 index 00000000000..1f688c0f9d3 --- /dev/null +++ b/spec/support/shared_examples/lib/gitlab/background_migration/backfill_project_repositories_examples.rb @@ -0,0 +1,44 @@ +shared_examples 'backfill migration for project repositories' do |storage| + describe '#perform' do + let(:storage_versions) { storage == :legacy ? [nil, 0] : [1, 2] } + let(:storage_version) { storage_versions.first } + let(:namespaces) { table(:namespaces) } + let(:project_repositories) { table(:project_repositories) } + let(:projects) { table(:projects) } + let(:shards) { table(:shards) } + let(:group) { namespaces.create!(name: 'foo', path: 'foo') } + let(:shard) { shards.create!(name: 'default') } + + it "creates a project_repository row for projects on #{storage} storage that needs one" do + storage_versions.each_with_index do |storage_version, index| + projects.create!(name: "foo-#{index}", path: "foo-#{index}", namespace_id: group.id, storage_version: storage_version) + end + + expect { described_class.new.perform(1, projects.last.id) }.to change(project_repositories, :count).by(2) + end + + it "does nothing for projects on #{storage} storage that have already a project_repository row" do + projects.create!(id: 1, name: 'foo', path: 'foo', namespace_id: group.id, storage_version: storage_version) + project_repositories.create!(project_id: 1, disk_path: 'phony/foo/bar', shard_id: shard.id) + + expect { described_class.new.perform(1, projects.last.id) }.not_to change(project_repositories, :count) + end + + it "does nothing for projects on #{storage == :legacy ? 'hashed' : 'legacy'} storage" do + projects.create!(name: 'foo', path: 'foo', namespace_id: group.id, storage_version: storage == :legacy ? 1 : nil) + + expect { described_class.new.perform(1, projects.last.id) }.not_to change(project_repositories, :count) + end + + it 'inserts rows in a single query' do + projects.create!(name: 'foo', path: 'foo', namespace_id: group.id, storage_version: storage_version, repository_storage: shard.name) + + control_count = ActiveRecord::QueryRecorder.new { described_class.new.perform(1, projects.last.id) } + + projects.create!(name: 'bar', path: 'bar', namespace_id: group.id, storage_version: storage_version, repository_storage: shard.name) + projects.create!(name: 'zoo', path: 'zoo', namespace_id: group.id, storage_version: storage_version, repository_storage: shard.name) + + expect { described_class.new.perform(1, projects.last.id) }.not_to exceed_query_limit(control_count) + end + end +end |