summaryrefslogtreecommitdiff
path: root/spec/models/project_services/prometheus_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/project_services/prometheus_service_spec.rb')
-rw-r--r--spec/models/project_services/prometheus_service_spec.rb189
1 files changed, 11 insertions, 178 deletions
diff --git a/spec/models/project_services/prometheus_service_spec.rb b/spec/models/project_services/prometheus_service_spec.rb
index 6693e5783a5..7afb1b4a8e3 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
@@ -284,7 +117,7 @@ describe PrometheusService, :use_clean_rails_memory_store_caching do
end
end
- describe '#synchronize_service_state! before_save callback' do
+ describe '#synchronize_service_state before_save callback' do
context 'no clusters with prometheus are installed' do
context 'when service is inactive' do
before do