From eaaad702deab2ff73cc204d55056745bf34c703e Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Mon, 5 Jun 2017 13:33:11 +0200 Subject: [PATCH] Additional metrics test using multiple groups --- .../queries/additional_metrics_query_spec.rb | 98 ++++++++++++++++--- .../additional_metrics_query_helper.rb | 20 ---- spec/support/prometheus/metric_builders.rb | 27 +++++ 3 files changed, 112 insertions(+), 33 deletions(-) create mode 100644 spec/support/prometheus/metric_builders.rb diff --git a/spec/lib/gitlab/prometheus/queries/additional_metrics_query_spec.rb b/spec/lib/gitlab/prometheus/queries/additional_metrics_query_spec.rb index c7e2dbc12ec..617028cde37 100644 --- a/spec/lib/gitlab/prometheus/queries/additional_metrics_query_spec.rb +++ b/spec/lib/gitlab/prometheus/queries/additional_metrics_query_spec.rb @@ -2,6 +2,7 @@ require 'spec_helper' describe Gitlab::Prometheus::Queries::AdditionalMetricsQuery, lib: true do include Prometheus::AdditionalMetricsQueryHelper + include Prometheus::MetricBuilders let(:metric_group_class) { Gitlab::Prometheus::MetricGroup } let(:metric_class) { Gitlab::Prometheus::Metric } @@ -11,6 +12,9 @@ describe Gitlab::Prometheus::Queries::AdditionalMetricsQuery, lib: true do subject(:query_result) { described_class.new(client).query(environment.id) } + around do |example| + Timecop.freeze { example.run } + end context 'with one group where two metrics is found' do before do @@ -18,7 +22,7 @@ describe Gitlab::Prometheus::Queries::AdditionalMetricsQuery, lib: true do allow(client).to receive(:label_values).and_return(metric_names) end - context 'some querie return results' do + context 'some queries return results' do before do expect(client).to receive(:query_range).with('query_range_a', any_args).and_return(query_range_result) expect(client).to receive(:query_range).with('query_range_b', any_args).and_return(query_range_result) @@ -26,23 +30,91 @@ describe Gitlab::Prometheus::Queries::AdditionalMetricsQuery, lib: true do end it 'return results only for queries with results' do - puts query_result - expected = { - group: 'name', - priority: 1, - metrics: - [ + expected = [ + { + group: 'name', + priority: 1, + metrics: [ { - title: 'title', weight: nil, y_label: 'Values', queries: - [ - { query_range: 'query_range_a', result: query_range_result }, - { query_range: 'query_range_b', label: 'label', unit: 'unit', result: query_range_result } + title: 'title', weight: nil, y_label: 'Values', queries: [ + { query_range: 'query_range_a', result: query_range_result }, + { query_range: 'query_range_b', label: 'label', unit: 'unit', result: query_range_result } + ] + } + ] + } + ] + + expect(query_result).to eq(expected) + end + end + end + + context 'with two groups with one metric each' do + let(:metrics) { [simple_metric(queries: [simple_query])] } + before do + allow(metric_group_class).to receive(:all).and_return( + [ + simple_metric_group('group_a', [simple_metric(queries: [simple_query])]), + simple_metric_group('group_b', [simple_metric(title: 'title_b', queries: [simple_query('b')])]) + ]) + allow(client).to receive(:label_values).and_return(metric_names) + end + + context 'some queries return results' do + before do + expect(client).to receive(:query_range).with('query_range_a', any_args).and_return(query_range_result) + expect(client).to receive(:query_range).with('query_range_b', any_args).and_return(query_range_result) + end + + it 'return results only for queries with results' do + puts query_result + expected = [ + { + group: 'group_a', + priority: 1, + metrics: [ + { + title: 'title', + weight: nil, + y_label: 'Values', + queries: [ + { + query_range: 'query_range_a', + result: [ + { + metric: {}, + values: [[1488758662.506, '0.00002996364761904785'], [1488758722.506, '0.00003090239047619091']] } + ] + } ] } ] - } + }, + { + group: 'group_b', + priority: 1, + metrics: [ + { + title: 'title_b', + weight: nil, + y_label: 'Values', + queries: [ + { + query_range: 'query_range_b', result: [ + { + metric: {}, + values: [[1488758662.506, '0.00002996364761904785'], [1488758722.506, '0.00003090239047619091']] + } + ] + } + ] + } + ] + } + ] - expect(query_result).to eq([expected]) + expect(query_result).to eq(expected) end end end diff --git a/spec/support/prometheus/additional_metrics_query_helper.rb b/spec/support/prometheus/additional_metrics_query_helper.rb index d80beb066ff..84cbc24a301 100644 --- a/spec/support/prometheus/additional_metrics_query_helper.rb +++ b/spec/support/prometheus/additional_metrics_query_helper.rb @@ -4,26 +4,6 @@ module Prometheus %w{metric_a metric_b} end - def simple_queries - [{ query_range: 'query_range_a' }, { query_range: 'query_range_b', label: 'label', unit: 'unit' }] - end - - def simple_query(suffix = 'a') - [{ query_range: "query_range_#{suffix}" }] - end - - def simple_metrics - [ - Gitlab::Prometheus::Metric.new('title', %w(metric_a metric_b), nil, nil, simple_queries), - Gitlab::Prometheus::Metric.new('title', %w{metric_a}, nil, nil, simple_query('empty')), - Gitlab::Prometheus::Metric.new('title', %w{metric_c}, nil, nil) - ] - end - - def simple_metric_group(name = 'name', metrics = simple_metrics) - Gitlab::Prometheus::MetricGroup.new(name, 1, metrics) - end - def query_result [ { diff --git a/spec/support/prometheus/metric_builders.rb b/spec/support/prometheus/metric_builders.rb new file mode 100644 index 00000000000..2d54ecdfb5c --- /dev/null +++ b/spec/support/prometheus/metric_builders.rb @@ -0,0 +1,27 @@ +module Prometheus + module MetricBuilders + def simple_query(suffix = 'a', **opts) + { query_range: "query_range_#{suffix}" }.merge(opts) + end + + def simple_queries + [simple_query, simple_query('b', label: 'label', unit: 'unit')] + end + + def simple_metric(title: 'title', required_metrics: [], queries: []) + Gitlab::Prometheus::Metric.new(title, required_metrics, nil, nil, queries) + end + + def simple_metrics + [ + simple_metric(required_metrics: %w(metric_a metric_b), queries: simple_queries), + simple_metric(required_metrics: %w{metric_a}, queries: [simple_query('empty')]), + simple_metric(required_metrics: %w{metric_c}) + ] + end + + def simple_metric_group(name = 'name', metrics = simple_metrics) + Gitlab::Prometheus::MetricGroup.new(name, 1, metrics) + end + end +end \ No newline at end of file