diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-20 23:50:22 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-20 23:50:22 +0000 |
commit | 9dc93a4519d9d5d7be48ff274127136236a3adb3 (patch) | |
tree | 70467ae3692a0e35e5ea56bcb803eb512a10bedb /spec/lib/gitlab/sidekiq_config | |
parent | 4b0f34b6d759d6299322b3a54453e930c6121ff0 (diff) | |
download | gitlab-ce-9dc93a4519d9d5d7be48ff274127136236a3adb3.tar.gz |
Add latest changes from gitlab-org/gitlab@13-11-stable-eev13.11.0-rc43
Diffstat (limited to 'spec/lib/gitlab/sidekiq_config')
-rw-r--r-- | spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb | 84 | ||||
-rw-r--r-- | spec/lib/gitlab/sidekiq_config/worker_matcher_spec.rb | 129 |
2 files changed, 138 insertions, 75 deletions
diff --git a/spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb b/spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb index 01e7c06249a..bc63289a344 100644 --- a/spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb +++ b/spec/lib/gitlab/sidekiq_config/cli_methods_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'fast_spec_helper' -require 'rspec-parameterized' RSpec.describe Gitlab::SidekiqConfig::CliMethods do let(:dummy_root) { '/tmp/' } @@ -122,10 +121,8 @@ RSpec.describe Gitlab::SidekiqConfig::CliMethods do end end - describe '.query_workers' do - using RSpec::Parameterized::TableSyntax - - let(:queues) do + describe '.query_queues' do + let(:worker_metadatas) do [ { name: 'a', @@ -162,79 +159,16 @@ RSpec.describe Gitlab::SidekiqConfig::CliMethods do ] end - context 'with valid input' do - where(:query, :selected_queues) do - # feature_category - 'feature_category=category_a' | %w(a a:2) - 'feature_category=category_a,category_c' | %w(a a:2 c) - 'feature_category=category_a|feature_category=category_c' | %w(a a:2 c) - 'feature_category!=category_a' | %w(b c) - - # has_external_dependencies - 'has_external_dependencies=true' | %w(b) - 'has_external_dependencies=false' | %w(a a:2 c) - 'has_external_dependencies=true,false' | %w(a a:2 b c) - 'has_external_dependencies=true|has_external_dependencies=false' | %w(a a:2 b c) - 'has_external_dependencies!=true' | %w(a a:2 c) - - # urgency - 'urgency=high' | %w(a:2 b) - 'urgency=low' | %w(a) - 'urgency=high,low,throttled' | %w(a a:2 b c) - 'urgency=low|urgency=throttled' | %w(a c) - 'urgency!=high' | %w(a c) - - # name - 'name=a' | %w(a) - 'name=a,b' | %w(a b) - 'name=a,a:2|name=b' | %w(a a:2 b) - 'name!=a,a:2' | %w(b c) - - # resource_boundary - 'resource_boundary=memory' | %w(b c) - 'resource_boundary=memory,cpu' | %w(a b c) - 'resource_boundary=memory|resource_boundary=cpu' | %w(a b c) - 'resource_boundary!=memory,cpu' | %w(a:2) - - # tags - 'tags=no_disk_io' | %w(a b) - 'tags=no_disk_io,git_access' | %w(a a:2 b) - 'tags=no_disk_io|tags=git_access' | %w(a a:2 b) - 'tags=no_disk_io&tags=git_access' | %w(a) - 'tags!=no_disk_io' | %w(a:2 c) - 'tags!=no_disk_io,git_access' | %w(c) - 'tags=unknown_tag' | [] - 'tags!=no_disk_io' | %w(a:2 c) - 'tags!=no_disk_io,git_access' | %w(c) - 'tags!=unknown_tag' | %w(a a:2 b c) - - # combinations - 'feature_category=category_a&urgency=high' | %w(a:2) - 'feature_category=category_a&urgency=high|feature_category=category_c' | %w(a:2 c) - end + let(:worker_matcher) { double(:WorkerMatcher) } + let(:query) { 'feature_category=category_a,category_c' } - with_them do - it do - expect(described_class.query_workers(query, queues)) - .to match_array(selected_queues) - end - end + before do + allow(::Gitlab::SidekiqConfig::WorkerMatcher).to receive(:new).with(query).and_return(worker_matcher) + allow(worker_matcher).to receive(:match?).and_return(true, true, false, true) end - context 'with invalid input' do - where(:query, :error) do - 'feature_category="category_a"' | described_class::InvalidTerm - 'feature_category=' | described_class::InvalidTerm - 'feature_category~category_a' | described_class::InvalidTerm - 'worker_name=a' | described_class::UnknownPredicate - end - - with_them do - it do - expect { described_class.query_workers(query, queues) } - .to raise_error(error) - end - end + it 'returns the queue names of matched workers' do + expect(described_class.query_queues(query, worker_metadatas)).to match(%w(a a:2 c)) end end end diff --git a/spec/lib/gitlab/sidekiq_config/worker_matcher_spec.rb b/spec/lib/gitlab/sidekiq_config/worker_matcher_spec.rb new file mode 100644 index 00000000000..75e9c8c100b --- /dev/null +++ b/spec/lib/gitlab/sidekiq_config/worker_matcher_spec.rb @@ -0,0 +1,129 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require 'rspec-parameterized' + +RSpec.describe Gitlab::SidekiqConfig::WorkerMatcher do + describe '#match?' do + using RSpec::Parameterized::TableSyntax + + let(:worker_metadatas) do + [ + { + name: 'a', + feature_category: :category_a, + has_external_dependencies: false, + urgency: :low, + resource_boundary: :cpu, + tags: [:no_disk_io, :git_access] + }, + { + name: 'a:2', + feature_category: :category_a, + has_external_dependencies: false, + urgency: :high, + resource_boundary: :none, + tags: [:git_access] + }, + { + name: 'b', + feature_category: :category_b, + has_external_dependencies: true, + urgency: :high, + resource_boundary: :memory, + tags: [:no_disk_io] + }, + { + name: 'c', + feature_category: :category_c, + has_external_dependencies: false, + urgency: :throttled, + resource_boundary: :memory, + tags: [] + } + ] + end + + context 'with valid input' do + where(:query, :expected_metadatas) do + # feature_category + 'feature_category=category_a' | %w(a a:2) + 'feature_category=category_a,category_c' | %w(a a:2 c) + 'feature_category=category_a|feature_category=category_c' | %w(a a:2 c) + 'feature_category!=category_a' | %w(b c) + + # has_external_dependencies + 'has_external_dependencies=true' | %w(b) + 'has_external_dependencies=false' | %w(a a:2 c) + 'has_external_dependencies=true,false' | %w(a a:2 b c) + 'has_external_dependencies=true|has_external_dependencies=false' | %w(a a:2 b c) + 'has_external_dependencies!=true' | %w(a a:2 c) + + # urgency + 'urgency=high' | %w(a:2 b) + 'urgency=low' | %w(a) + 'urgency=high,low,throttled' | %w(a a:2 b c) + 'urgency=low|urgency=throttled' | %w(a c) + 'urgency!=high' | %w(a c) + + # name + 'name=a' | %w(a) + 'name=a,b' | %w(a b) + 'name=a,a:2|name=b' | %w(a a:2 b) + 'name!=a,a:2' | %w(b c) + + # resource_boundary + 'resource_boundary=memory' | %w(b c) + 'resource_boundary=memory,cpu' | %w(a b c) + 'resource_boundary=memory|resource_boundary=cpu' | %w(a b c) + 'resource_boundary!=memory,cpu' | %w(a:2) + + # tags + 'tags=no_disk_io' | %w(a b) + 'tags=no_disk_io,git_access' | %w(a a:2 b) + 'tags=no_disk_io|tags=git_access' | %w(a a:2 b) + 'tags=no_disk_io&tags=git_access' | %w(a) + 'tags!=no_disk_io' | %w(a:2 c) + 'tags!=no_disk_io,git_access' | %w(c) + 'tags=unknown_tag' | [] + 'tags!=no_disk_io' | %w(a:2 c) + 'tags!=no_disk_io,git_access' | %w(c) + 'tags!=unknown_tag' | %w(a a:2 b c) + + # combinations + 'feature_category=category_a&urgency=high' | %w(a:2) + 'feature_category=category_a&urgency=high|feature_category=category_c' | %w(a:2 c) + + # Match all + '*' | %w(a a:2 b c) + end + + with_them do + it do + matched_metadatas = worker_metadatas.select do |metadata| + described_class.new(query).match?(metadata) + end + expect(matched_metadatas.map { |m| m[:name] }).to match_array(expected_metadatas) + end + end + end + + context 'with invalid input' do + where(:query, :error) do + 'feature_category="category_a"' | described_class::InvalidTerm + 'feature_category=' | described_class::InvalidTerm + 'feature_category~category_a' | described_class::InvalidTerm + 'worker_name=a' | described_class::UnknownPredicate + end + + with_them do + it do + worker_metadatas.each do |metadata| + expect { described_class.new(query).match?(metadata) } + .to raise_error(error) + end + end + end + end + end +end |