From 87471cbe882b05bae9957701de0317cde5895d6e Mon Sep 17 00:00:00 2001
From: Toon Claes <toon@gitlab.com>
Date: Wed, 25 Sep 2019 11:13:41 +0200
Subject: [PATCH] Do not care about the order jobs are scheduled

Just make sure each registry is only scheduled once and the registries
the failed repos should be skipped.

Closes https://gitlab.com/gitlab-org/gitlab/issues/12455

Very similar to
https://gitlab.com/gitlab-org/gitlab/merge_requests/5605
---
 .../secondary/shard_worker_spec.rb            | 42 ++++++-------------
 1 file changed, 12 insertions(+), 30 deletions(-)

diff --git a/ee/spec/workers/geo/repository_verification/secondary/shard_worker_spec.rb b/ee/spec/workers/geo/repository_verification/secondary/shard_worker_spec.rb
index 5e0c7cd66bbf6..f5e67ebaad13e 100644
--- a/ee/spec/workers/geo/repository_verification/secondary/shard_worker_spec.rb
+++ b/ee/spec/workers/geo/repository_verification/secondary/shard_worker_spec.rb
@@ -95,23 +95,18 @@
       let(:project5_both_verified) { create(:repository_state, :repository_verified, :wiki_verified).project }
       let(:project6_both_verified) { create(:repository_state, :repository_verified, :wiki_verified).project }
 
-      # https://gitlab.com/gitlab-org/gitlab/issues/12455
       it 'handles multiple batches of projects needing verification' do
         reg1 = create(:geo_project_registry, :synced, :repository_verification_outdated, project: project1_repo_verified)
         reg2 = create(:geo_project_registry, :synced, :repository_verification_outdated, project: project2_repo_verified)
 
-        expect(secondary_single_worker).to receive(:perform_async).with(reg1.id).once
+        expect(secondary_single_worker).to receive(:perform_async).with(reg1.id).once.and_call_original
+        expect(secondary_single_worker).to receive(:perform_async).with(reg2.id).once.and_call_original
 
-        subject.perform(shard_name)
-
-        reg1.update!(repository_verification_checksum_sha: project1_repo_verified.repository_state.repository_verification_checksum)
-
-        expect(secondary_single_worker).to receive(:perform_async).with(reg2.id).once
-
-        subject.perform(shard_name)
+        3.times do
+          Sidekiq::Testing.inline! { subject.perform(shard_name) }
+        end
       end
 
-      # https://gitlab.com/gitlab-org/gitlab/issues/12455
       it 'handles multiple batches of projects needing verification, skipping failed repos' do
         reg1 = create(:geo_project_registry, :synced, :repository_verification_outdated, project: project1_repo_verified)
         reg2 = create(:geo_project_registry, :synced, :repository_verification_outdated, project: project2_repo_verified)
@@ -120,27 +115,14 @@
         create(:geo_project_registry, :synced, :repository_verification_failed, :wiki_verification_failed, project: project5_both_verified)
         reg6 = create(:geo_project_registry, :synced, project: project6_both_verified)
 
-        expect(secondary_single_worker).to receive(:perform_async).with(reg1.id).once
-
-        subject.perform(shard_name)
-
-        reg1.update!(repository_verification_checksum_sha: project1_repo_verified.repository_state.repository_verification_checksum)
-
-        expect(secondary_single_worker).to receive(:perform_async).with(reg2.id).once
+        expect(secondary_single_worker).to receive(:perform_async).with(reg1.id).once.and_call_original
+        expect(secondary_single_worker).to receive(:perform_async).with(reg2.id).once.and_call_original
+        expect(secondary_single_worker).to receive(:perform_async).with(reg4.id).once.and_call_original
+        expect(secondary_single_worker).to receive(:perform_async).with(reg6.id).once.and_call_original
 
-        subject.perform(shard_name)
-
-        reg2.update!(repository_verification_checksum_sha: project2_repo_verified.repository_state.repository_verification_checksum)
-
-        expect(secondary_single_worker).to receive(:perform_async).with(reg4.id).once
-
-        subject.perform(shard_name)
-
-        reg4.update!(last_wiki_verification_failure: 'Failed!')
-
-        expect(secondary_single_worker).to receive(:perform_async).with(reg6.id).once
-
-        subject.perform(shard_name)
+        7.times do
+          Sidekiq::Testing.inline! { subject.perform(shard_name) }
+        end
       end
     end
 
-- 
GitLab