diff options
author | Pawel Chojnacki <pawel@chojnacki.ws> | 2017-07-31 15:26:38 +0200 |
---|---|---|
committer | Pawel Chojnacki <pawel@chojnacki.ws> | 2017-07-31 16:32:26 +0200 |
commit | 48778ac58973fa7cab09deaaf2e93806aa37113d (patch) | |
tree | f14faa11c0c6b7e7a5201e398cc1a2411031f6c0 | |
parent | 6df5bd8b848322aa3e2ce5fd8cad0e2a20b06000 (diff) | |
download | gitlab-ce-48778ac58973fa7cab09deaaf2e93806aa37113d.tar.gz |
Tests for query context variables
3 files changed, 34 insertions, 18 deletions
diff --git a/app/models/project_services/prometheus_service.rb b/app/models/project_services/prometheus_service.rb index 73cf4e97b56..217f753f05f 100644 --- a/app/models/project_services/prometheus_service.rb +++ b/app/models/project_services/prometheus_service.rb @@ -75,11 +75,6 @@ class PrometheusService < MonitoringService with_reactive_cache(Gitlab::Prometheus::Queries::MatchedMetricsQuery.name, &:itself) end - def with_reactive_cache(name, *args, &block) - vals = args.map(&:to_s) - yield calculate_reactive_cache(name, *vals) - end - # Cache metrics for specific environment def calculate_reactive_cache(query_class_name, *args) return unless active? && project && !project.pending_delete? diff --git a/spec/lib/gitlab/prometheus/queries/additional_metrics_environment_query_spec.rb b/spec/lib/gitlab/prometheus/queries/additional_metrics_environment_query_spec.rb index a02d2a90b97..5a88b23aa82 100644 --- a/spec/lib/gitlab/prometheus/queries/additional_metrics_environment_query_spec.rb +++ b/spec/lib/gitlab/prometheus/queries/additional_metrics_environment_query_spec.rb @@ -6,11 +6,11 @@ describe Gitlab::Prometheus::Queries::AdditionalMetricsEnvironmentQuery do end include_examples 'additional metrics query' do - let(:query_result) { described_class.new(client).query(environment.id) } let(:query_params) { [environment.id] } it 'queries using specific time' do expect(client).to receive(:query_range).with(anything, start: 8.hours.ago.to_f, stop: Time.now.to_f) + expect(query_result).not_to be_nil end end diff --git a/spec/support/prometheus/additional_metrics_shared_examples.rb b/spec/support/prometheus/additional_metrics_shared_examples.rb index fcb5c315b98..174297af158 100644 --- a/spec/support/prometheus/additional_metrics_shared_examples.rb +++ b/spec/support/prometheus/additional_metrics_shared_examples.rb @@ -11,6 +11,7 @@ RSpec.shared_examples 'additional metrics query' do end let(:client) { double('prometheus_client') } + let(:query_result) { described_class.new(client).query(*query_params) } let(:environment) { create(:environment, slug: 'environment-slug') } before do @@ -18,31 +19,52 @@ RSpec.shared_examples 'additional metrics query' do allow(metric_group_class).to receive(:all).and_return([simple_metric_group(metrics: [simple_metric])]) end - context 'metrics rendering' do + context 'metrics query context' do subject! { described_class.new(client) } - before do + shared_examples 'query context containing environment slug and filter' do + it 'query context contains ci_environment_slug' do + expect(subject).to receive(:query_metrics).with(hash_including(ci_environment_slug: environment.slug)) + + subject.query(*query_params) + end + it 'query context contains environment filter' do + expect(subject).to receive(:query_metrics).with( + hash_including( + environment_filter: "container_name!=\"POD\",environment=\"#{environment.slug}\"" + ) + ) + subject.query(*query_params) + end end - describe 'project has kubernetes service' do + describe 'project has Kubernetes service' do let(:project) { create(:kubernetes_project) } - let(:environment) { create(:environment, slug: 'environment-slug', project: project) } + let(:environment) { create(:environment, slug: 'environment-slug', project: project) } let(:kube_namespace) { project.kubernetes_service.actual_namespace } - it 'query context contains kube namespace' do - expect(subject).to receive(:query_metrics).with( - hash_including( - kube_namespace: kube_namespace) - ) + it_behaves_like 'query context containing environment slug and filter' + + it 'query context contains kube_namespace' do + expect(subject).to receive(:query_metrics).with(hash_including(kube_namespace: kube_namespace)) + + subject.query(*query_params) + end + end + + describe 'project without Kubernetes service' do + it_behaves_like 'query context containing environment slug and filter' + + it 'query context contains empty kube_namespace' do + expect(subject).to receive(:query_metrics).with(hash_including(kube_namespace: '')) + subject.query(*query_params) end end end context 'with one group where two metrics is found' do - let(:query_result) { described_class.new(client).query(*query_params) } - before do allow(metric_group_class).to receive(:all).and_return([simple_metric_group]) end @@ -77,7 +99,6 @@ RSpec.shared_examples 'additional metrics query' do end context 'with two groups with one metric each' do - let(:query_result) { described_class.new(client).query(*query_params) } let(:metrics) { [simple_metric(queries: [simple_query])] } before do |