From 913fc4c4379b5a43560302916a9c604e71dcecf4 Mon Sep 17 00:00:00 2001 From: Aakriti Gupta Date: Wed, 22 Oct 2025 14:03:47 +0200 Subject: [PATCH] Geo:Add integration tests for project repo replication v2 --- ...ository_replication_v2_integration_spec.rb | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 ee/spec/replicators/geo/geo_project_repository_replication_v2_integration_spec.rb diff --git a/ee/spec/replicators/geo/geo_project_repository_replication_v2_integration_spec.rb b/ee/spec/replicators/geo/geo_project_repository_replication_v2_integration_spec.rb new file mode 100644 index 00000000000000..4ab291c852c076 --- /dev/null +++ b/ee/spec/replicators/geo/geo_project_repository_replication_v2_integration_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Geo Project Repository Replication V2 Integration', :geo, feature_category: :geo_replication do + include EE::GeoHelpers + + let_it_be(:primary) { create(:geo_node, :primary) } + let_it_be(:secondary) { create(:geo_node) } + let_it_be(:project) { create(:project, :repository) } + let_it_be(:project_repository) { project.project_repository } + + before do + stub_current_geo_node(secondary) + end + + describe 'switching between legacy and v2 replication' do + it 'maintains data consistency when switching V1 → V2 → V1' do + # Step 1: Start with V1 (legacy) + stub_feature_flags(geo_project_repository_replication: true) + stub_feature_flags(geo_project_repository_replication_v2: false) + + registry = Geo::ProjectRepositoryRegistry.create!(project: project) + expect(registry.project_id).to eq(project.id) + # Note: project_repository_id might be populated due to populate_missing_foreign_keys + # but the registry should still work correctly in V1 mode + + # Step 2: Switch to V2 + stub_feature_flags(geo_project_repository_replication_v2: true) + + # Registry should work in V2 mode + registry.reload + expect(registry.project_id).to eq(project.id) + expect(registry.project_repository).to eq(project_repository) # Should return project_repository in V2 + + # Step 3: Switch back to V1 + stub_feature_flags(geo_project_repository_replication_v2: false) + + # Should work in V1 mode again + expect(registry.reload.project_id).to eq(project.id) + expect(registry.project).to eq(project) # Should return project in V1 + end + end +end -- GitLab