diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-16 18:09:47 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-16 18:09:47 +0000 |
commit | bf1600d157465f9408aace91073954fd5790c054 (patch) | |
tree | f317bb99330769c4eb37621c860af014810e554b /spec/lib/gitlab/utils/usage_data_spec.rb | |
parent | 6de7d2c195a8a7fa5702cafa4365f7a9fcac37cd (diff) | |
download | gitlab-ce-bf1600d157465f9408aace91073954fd5790c054.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/gitlab/utils/usage_data_spec.rb')
-rw-r--r-- | spec/lib/gitlab/utils/usage_data_spec.rb | 80 |
1 files changed, 62 insertions, 18 deletions
diff --git a/spec/lib/gitlab/utils/usage_data_spec.rb b/spec/lib/gitlab/utils/usage_data_spec.rb index 80a3567186c..bafd5cc199e 100644 --- a/spec/lib/gitlab/utils/usage_data_spec.rb +++ b/spec/lib/gitlab/utils/usage_data_spec.rb @@ -106,42 +106,86 @@ RSpec.describe Gitlab::Utils::UsageData do end end - context 'when Prometheus is available from settings' do + shared_examples 'does not query data from Prometheus' do + it 'returns nil by default' do + result = described_class.with_prometheus_client { |client| client } + + expect(result).to be_nil + end + + it 'returns fallback if provided' do + result = described_class.with_prometheus_client(fallback: []) { |client| client } + + expect(result).to eq([]) + end + end + + shared_examples 'try to query Prometheus with given address' do + context 'Prometheus is ready' do + before do + stub_request(:get, /\/-\/ready/) + .to_return(status: 200, body: 'Prometheus is Ready.\n') + end + + context 'Prometheus is reachable through HTTPS' do + it_behaves_like 'query data from Prometheus' + end + + context 'Prometheus is not reachable through HTTPS' do + before do + stub_request(:get, /https:\/\/.*/).to_raise(Errno::ECONNREFUSED) + end + + context 'Prometheus is reachable through HTTP' do + it_behaves_like 'query data from Prometheus' + end + + context 'Prometheus is not reachable through HTTP' do + before do + stub_request(:get, /http:\/\/.*/).to_raise(Errno::ECONNREFUSED) + end + + it_behaves_like 'does not query data from Prometheus' + end + end + end + + context 'Prometheus is not ready' do + before do + stub_request(:get, /\/-\/ready/) + .to_return(status: 503, body: 'Service Unavailable') + end + + it_behaves_like 'does not query data from Prometheus' + end + end + + context 'when Prometheus server address is available from settings' do before do expect(Gitlab::Prometheus::Internal).to receive(:prometheus_enabled?).and_return(true) - expect(Gitlab::Prometheus::Internal).to receive(:uri).and_return('http://prom:9090') + expect(Gitlab::Prometheus::Internal).to receive(:server_address).and_return('prom:9090') end - it_behaves_like 'query data from Prometheus' + it_behaves_like 'try to query Prometheus with given address' end - context 'when Prometheus is available from Consul service discovery' do + context 'when Prometheus server address is available from Consul service discovery' do before do expect(Gitlab::Prometheus::Internal).to receive(:prometheus_enabled?).and_return(false) expect(Gitlab::Consul::Internal).to receive(:api_url).and_return('http://localhost:8500') - expect(Gitlab::Consul::Internal).to receive(:discover_prometheus_uri).and_return('http://prom:9090') + expect(Gitlab::Consul::Internal).to receive(:discover_prometheus_server_address).and_return('prom:9090') end - it_behaves_like 'query data from Prometheus' + it_behaves_like 'try to query Prometheus with given address' end - context 'when Prometheus is not available' do + context 'when Prometheus server address is not available' do before do expect(Gitlab::Prometheus::Internal).to receive(:prometheus_enabled?).and_return(false) expect(Gitlab::Consul::Internal).to receive(:api_url).and_return(nil) end - it 'returns nil by default' do - result = described_class.with_prometheus_client { |client| client } - - expect(result).to be nil - end - - it 'returns fallback if provided' do - result = described_class.with_prometheus_client(fallback: []) { |client| client } - - expect(result).to eq([]) - end + it_behaves_like 'does not query data from Prometheus' end end |