diff options
Diffstat (limited to 'spec/lib/gitlab/repository_cache')
-rw-r--r-- | spec/lib/gitlab/repository_cache/preloader_spec.rb | 91 |
1 files changed, 59 insertions, 32 deletions
diff --git a/spec/lib/gitlab/repository_cache/preloader_spec.rb b/spec/lib/gitlab/repository_cache/preloader_spec.rb index 8c6618c9f8f..71244dd41ed 100644 --- a/spec/lib/gitlab/repository_cache/preloader_spec.rb +++ b/spec/lib/gitlab/repository_cache/preloader_spec.rb @@ -2,53 +2,80 @@ require 'spec_helper' -RSpec.describe Gitlab::RepositoryCache::Preloader, :use_clean_rails_redis_caching do +RSpec.describe Gitlab::RepositoryCache::Preloader, :use_clean_rails_redis_caching, + feature_category: :source_code_management do let(:projects) { create_list(:project, 2, :repository) } let(:repositories) { projects.map(&:repository) } - describe '#preload' do - context 'when the values are already cached' do - before do - # Warm the cache but use a different model so they are not memoized - repos = Project.id_in(projects).order(:id).map(&:repository) + before do + stub_feature_flags(use_primary_store_as_default_for_repository_cache: false) + end - allow(repos[0].head_tree).to receive(:readme_path).and_return('README.txt') - allow(repos[1].head_tree).to receive(:readme_path).and_return('README.md') + shared_examples 'preload' do + describe '#preload' do + context 'when the values are already cached' do + before do + # Warm the cache but use a different model so they are not memoized + repos = Project.id_in(projects).order(:id).map(&:repository) - repos.map(&:exists?) - repos.map(&:readme_path) - end + allow(repos[0]).to receive(:readme_path_gitaly).and_return('README.txt') + allow(repos[1]).to receive(:readme_path_gitaly).and_return('README.md') - it 'prevents individual cache reads for cached methods' do - expect(Rails.cache).to receive(:read_multi).once.and_call_original + repos.map(&:exists?) + repos.map(&:readme_path) + end - described_class.new(repositories).preload( - %i[exists? readme_path] - ) + it 'prevents individual cache reads for cached methods' do + expect(cache).to receive(:read_multi).once.and_call_original - expect(Rails.cache).not_to receive(:read) - expect(Rails.cache).not_to receive(:write) + described_class.new(repositories).preload( + %i[exists? readme_path] + ) - expect(repositories[0].exists?).to eq(true) - expect(repositories[0].readme_path).to eq('README.txt') + expect(cache).not_to receive(:read) + expect(cache).not_to receive(:write) - expect(repositories[1].exists?).to eq(true) - expect(repositories[1].readme_path).to eq('README.md') + expect(repositories[0].exists?).to eq(true) + expect(repositories[0].readme_path).to eq('README.txt') + + expect(repositories[1].exists?).to eq(true) + expect(repositories[1].readme_path).to eq('README.md') + end end - end - context 'when values are not cached' do - it 'reads and writes from cache individually' do - described_class.new(repositories).preload( - %i[exists? has_visible_content?] - ) + context 'when values are not cached' do + it 'reads and writes from cache individually' do + described_class.new(repositories).preload( + %i[exists? has_visible_content?] + ) - expect(Rails.cache).to receive(:read).exactly(4).times - expect(Rails.cache).to receive(:write).exactly(4).times + expect(cache).to receive(:read).exactly(4).times + expect(cache).to receive(:write).exactly(4).times - repositories.each(&:exists?) - repositories.each(&:has_visible_content?) + repositories.each(&:exists?) + repositories.each(&:has_visible_content?) + end end end end + + context 'when use_primary_and_secondary_stores_for_repository_cache feature flag is enabled' do + let(:cache) { Gitlab::RepositoryCache.store } + + before do + stub_feature_flags(use_primary_and_secondary_stores_for_repository_cache: true) + end + + it_behaves_like 'preload' + end + + context 'when use_primary_and_secondary_stores_for_repository_cache feature flag is disabled' do + let(:cache) { Rails.cache } + + before do + stub_feature_flags(use_primary_and_secondary_stores_for_repository_cache: false) + end + + it_behaves_like 'preload' + end end |