From 57de968a92f84a15736bbe37a5804fee7c47778c Mon Sep 17 00:00:00 2001 From: Pawel Chojnacki Date: Fri, 23 Feb 2018 21:33:33 +0100 Subject: Squashed commit of the following: commit 22e1cb8f4b98f71d21026f69aa3e68d79946d6ae Merge: 766a42a9639 e966c6aea25 Author: Pawel Chojnacki Date: Fri Feb 23 21:30:46 2018 +0100 Merge remote-tracking branch 'upstream/master' into 38783-add-cluster-metrics.yml # Conflicts: # app/controllers/projects/prometheus/metrics_controller.rb # app/controllers/projects/prometheus_controller.rb # app/models/project_services/prometheus_service.rb # lib/gitlab/prometheus/queries/query_additional_metrics.rb # spec/controllers/projects/prometheus/metrics_controller_spec.rb # spec/models/project_services/prometheus_service_spec.rb commit 766a42a96393f502d439c1f0beb0b6cfb2c228d4 Author: Pawel Chojnacki Date: Fri Feb 23 17:58:45 2018 +0100 Move prometheus adapter to app/models/concerns commit ca84eed49811cf3064a2e5ea611af1c947c590d7 Merge: 66702099586 cb504cedc2a Author: Pawel Chojnacki Date: Fri Feb 23 15:36:03 2018 +0100 Merge remote-tracking branch 'upstream/backport_custom_metrics_ce_components' into 38783-add-cluster-metrics.yml + fix failing tests # Conflicts: # app/controllers/projects/prometheus_controller.rb # app/models/project_services/prometheus_service.rb # lib/gitlab/prometheus/queries/query_additional_metrics.rb # spec/models/project_services/prometheus_service_spec.rb commit cb504cedc2a6e353ffb56833334681e3da09fc14 Author: Pawel Chojnacki Date: Fri Feb 23 14:46:15 2018 +0100 Fix prometheus_service found by find_or_initialize_service commit 928b84c72c2c4c46e1785b9a943c1822a137de16 Author: Pawel Chojnacki Date: Thu Feb 22 23:15:11 2018 +0100 additional metrics and backported tests commit 41291383b4b6976af94eaf9e1a7b2e2a172310e7 Author: Pawel Chojnacki Date: Thu Feb 22 21:57:45 2018 +0100 Introduce Metrics controller and retire prometheus controller commit 6e7492e4c7ffa9d8621f09198071bc14be875976 Author: Pawel Chojnacki Date: Thu Feb 22 21:46:37 2018 +0100 Backport PrometheusClient::Error and all->common_metrics rename commit 66702099586c864a7f78970a0ee0dd9f3c2beeef Author: Pawel Chojnacki Date: Thu Feb 22 20:23:03 2018 +0100 fix failing tests commit ce921ea723cde61b2441ba98c9aca97606c719c8 Author: Mike Greiling Date: Wed Feb 21 23:47:30 2018 -0600 add labels to cluster metrics commit 993830c6892e4fbf53d3f72da00002d642c7e9b2 Author: Pawel Chojnacki Date: Thu Feb 22 01:20:49 2018 +0100 Fix formatting probelms and few small tests commit 66ee65d8e3f747c90d986bc3056178422156bc8e Author: Pawel Chojnacki Date: Thu Feb 22 01:08:03 2018 +0100 stop using in deployment tests environment.id commit 62c91978d15f0369988521363dae24bd7510d68d Author: Pawel Chojnacki Date: Thu Feb 22 01:06:33 2018 +0100 fix prometheus_controller and adapter tests commit 977b1d34c1d03c7233582e8328f85caf634895ed Author: Pawel Chojnacki Date: Thu Feb 22 00:19:39 2018 +0100 finish up active? -> can_query? rename commit e614f7daee58a9758d83ba3efe1649c8b80bc1e2 Author: Pawel Chojnacki Date: Wed Feb 21 23:51:33 2018 +0100 deployment prometheus adapter tests fix commit ebd726c114a6026fef0adf3eba6ee1972530148a Author: Pawel Chojnacki Date: Wed Feb 21 21:40:40 2018 +0100 Move environment dependant tests to environment commit 6d31311cd3729c29233283dded70e03a4a9a3c97 Author: Pawel Chojnacki Date: Wed Feb 21 20:40:24 2018 +0100 update monitoring service and move adding dpeloyment_time to deployment model commit 60b6bf391ab36846dce122bc6b0c5196a186267c Author: Pawel Chojnacki Date: Wed Feb 21 20:15:46 2018 +0100 adjust deployment spec and prometheus specs commit 6681662cf1c028aff2ff94aa0501732cb7119ba1 Author: Pawel Chojnacki Date: Tue Feb 20 22:30:20 2018 +0100 Revert changes to reactive caching commit e282f86c45a056889f57d3f7fd23a81c88efff6a Merge: 5751c73df59 6844a2df873 Author: Pawel Chojnacki Date: Tue Feb 20 22:08:17 2018 +0100 Merge remote-tracking branch 'upstream/master' into 38783-add-cluster-metrics.yml commit 5751c73df59d0a03840a1b4b71b0637670f971a6 Author: Pawel Chojnacki Date: Tue Feb 20 22:07:43 2018 +0100 rename active? to can_query? and cleanup environment prometheus router commit 3f3c6e1d33dcd9315979daf26a95f2aab83a7de9 Author: Pawel Chojnacki Date: Tue Feb 20 21:51:43 2018 +0100 Fix tests, and only use prometheus service if its active commit 6345838bac584c213b665d334252ccab202cb271 Author: Pawel Chojnacki Date: Tue Feb 20 16:24:27 2018 +0100 Fix typo commit 7a585d32afe8da050b5615b1d036a550e06479f5 Author: Pawel Chojnacki Date: Tue Feb 20 15:29:40 2018 +0100 Cluster id is not required commit e6af62afb11fa380f6aff1c31a81bcc9bab3b1eb Author: Pawel Chojnacki Date: Tue Feb 20 15:15:46 2018 +0100 Result transformation support commit f3b1bd7c67894f44efe33591ddb70093bd620c03 Author: Pawel Chojnacki Date: Tue Feb 20 15:07:07 2018 +0100 Fix rubocop warning and exten cluster query timeframe commit be77947cea64261a4d3dead33c3c57f413a9880c Author: Pawel Chojnacki Date: Tue Feb 20 14:42:47 2018 +0100 Fix additional metrics test commit eb3922e16221abe16f59fae1c38122f227643343 Author: Pawel Chojnacki Date: Tue Feb 20 14:34:44 2018 +0100 rename prometheus adapter methods commit 045476cd08b21593818b274ae8a44d19b705523f Author: Pawel Chojnacki Date: Tue Feb 20 13:19:36 2018 +0100 Make prometheus adapter a module commit f2daf050d8c689f72c4c61207930bc53c331f12e Author: Pawel Chojnacki Date: Tue Feb 20 12:00:44 2018 +0100 refactoring wip commit 52e4ef5587794e811dc10a0f2dca522342a865da Author: Pawel Chojnacki Date: Sun Feb 18 20:25:55 2018 +0100 cleanup prometheus adapter concept commit 3887365faab9dfcd9c00bcfc501d09ac62431a03 Author: Pawel Chojnacki Date: Sun Feb 18 19:22:11 2018 +0100 Refactor out deployment id, Rename PrometheusQuerier to PrometheusAdapter commit aa2fc2df57bd72c9a5e94f66d1f1e23990be6c3f Author: Pawel Chojnacki Date: Fri Feb 16 23:59:54 2018 +0100 Refactor prometheus client commit e43c1ca9d9874d6cf1569f40fa1aca158d9d5d91 Author: Pawel Chojnacki Date: Thu Feb 15 20:24:45 2018 +0100 Use initial version of cluster_metrics.yml commit 867821ce0b2609ebf8994220aa8e3a94d66a01e0 Author: Pawel Chojnacki Date: Thu Feb 15 05:24:14 2018 +0100 Fix querying cluster metrics commit 1601e002a064cbb10ffe110a19433c5662858f1d Author: Pawel Chojnacki Date: Thu Feb 15 04:49:03 2018 +0100 Queues for unicersal querier commit 5db198fdc925c0223be24939b76da1d544dd569c Author: Pawel Chojnacki Date: Thu Feb 15 03:35:17 2018 +0100 refactor reactive caching and prometheus querying commit b0fc00e8c9d21e961ef44b0129103e2a62928b52 Author: Pawel Chojnacki Date: Thu Feb 15 00:12:03 2018 +0100 Add generic query additional metrics commit ffe76e6a9ba196bccff22c4880e0384959ad5e48 Author: Pawel Chojnacki Date: Tue Feb 13 15:40:15 2018 +0100 Cluster Metric yml initial + Remove cluster query + remove cluster_metrics.yml + Prometheus adapter tests --- .../clusters/applications/prometheus_spec.rb | 12 +- spec/models/concerns/prometheus_adapter_spec.rb | 121 +++++++++++++ spec/models/deployment_spec.rb | 16 +- spec/models/environment_spec.rb | 118 ++++++++----- .../project_services/prometheus_service_spec.rb | 187 ++------------------- 5 files changed, 224 insertions(+), 230 deletions(-) create mode 100644 spec/models/concerns/prometheus_adapter_spec.rb (limited to 'spec/models') diff --git a/spec/models/clusters/applications/prometheus_spec.rb b/spec/models/clusters/applications/prometheus_spec.rb index 01037919530..959fb338672 100644 --- a/spec/models/clusters/applications/prometheus_spec.rb +++ b/spec/models/clusters/applications/prometheus_spec.rb @@ -32,11 +32,11 @@ describe Clusters::Applications::Prometheus do end end - describe '#proxy_client' do + describe '#prometheus_client' do context 'cluster is nil' do it 'returns nil' do expect(subject.cluster).to be_nil - expect(subject.proxy_client).to be_nil + expect(subject.prometheus_client).to be_nil end end @@ -45,7 +45,7 @@ describe Clusters::Applications::Prometheus do subject { create(:clusters_applications_prometheus, cluster: cluster) } it 'returns nil' do - expect(subject.proxy_client).to be_nil + expect(subject.prometheus_client).to be_nil end end @@ -73,15 +73,15 @@ describe Clusters::Applications::Prometheus do end it 'creates proxy prometheus rest client' do - expect(subject.proxy_client).to be_instance_of(RestClient::Resource) + expect(subject.prometheus_client).to be_instance_of(RestClient::Resource) end it 'creates proper url' do - expect(subject.proxy_client.url).to eq('http://example.com/api/v1/proxy/namespaces/gitlab-managed-apps/service/prometheus-prometheus-server:80') + expect(subject.prometheus_client.url).to eq('http://example.com/api/v1/proxy/namespaces/gitlab-managed-apps/service/prometheus-prometheus-server:80') end it 'copies options and headers from kube client to proxy client' do - expect(subject.proxy_client.options).to eq(kube_client.rest_client.options.merge(headers: kube_client.headers)) + expect(subject.prometheus_client.options).to eq(kube_client.rest_client.options.merge(headers: kube_client.headers)) end end end diff --git a/spec/models/concerns/prometheus_adapter_spec.rb b/spec/models/concerns/prometheus_adapter_spec.rb new file mode 100644 index 00000000000..f4b9c57e71a --- /dev/null +++ b/spec/models/concerns/prometheus_adapter_spec.rb @@ -0,0 +1,121 @@ +require 'spec_helper' + +describe PrometheusAdapter, :use_clean_rails_memory_store_caching do + include PrometheusHelpers + include ReactiveCachingHelpers + + class TestClass + include PrometheusAdapter + end + + let(:project) { create(:prometheus_project) } + let(:service) { project.prometheus_service } + + let(:described_class) { TestClass } + let(:environment_query) { Gitlab::Prometheus::Queries::EnvironmentQuery } + + describe '#query' do + describe 'environment' do + let(:environment) { build_stubbed(:environment, slug: 'env-slug') } + + around do |example| + Timecop.freeze { example.run } + end + + context 'with valid data' do + subject { service.query(:environment, environment) } + + before do + stub_reactive_cache(service, prometheus_data, environment_query, environment.id) + end + + it 'returns reactive data' do + is_expected.to eq(prometheus_metrics_data) + end + end + end + + describe 'matched_metrics' do + let(:matched_metrics_query) { Gitlab::Prometheus::Queries::MatchedMetricQuery } + let(:prometheus_client_wrapper) { double(:prometheus_client_wrapper, label_values: nil) } + + context 'with valid data' do + subject { service.query(:matched_metrics) } + + before do + allow(service).to receive(:prometheus_client_wrapper).and_return(prometheus_client_wrapper) + synchronous_reactive_cache(service) + end + + it 'returns reactive data' do + expect(subject[:success]).to be_truthy + expect(subject[:data]).to eq([]) + end + end + end + + describe 'deployment' do + let(:deployment) { build_stubbed(:deployment) } + let(:deployment_query) { Gitlab::Prometheus::Queries::DeploymentQuery } + + around do |example| + Timecop.freeze { example.run } + end + + context 'with valid data' do + subject { service.query(:deployment, deployment) } + + before do + stub_reactive_cache(service, prometheus_data, deployment_query, deployment.id) + end + + it 'returns reactive data' do + expect(subject).to eq(prometheus_metrics_data) + end + end + end + end + + describe '#calculate_reactive_cache' do + let(:environment) { create(:environment, slug: 'env-slug') } + before do + service.manual_configuration = true + service.active = true + end + + subject do + service.calculate_reactive_cache(environment_query.name, environment.id) + end + + around do |example| + Timecop.freeze { example.run } + end + + context 'when service is inactive' do + before do + service.active = false + end + + it { is_expected.to be_nil } + end + + context 'when Prometheus responds with valid data' do + before do + stub_all_prometheus_requests(environment.slug) + end + + it { expect(subject.to_json).to eq(prometheus_data.to_json) } + it { expect(subject.to_json).to eq(prometheus_data.to_json) } + end + + [404, 500].each do |status| + context "when Prometheus responds with #{status}" do + before do + stub_all_prometheus_requests(environment.slug, status: status, body: "QUERY FAILED!") + end + + it { is_expected.to eq(success: false, result: %(#{status} - "QUERY FAILED!")) } + end + end + end +end diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index ba8aa13d5ad..ac30cd27e0c 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -64,6 +64,7 @@ describe Deployment do describe '#metrics' do let(:deployment) { create(:deployment) } + let(:prometheus_adapter) { double('prometheus_adapter', can_query?: true) } subject { deployment.metrics } @@ -76,17 +77,16 @@ describe Deployment do { success: true, metrics: {}, - last_update: 42, - deployment_time: 1494408956 + last_update: 42 } end before do - allow(deployment.project).to receive_message_chain(:monitoring_service, :deployment_metrics) - .with(any_args).and_return(simple_metrics) + allow(deployment).to receive(:prometheus_adapter).and_return(prometheus_adapter) + allow(prometheus_adapter).to receive(:query).with(:deployment, deployment).and_return(simple_metrics) end - it { is_expected.to eq(simple_metrics) } + it { is_expected.to eq(simple_metrics.merge({ deployment_time: deployment.created_at.to_i })) } end end @@ -109,11 +109,11 @@ describe Deployment do } end - let(:prometheus_service) { double('prometheus_service') } + let(:prometheus_adapter) { double('prometheus_adapter', can_query?: true) } before do - allow(project).to receive(:prometheus_service).and_return(prometheus_service) - allow(prometheus_service).to receive(:additional_deployment_metrics).and_return(simple_metrics) + allow(deployment).to receive(:prometheus_adapter).and_return(prometheus_adapter) + allow(prometheus_adapter).to receive(:query).with(:additional_metrics_deployment, deployment).and_return(simple_metrics) end it { is_expected.to eq(simple_metrics.merge({ deployment_time: deployment.created_at.to_i })) } diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb index 6f24a039998..1049e47d25d 100644 --- a/spec/models/environment_spec.rb +++ b/spec/models/environment_spec.rb @@ -452,8 +452,8 @@ describe Environment do end it 'returns the metrics from the deployment service' do - expect(project.monitoring_service) - .to receive(:environment_metrics).with(environment) + expect(environment.prometheus_adapter) + .to receive(:query).with(:environment, environment) .and_return(:fake_metrics) is_expected.to eq(:fake_metrics) @@ -508,12 +508,12 @@ describe Environment do context 'when the environment has additional metrics' do before do - allow(environment).to receive(:has_additional_metrics?).and_return(true) + allow(environment).to receive(:has_metrics?).and_return(true) end it 'returns the additional metrics from the deployment service' do - expect(project.prometheus_service).to receive(:additional_environment_metrics) - .with(environment) + expect(environment.prometheus_adapter).to receive(:query) + .with(:additional_metrics_environment, environment) .and_return(:fake_metrics) is_expected.to eq(:fake_metrics) @@ -522,46 +522,13 @@ describe Environment do context 'when the environment does not have metrics' do before do - allow(environment).to receive(:has_additional_metrics?).and_return(false) + allow(environment).to receive(:has_metrics?).and_return(false) end it { is_expected.to be_nil } end end - describe '#has_additional_metrics??' do - subject { environment.has_additional_metrics? } - - context 'when the enviroment is available' do - context 'with a deployment service' do - let(:project) { create(:prometheus_project) } - - context 'and a deployment' do - let!(:deployment) { create(:deployment, environment: environment) } - it { is_expected.to be_truthy } - end - - context 'but no deployments' do - it { is_expected.to be_falsy } - end - end - - context 'without a monitoring service' do - it { is_expected.to be_falsy } - end - end - - context 'when the environment is unavailable' do - let(:project) { create(:prometheus_project) } - - before do - environment.stop - end - - it { is_expected.to be_falsy } - end - end - describe '#slug' do it "is automatically generated" do expect(environment.slug).not_to be_nil @@ -654,4 +621,77 @@ describe Environment do end end end + + describe '#prometheus_adapter' do + let!(:cluster_for_all) { create(:cluster, environment_scope: '*', projects: [project]) } + let!(:cluster_for_dev) { create(:cluster, environment_scope: 'dev', projects: [project]) } + + let!(:prometheus_for_dev) { create(:clusters_applications_prometheus, :installed, cluster: cluster_for_dev) } + + context 'prometheus service can execute queries' do + let(:prometheus_service) { double(:prometheus_service, can_query?: true) } + + before do + allow(environment.project).to receive(:find_or_initialize_service).with('prometheus').and_return prometheus_service + end + + it 'return prometheus service as prometheus adapter' do + expect(environment.prometheus_adapter).to eq(prometheus_service) + end + end + + context "prometheus service can't execute queries" do + let(:prometheus_service) { double(:prometheus_service, can_query?: false) } + + context 'with cluster for all environments with prometheus installed' do + let!(:prometheus_for_all) { create(:clusters_applications_prometheus, :installed, cluster: cluster_for_all) } + + context 'without environment supplied' do + it 'returns application handling all environments' do + expect(environment.prometheus_adapter).to eq(prometheus_for_all) + end + end + + context 'with dev environment supplied' do + let!(:environment) { create(:environment, project: project, name: 'dev') } + + it 'returns dev cluster prometheus application' do + expect(environment.prometheus_adapter).to eq(prometheus_for_dev) + end + end + + context 'with prod environment supplied' do + let!(:environment) { create(:environment, project: project, name: 'prod') } + + it 'returns application handling all environments' do + expect(environment.prometheus_adapter).to eq(prometheus_for_all) + end + end + end + + context 'with cluster for all environments without prometheus installed' do + context 'without environment supplied' do + it 'returns nil' do + expect(environment.prometheus_adapter).to be_nil + end + end + + context 'with dev environment supplied' do + let!(:environment) { create(:environment, project: project, name: 'dev') } + + it 'returns dev cluster prometheus application' do + expect(environment.prometheus_adapter).to eq(prometheus_for_dev) + end + end + + context 'with prod environment supplied' do + let!(:environment) { create(:environment, project: project, name: 'prod') } + + it 'returns nil' do + expect(environment.prometheus_adapter).to be_nil + end + end + end + end + end end diff --git a/spec/models/project_services/prometheus_service_spec.rb b/spec/models/project_services/prometheus_service_spec.rb index 6693e5783a5..6a4bdb47105 100644 --- a/spec/models/project_services/prometheus_service_spec.rb +++ b/spec/models/project_services/prometheus_service_spec.rb @@ -6,7 +6,6 @@ describe PrometheusService, :use_clean_rails_memory_store_caching do let(:project) { create(:prometheus_project) } let(:service) { project.prometheus_service } - let(:environment_query) { Gitlab::Prometheus::Queries::EnvironmentQuery } describe "Associations" do it { is_expected.to belong_to :project } @@ -55,197 +54,31 @@ describe PrometheusService, :use_clean_rails_memory_store_caching do end end - describe '#environment_metrics' do - let(:environment) { build_stubbed(:environment, slug: 'env-slug') } - - around do |example| - Timecop.freeze { example.run } - end - - context 'with valid data' do - subject { service.environment_metrics(environment) } - - before do - stub_reactive_cache(service, prometheus_data, environment_query, environment.id) - end - - it 'returns reactive data' do - is_expected.to eq(prometheus_metrics_data) - end - end - end - - describe '#matched_metrics' do - let(:matched_metrics_query) { Gitlab::Prometheus::Queries::MatchedMetricsQuery } - let(:client) { double(:client, label_values: nil) } - - context 'with valid data' do - subject { service.matched_metrics } - - before do - allow(service).to receive(:client).and_return(client) - synchronous_reactive_cache(service) - end - - it 'returns reactive data' do - expect(subject[:success]).to be_truthy - expect(subject[:data]).to eq([]) - end - end - end - - describe '#deployment_metrics' do - let(:deployment) { build_stubbed(:deployment) } - let(:deployment_query) { Gitlab::Prometheus::Queries::DeploymentQuery } - - around do |example| - Timecop.freeze { example.run } - end - - context 'with valid data' do - subject { service.deployment_metrics(deployment) } - let(:fake_deployment_time) { 10 } - - before do - stub_reactive_cache(service, prometheus_data, deployment_query, deployment.environment.id, deployment.id) - end - - it 'returns reactive data' do - expect(deployment).to receive(:created_at).and_return(fake_deployment_time) - - expect(subject).to eq(prometheus_metrics_data.merge(deployment_time: fake_deployment_time)) - end - end - end - - describe '#calculate_reactive_cache' do - let(:environment) { create(:environment, slug: 'env-slug') } - before do - service.manual_configuration = true - service.active = true - end - - subject do - service.calculate_reactive_cache(environment_query.name, environment.id) - end - - around do |example| - Timecop.freeze { example.run } - end - - context 'when service is inactive' do - before do - service.active = false - end - - it { is_expected.to be_nil } - end - - context 'when Prometheus responds with valid data' do - before do - stub_all_prometheus_requests(environment.slug) - end - - it { expect(subject.to_json).to eq(prometheus_data.to_json) } - it { expect(subject.to_json).to eq(prometheus_data.to_json) } - end - - [404, 500].each do |status| - context "when Prometheus responds with #{status}" do - before do - stub_all_prometheus_requests(environment.slug, status: status, body: "QUERY FAILED!") - end - - it { is_expected.to eq(success: false, result: %(#{status} - "QUERY FAILED!")) } - end - end - end - - describe '#client' do + describe '#prometheus_client' do context 'manual configuration is enabled' do let(:api_url) { 'http://some_url' } + before do + subject.active = true subject.manual_configuration = true subject.api_url = api_url end - it 'returns simple rest client from api_url' do - expect(subject.client).to be_instance_of(Gitlab::PrometheusClient) - expect(subject.client.rest_client.url).to eq(api_url) + it 'returns rest client from api_url' do + expect(subject.prometheus_client.url).to eq(api_url) end end context 'manual configuration is disabled' do - let!(:cluster_for_all) { create(:cluster, environment_scope: '*', projects: [project]) } - let!(:cluster_for_dev) { create(:cluster, environment_scope: 'dev', projects: [project]) } - - let!(:prometheus_for_dev) { create(:clusters_applications_prometheus, :installed, cluster: cluster_for_dev) } - let(:proxy_client) { double('proxy_client') } + let(:api_url) { 'http://some_url' } before do - service.manual_configuration = false - end - - context 'with cluster for all environments with prometheus installed' do - let!(:prometheus_for_all) { create(:clusters_applications_prometheus, :installed, cluster: cluster_for_all) } - - context 'without environment supplied' do - it 'returns client handling all environments' do - expect(service).to receive(:client_from_cluster).with(cluster_for_all).and_return(proxy_client).twice - - expect(service.client).to be_instance_of(Gitlab::PrometheusClient) - expect(service.client.rest_client).to eq(proxy_client) - end - end - - context 'with dev environment supplied' do - let!(:environment) { create(:environment, project: project, name: 'dev') } - - it 'returns dev cluster client' do - expect(service).to receive(:client_from_cluster).with(cluster_for_dev).and_return(proxy_client).twice - - expect(service.client(environment.id)).to be_instance_of(Gitlab::PrometheusClient) - expect(service.client(environment.id).rest_client).to eq(proxy_client) - end - end - - context 'with prod environment supplied' do - let!(:environment) { create(:environment, project: project, name: 'prod') } - - it 'returns dev cluster client' do - expect(service).to receive(:client_from_cluster).with(cluster_for_all).and_return(proxy_client).twice - - expect(service.client(environment.id)).to be_instance_of(Gitlab::PrometheusClient) - expect(service.client(environment.id).rest_client).to eq(proxy_client) - end - end + subject.manual_configuration = false + subject.api_url = api_url end - context 'with cluster for all environments without prometheus installed' do - context 'without environment supplied' do - it 'raises PrometheusClient::Error because cluster was not found' do - expect { service.client }.to raise_error(Gitlab::PrometheusClient::Error, /couldn't find cluster with Prometheus installed/) - end - end - - context 'with dev environment supplied' do - let!(:environment) { create(:environment, project: project, name: 'dev') } - - it 'returns dev cluster client' do - expect(service).to receive(:client_from_cluster).with(cluster_for_dev).and_return(proxy_client).twice - - expect(service.client(environment.id)).to be_instance_of(Gitlab::PrometheusClient) - expect(service.client(environment.id).rest_client).to eq(proxy_client) - end - end - - context 'with prod environment supplied' do - let!(:environment) { create(:environment, project: project, name: 'prod') } - - it 'raises PrometheusClient::Error because cluster was not found' do - expect { service.client }.to raise_error(Gitlab::PrometheusClient::Error, /couldn't find cluster with Prometheus installed/) - end - end + it 'no client provided' do + expect(subject.prometheus_client).to be_nil end end end -- cgit v1.2.1