75 lines
2.2 KiB
Ruby
75 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::SidekiqLimits, feature_category: :scalability do
|
|
let(:worker_name) { 'Chaos::SleepWorker' }
|
|
|
|
describe '.limits_for' do
|
|
context 'when the worker name cannot be constantized' do
|
|
let(:worker_name) { 'invalidworker' }
|
|
|
|
it 'returns empty array' do
|
|
expect(described_class.limits_for(worker_name)).to eq([])
|
|
end
|
|
end
|
|
|
|
context 'when the worker does not extend ApplicationWorker' do
|
|
let(:worker_name) { 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper' }
|
|
|
|
it 'returns empty array' do
|
|
expect(described_class.limits_for(worker_name)).to eq([])
|
|
end
|
|
end
|
|
|
|
context 'when the worker matches a rule selector' do
|
|
let(:worker_name) { 'PipelineProcessWorker' }
|
|
|
|
it 'returns limits' do
|
|
limits = described_class.limits_for(worker_name)
|
|
expect(limits.map(&:name)).to include(:main_db_duration_limit_per_worker, :ci_db_duration_limit_per_worker)
|
|
expect(limits.map(&:threshold).uniq).to eq([3000])
|
|
end
|
|
end
|
|
|
|
context 'when the worker is a generic worker' do
|
|
it 'returns catchall limits' do
|
|
limits = described_class.limits_for(worker_name)
|
|
expect(limits.map(&:name)).to include(:main_db_duration_limit_per_worker, :ci_db_duration_limit_per_worker)
|
|
expect(limits.map(&:threshold).uniq).to eq([1000])
|
|
end
|
|
end
|
|
|
|
context 'when the worker does not match any selectors' do
|
|
let(:rule) do
|
|
{
|
|
main_db_duration_limit_per_worker: {
|
|
resource_key: 'db_main_duration_s',
|
|
metadata: {
|
|
db_config_name: 'main'
|
|
},
|
|
scopes: [
|
|
'worker_name'
|
|
],
|
|
rules: [
|
|
{
|
|
selector: Gitlab::SidekiqConfig::WorkerMatcher.new("worker_name=TestWorker"),
|
|
threshold: 3000,
|
|
interval: 60
|
|
}
|
|
]
|
|
}
|
|
}
|
|
end
|
|
|
|
before do
|
|
stub_const("#{described_class}::DEFAULT_SIDEKIQ_LIMITS", rule)
|
|
end
|
|
|
|
it 'returns no limits' do
|
|
expect(described_class.limits_for(worker_name)).to be_empty
|
|
end
|
|
end
|
|
end
|
|
end
|