From 9f46488805e86b1bc341ea1620b866016c2ce5ed Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 20 May 2020 14:34:42 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-0-stable-ee --- spec/lib/gitlab/metrics/transaction_spec.rb | 165 ++-------------------------- 1 file changed, 12 insertions(+), 153 deletions(-) (limited to 'spec/lib/gitlab/metrics/transaction_spec.rb') diff --git a/spec/lib/gitlab/metrics/transaction_spec.rb b/spec/lib/gitlab/metrics/transaction_spec.rb index 08de2426c5a..cf46fa3e91c 100644 --- a/spec/lib/gitlab/metrics/transaction_spec.rb +++ b/spec/lib/gitlab/metrics/transaction_spec.rb @@ -4,7 +4,6 @@ require 'spec_helper' describe Gitlab::Metrics::Transaction do let(:transaction) { described_class.new } - let(:metric) { transaction.metrics[0] } let(:sensitive_tags) do { @@ -13,12 +12,6 @@ describe Gitlab::Metrics::Transaction do } end - shared_examples 'tag filter' do |sane_tags| - it 'filters potentially sensitive tags' do - expect(metric.tags).to eq(sane_tags) - end - end - describe '#duration' do it 'returns the duration of a transaction in seconds' do transaction.run { } @@ -61,25 +54,6 @@ describe Gitlab::Metrics::Transaction do end end - describe '#add_metric' do - it 'adds a metric to the transaction' do - transaction.add_metric('foo', value: 1) - - expect(metric.series).to eq('rails_foo') - expect(metric.tags).to eq({}) - expect(metric.values).to eq(value: 1) - end - - context 'with sensitive tags' do - before do - transaction - .add_metric('foo', { value: 1 }, **sensitive_tags.merge(sane: 'yes')) - end - - it_behaves_like 'tag filter', sane: 'yes' - end - end - describe '#method_call_for' do it 'returns a MethodCall' do method = transaction.method_call_for('Foo#bar', :Foo, '#bar') @@ -88,133 +62,23 @@ describe Gitlab::Metrics::Transaction do end end - describe '#increment' do - it 'increments a counter' do - transaction.increment(:time, 1) - transaction.increment(:time, 2) - - values = metric_values(time: 3) - - expect(transaction).to receive(:add_metric) - .with('transactions', values, {}) - - transaction.track_self - end - end - - describe '#set' do - it 'sets a value' do - transaction.set(:number, 10) - - values = metric_values(number: 10) - - expect(transaction).to receive(:add_metric) - .with('transactions', values, {}) - - transaction.track_self - end - end - - describe '#finish' do - it 'tracks the transaction details and submits them to Sidekiq' do - expect(transaction).to receive(:track_self) - expect(transaction).to receive(:submit) - - transaction.finish - end - end - - describe '#track_self' do - it 'adds a metric for the transaction itself' do - values = metric_values - - expect(transaction).to receive(:add_metric) - .with('transactions', values, {}) - - transaction.track_self - end - end - - describe '#submit' do - it 'submits the metrics to Sidekiq' do - transaction.track_self - - expect(Gitlab::Metrics).to receive(:submit_metrics) - .with([an_instance_of(Hash)]) - - transaction.submit - end - - it 'adds the action as a tag for every metric' do - allow(transaction) - .to receive(:labels) - .and_return(controller: 'Foo', action: 'bar') - - transaction.track_self - - hash = { - series: 'rails_transactions', - tags: { action: 'Foo#bar' }, - values: metric_values, - timestamp: a_kind_of(Integer) - } - - expect(Gitlab::Metrics).to receive(:submit_metrics) - .with([hash]) - - transaction.submit - end - - it 'does not add an action tag for events' do - allow(transaction) - .to receive(:labels) - .and_return(controller: 'Foo', action: 'bar') - - transaction.add_event(:meow) - - hash = { - series: 'events', - tags: { event: :meow }, - values: { count: 1 }, - timestamp: a_kind_of(Integer) - } - - expect(Gitlab::Metrics).to receive(:submit_metrics) - .with([hash]) - - transaction.submit - end - end - describe '#add_event' do - it 'adds a metric' do - transaction.add_event(:meow) + let(:prometheus_metric) { instance_double(Prometheus::Client::Counter, increment: nil) } - expect(metric).to be_an_instance_of(Gitlab::Metrics::Metric) + before do + allow(described_class).to receive(:transaction_metric).and_return(prometheus_metric) end - it "does not prefix the metric's series name" do - transaction.add_event(:meow) - - expect(metric.series).to eq(described_class::EVENT_SERIES) - end - - it 'tracks a counter for every event' do - transaction.add_event(:meow) - - expect(metric.values).to eq(count: 1) - end + it 'adds a metric' do + expect(prometheus_metric).to receive(:increment) - it 'tracks the event name' do transaction.add_event(:meow) - - expect(metric.tags).to eq(event: :meow) end it 'allows tracking of custom tags' do - transaction.add_event(:bau, animal: 'dog') + expect(prometheus_metric).to receive(:increment).with(hash_including(animal: "dog")) - expect(metric.tags).to eq(event: :bau, animal: 'dog') + transaction.add_event(:bau, animal: 'dog') end context 'with sensitive tags' do @@ -222,16 +86,11 @@ describe Gitlab::Metrics::Transaction do transaction.add_event(:baubau, **sensitive_tags.merge(sane: 'yes')) end - it_behaves_like 'tag filter', event: :baubau, sane: 'yes' - end - end - - private + it 'filters tags' do + expect(prometheus_metric).not_to receive(:increment).with(hash_including(sensitive_tags)) - def metric_values(opts = {}) - { - duration: 0.0, - allocated_memory: a_kind_of(Numeric) - }.merge(opts) + transaction.add_event(:baubau, **sensitive_tags.merge(sane: 'yes')) + end + end end end -- cgit v1.2.1