diff options
Diffstat (limited to 'spec/lib/gitlab/metrics/background_transaction_spec.rb')
-rw-r--r-- | spec/lib/gitlab/metrics/background_transaction_spec.rb | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/spec/lib/gitlab/metrics/background_transaction_spec.rb b/spec/lib/gitlab/metrics/background_transaction_spec.rb index b31a2f7549a..d36ee24fc50 100644 --- a/spec/lib/gitlab/metrics/background_transaction_spec.rb +++ b/spec/lib/gitlab/metrics/background_transaction_spec.rb @@ -29,19 +29,62 @@ RSpec.describe Gitlab::Metrics::BackgroundTransaction do end describe '#labels' do - it 'provides labels with endpoint_id and feature_category' do - Labkit::Context.with_context(feature_category: 'projects', caller_id: 'TestWorker') do - expect(transaction.labels).to eq({ endpoint_id: 'TestWorker', feature_category: 'projects' }) + context 'when the worker queue is accessible' do + before do + test_worker_class = Class.new do + def self.queue + 'test_worker' + end + end + stub_const('TestWorker', test_worker_class) + end + + it 'provides labels with endpoint_id, feature_category and queue' do + Gitlab::ApplicationContext.with_raw_context(feature_category: 'projects', caller_id: 'TestWorker') do + expect(transaction.labels).to eq({ endpoint_id: 'TestWorker', feature_category: 'projects', queue: 'test_worker' }) + end + end + end + + context 'when the worker name does not exist' do + it 'provides labels with endpoint_id and feature_category' do + # 123TestWorker is an invalid constant + Gitlab::ApplicationContext.with_raw_context(feature_category: 'projects', caller_id: '123TestWorker') do + expect(transaction.labels).to eq({ endpoint_id: '123TestWorker', feature_category: 'projects', queue: nil }) + end + end + end + + context 'when the worker queue is not accessible' do + before do + stub_const('TestWorker', Class.new) + end + + it 'provides labels with endpoint_id and feature_category' do + Gitlab::ApplicationContext.with_raw_context(feature_category: 'projects', caller_id: 'TestWorker') do + expect(transaction.labels).to eq({ endpoint_id: 'TestWorker', feature_category: 'projects', queue: nil }) + end end end end RSpec.shared_examples 'metric with labels' do |metric_method| + before do + test_worker_class = Class.new do + def self.queue + 'test_worker' + end + end + stub_const('TestWorker', test_worker_class) + end + it 'measures with correct labels and value' do value = 1 - expect(prometheus_metric).to receive(metric_method).with({ endpoint_id: 'TestWorker', feature_category: 'projects' }, value) + expect(prometheus_metric).to receive(metric_method).with({ + endpoint_id: 'TestWorker', feature_category: 'projects', queue: 'test_worker' + }, value) - Labkit::Context.with_context(feature_category: 'projects', caller_id: 'TestWorker') do + Gitlab::ApplicationContext.with_raw_context(feature_category: 'projects', caller_id: 'TestWorker') do transaction.send(metric_method, :test_metric, value) end end |