Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support_specs/database/prevent_cross_database_modification_spec.rb')
-rw-r--r--spec/support_specs/database/prevent_cross_database_modification_spec.rb163
1 files changed, 0 insertions, 163 deletions
diff --git a/spec/support_specs/database/prevent_cross_database_modification_spec.rb b/spec/support_specs/database/prevent_cross_database_modification_spec.rb
deleted file mode 100644
index e86559bb14a..00000000000
--- a/spec/support_specs/database/prevent_cross_database_modification_spec.rb
+++ /dev/null
@@ -1,163 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'Database::PreventCrossDatabaseModification' do
- let_it_be(:pipeline, refind: true) { create(:ci_pipeline) }
- let_it_be(:project, refind: true) { create(:project) }
-
- shared_examples 'succeessful examples' do
- context 'outside transaction' do
- it { expect { run_queries }.not_to raise_error }
- end
-
- context 'within transaction' do
- it do
- Project.transaction do
- expect { run_queries }.not_to raise_error
- end
- end
- end
-
- context 'within nested transaction' do
- it do
- Project.transaction(requires_new: true) do
- Project.transaction(requires_new: true) do
- expect { run_queries }.not_to raise_error
- end
- end
- end
- end
- end
-
- context 'when CI and other tables are read in a transaction' do
- def run_queries
- pipeline.reload
- project.reload
- end
-
- include_examples 'succeessful examples'
- end
-
- context 'when only CI data is modified' do
- def run_queries
- pipeline.touch
- project.reload
- end
-
- include_examples 'succeessful examples'
- end
-
- context 'when other data is modified' do
- def run_queries
- pipeline.reload
- project.touch
- end
-
- include_examples 'succeessful examples'
- end
-
- describe 'with_cross_database_modification_prevented block' do
- it 'raises error when CI and other data is modified' do
- expect do
- with_cross_database_modification_prevented do
- Project.transaction do
- project.touch
- pipeline.touch
- end
- end
- end.to raise_error /Cross-database data modification/
- end
- end
-
- context 'when running tests with prevent_cross_database_modification', :prevent_cross_database_modification do
- context 'when both CI and other data is modified' do
- def run_queries
- project.touch
- pipeline.touch
- end
-
- context 'outside transaction' do
- it { expect { run_queries }.not_to raise_error }
- end
-
- context 'when data modification happens in a transaction' do
- it 'raises error' do
- Project.transaction do
- expect { run_queries }.to raise_error /Cross-database data modification/
- end
- end
-
- context 'when data modification happens in nested transactions' do
- it 'raises error' do
- Project.transaction(requires_new: true) do
- project.touch
- Project.transaction(requires_new: true) do
- expect { pipeline.touch }.to raise_error /Cross-database data modification/
- end
- end
- end
- end
- end
-
- context 'when executing a SELECT FOR UPDATE query' do
- def run_queries
- project.touch
- pipeline.lock!
- end
-
- context 'outside transaction' do
- it { expect { run_queries }.not_to raise_error }
- end
-
- context 'when data modification happens in a transaction' do
- it 'raises error' do
- Project.transaction do
- expect { run_queries }.to raise_error /Cross-database data modification/
- end
- end
- end
- end
- end
-
- context 'when CI association is modified through project' do
- def run_queries
- project.variables.build(key: 'a', value: 'v')
- project.save!
- end
-
- include_examples 'succeessful examples'
- end
-
- describe '#allow_cross_database_modification_within_transaction' do
- it 'skips raising error' do
- expect do
- Gitlab::Database.allow_cross_database_modification_within_transaction(url: 'gitlab-issue') do
- Project.transaction do
- pipeline.touch
- project.touch
- end
- end
- end.not_to raise_error
- end
-
- it 'raises error when complex factories are built referencing both databases' do
- expect do
- ApplicationRecord.transaction do
- create(:ci_pipeline)
- end
- end.to raise_error /Cross-database data modification/
- end
-
- it 'skips raising error on factory creation' do
- expect do
- Gitlab::Database.allow_cross_database_modification_within_transaction(url: 'gitlab-issue') do
- ApplicationRecord.transaction do
- create(:ci_pipeline)
- end
- end
- end.not_to raise_error
- end
- end
- end
-end