Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/grafana/proxy_service_spec.rb')
-rw-r--r--spec/services/grafana/proxy_service_spec.rb169
1 files changed, 0 insertions, 169 deletions
diff --git a/spec/services/grafana/proxy_service_spec.rb b/spec/services/grafana/proxy_service_spec.rb
deleted file mode 100644
index 7029bab379a..00000000000
--- a/spec/services/grafana/proxy_service_spec.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Grafana::ProxyService, feature_category: :metrics do
- include ReactiveCachingHelpers
-
- let_it_be(:project) { create(:project) }
- let_it_be(:grafana_integration) { create(:grafana_integration, project: project) }
-
- let(:proxy_path) { 'api/v1/query_range' }
- let(:datasource_id) { '1' }
- let(:query_params) do
- {
- 'query' => 'rate(relevant_metric)',
- 'start' => '1570441248',
- 'end' => '1570444848',
- 'step' => '900'
- }
- end
-
- let(:cache_params) { [project.id, datasource_id, proxy_path, query_params] }
-
- let(:service) do
- described_class.new(project, datasource_id, proxy_path, query_params)
- end
-
- shared_examples_for 'initializes an instance' do
- it 'initializes an instance of ProxyService class' do
- expect(subject).to be_an_instance_of(described_class)
- expect(subject.project).to eq(project)
- expect(subject.datasource_id).to eq('1')
- expect(subject.proxy_path).to eq('api/v1/query_range')
- expect(subject.query_params).to eq(query_params)
- end
- end
-
- describe '.from_cache' do
- subject { described_class.from_cache(*cache_params) }
-
- it_behaves_like 'initializes an instance'
- end
-
- describe '#initialize' do
- subject { service }
-
- it_behaves_like 'initializes an instance'
- end
-
- describe '#execute' do
- subject(:result) { service.execute }
-
- shared_examples 'missing proxy support' do
- it 'returns API not supported error' do
- expect(result).to eq(
- status: :error,
- message: 'Proxy support for this API is not available currently'
- )
- end
- end
-
- context 'with unsupported proxy path' do
- where(:proxy_path) do
- %w[
- /api/vl/query_range
- api/vl/query_range/
- api/vl/labels
- api/v2/query_range
- ../../../org/users
- ]
- end
-
- with_them do
- include_examples 'missing proxy support'
- end
- end
-
- context 'with unsupported datasource_id' do
- where(:datasource_id) do
- ['', '-1', '1str', 'str1', '../../1', '1/../..', "1\n1"]
- end
-
- with_them do
- include_examples 'missing proxy support'
- end
- end
-
- context 'when grafana integration is not configured' do
- before do
- allow(project).to receive(:grafana_integration).and_return(nil)
- end
-
- include_examples 'missing proxy support'
- end
-
- context 'with caching', :use_clean_rails_memory_store_caching do
- context 'when value not present in cache' do
- it 'returns nil' do
- expect(ExternalServiceReactiveCachingWorker)
- .to receive(:perform_async)
- .with(service.class, service.id, *cache_params)
-
- expect(result).to eq(nil)
- end
- end
-
- context 'when value present in cache' do
- let(:return_value) { { 'http_status' => 200, 'body' => 'body' } }
-
- before do
- stub_reactive_cache(service, return_value, cache_params)
- end
-
- it 'returns cached value' do
- expect(ReactiveCachingWorker)
- .not_to receive(:perform_async)
- .with(service.class, service.id, *cache_params)
-
- expect(result[:http_status]).to eq(return_value[:http_status])
- expect(result[:body]).to eq(return_value[:body])
- end
- end
- end
-
- context 'call prometheus api' do
- let(:client) { service.send(:client) }
-
- before do
- synchronous_reactive_cache(service)
- end
-
- context 'connection to grafana datasource succeeds' do
- let(:response) { instance_double(Gitlab::HTTP::Response) }
- let(:status_code) { 400 }
- let(:body) { 'body' }
-
- before do
- allow(client).to receive(:proxy_datasource).and_return(response)
-
- allow(response).to receive(:code).and_return(status_code)
- allow(response).to receive(:body).and_return(body)
- end
-
- it 'returns the http status code and body from prometheus' do
- expect(result).to eq(
- http_status: status_code,
- body: body,
- status: :success
- )
- end
- end
-
- context 'connection to grafana datasource fails' do
- before do
- allow(client).to receive(:proxy_datasource)
- .and_raise(Grafana::Client::Error, 'Network connection error')
- end
-
- it 'returns error' do
- expect(result).to eq(
- status: :error,
- message: 'Network connection error',
- http_status: :service_unavailable
- )
- end
- end
- end
- end
-end