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/controllers/metrics_controller_spec.rb')
-rw-r--r--spec/controllers/metrics_controller_spec.rb75
1 files changed, 54 insertions, 21 deletions
diff --git a/spec/controllers/metrics_controller_spec.rb b/spec/controllers/metrics_controller_spec.rb
index f350d7378dc..9fa90dde997 100644
--- a/spec/controllers/metrics_controller_spec.rb
+++ b/spec/controllers/metrics_controller_spec.rb
@@ -28,8 +28,38 @@ RSpec.describe MetricsController, :request_store do
end
end
+ shared_examples_for 'protected metrics endpoint' do |examples|
+ context 'accessed from whitelisted ip' do
+ before do
+ allow(Gitlab::RequestContext.instance).to receive(:client_ip).and_return(whitelisted_ip)
+ end
+
+ it_behaves_like examples
+ end
+
+ context 'accessed from ip in whitelisted range' do
+ before do
+ allow(Gitlab::RequestContext.instance).to receive(:client_ip).and_return(ip_in_whitelisted_range)
+ end
+
+ it_behaves_like examples
+ end
+
+ context 'accessed from not whitelisted ip' do
+ before do
+ allow(Gitlab::RequestContext.instance).to receive(:client_ip).and_return(not_whitelisted_ip)
+ end
+
+ it 'returns the expected error response' do
+ get :index
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+ end
+
describe '#index' do
- shared_examples_for 'endpoint providing metrics' do
+ shared_examples_for 'providing metrics' do
it 'returns prometheus metrics' do
get :index
@@ -51,32 +81,35 @@ RSpec.describe MetricsController, :request_store do
end
end
- context 'accessed from whitelisted ip' do
- before do
- allow(Gitlab::RequestContext.instance).to receive(:client_ip).and_return(whitelisted_ip)
- end
-
- it_behaves_like 'endpoint providing metrics'
- end
+ include_examples 'protected metrics endpoint', 'providing metrics'
+ end
- context 'accessed from ip in whitelisted range' do
- before do
- allow(Gitlab::RequestContext.instance).to receive(:client_ip).and_return(ip_in_whitelisted_range)
+ describe '#system' do
+ shared_examples_for 'providing system stats' do
+ let(:summary) do
+ {
+ version: 'ruby-3.0-patch1',
+ memory_rss: 1024
+ }
end
- it_behaves_like 'endpoint providing metrics'
- end
+ it 'renders system stats JSON' do
+ expect(Prometheus::PidProvider).to receive(:worker_id).and_return('worker-0')
+ expect(Gitlab::Metrics::System).to receive(:summary).and_return(summary)
- context 'accessed from not whitelisted ip' do
- before do
- allow(Gitlab::RequestContext.instance).to receive(:client_ip).and_return(not_whitelisted_ip)
- end
-
- it 'returns the expected error response' do
- get :index
+ get :system
- expect(response).to have_gitlab_http_status(:not_found)
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response_json['version']).to eq('ruby-3.0-patch1')
+ expect(response_json['worker_id']).to eq('worker-0')
+ expect(response_json['memory_rss']).to eq(1024)
end
end
+
+ include_examples 'protected metrics endpoint', 'providing system stats'
+ end
+
+ def response_json
+ Gitlab::Json.parse(response.body)
end
end