Skip to content
代码片段 群组 项目
未验证 提交 e571563d 编辑于 作者: Stan Hu's avatar Stan Hu 提交者: GitLab
浏览文件

Merge branch 'pedropombeiro/505810/pass-runner_manager' into 'master'

Pass runner_manager to destroy_conditionally! call

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/173548



Merged-by: default avatarStan Hu <stanhu@gmail.com>
Approved-by: default avatarDillon Wheeler <dwheeler@gitlab.com>
Approved-by: default avatarStan Hu <stanhu@gmail.com>
Reviewed-by: default avatarPedro Pombeiro <noreply@pedro.pombei.ro>
Co-authored-by: default avatarPedro Pombeiro <noreply@pedro.pombei.ro>
No related branches found
No related tags found
无相关合并请求
...@@ -28,7 +28,7 @@ def execute ...@@ -28,7 +28,7 @@ def execute
private private
def system_id_missing_error def system_id_missing_error
ServiceResponse.error(message: '`system_id` needs to be specified for runners created in the UI.') ServiceResponse.error(message: '`system_id` needs to be specified.')
end end
end end
end end
......
...@@ -98,11 +98,15 @@ class Runner < ::API::Base ...@@ -98,11 +98,15 @@ class Runner < ::API::Base
delete '/managers', urgency: :low, feature_category: :fleet_visibility do delete '/managers', urgency: :low, feature_category: :fleet_visibility do
authenticate_runner!(ensure_runner_manager: false) authenticate_runner!(ensure_runner_manager: false)
destroy_conditionally!(current_runner) do runner_manager = current_runner.runner_managers.find_by_system_xid(params[:system_id])
not_found!('Runner manager not found') unless runner_manager
destroy_conditionally!(runner_manager) do
::Ci::Runners::UnregisterRunnerManagerService.new( ::Ci::Runners::UnregisterRunnerManagerService.new(
current_runner, current_runner,
params[:token], params[:token],
system_id: params[:system_id]).execute system_id: params[:system_id]
).execute
end end
end end
......
...@@ -102,75 +102,67 @@ ...@@ -102,75 +102,67 @@
context 'with created runner' do context 'with created runner' do
let!(:runner) { create(:ci_runner, :with_runner_manager, registration_type: :authenticated_user) } let!(:runner) { create(:ci_runner, :with_runner_manager, registration_type: :authenticated_user) }
let(:delete_params) do
{ token: runner.token, system_id: runner.runner_managers.first.system_xid }
end
context 'with matching system_id' do it 'deletes runner manager' do
context 'when no token is provided' do expect do
let(:delete_params) { { system_id: runner.runner_managers.first.system_xid } } delete_request
it 'returns 400 error' do
delete_request
expect(response).to have_gitlab_http_status(:bad_request)
end
end
context 'when invalid token is provided' do
let(:delete_params) { { token: 'invalid', system_id: runner.runner_managers.first.system_xid } }
it 'returns 403 error' do expect(response).to have_gitlab_http_status(:no_content)
delete_request end.to change { runner.runner_managers.count }.from(1).to(0)
.and not_change { ::Ci::Runner.count }.from(1)
end
expect(response).to have_gitlab_http_status(:forbidden) it_behaves_like '412 response' do
end let(:request) { api('/runners/managers') }
end let(:params) { delete_params }
end end
end
context 'when valid token is provided' do it_behaves_like 'storing arguments in the application context for the API' do
context 'with created runner' do let(:expected_params) { { client_id: "runner/#{runner.id}" } }
let!(:runner) { create(:ci_runner, :with_runner_manager, registration_type: :authenticated_user) } end
context 'with matching system_id' do context 'with unknown system_id' do
let(:delete_params) { { token: runner.token, system_id: runner.runner_managers.first.system_xid } } let(:delete_params) { { token: runner.token, system_id: 'unknown_system_id' } }
it 'deletes runner manager' do it 'returns 404 error' do
expect do delete_request
delete_request
expect(response).to have_gitlab_http_status(:no_content) expect(response).to have_gitlab_http_status(:not_found)
end.to change { runner.runner_managers.count }.from(1).to(0) expect(response.body).to include('Runner manager not found')
expect(::Ci::Runner.count).to eq(1)
end
end
expect(::Ci::Runner.count).to eq(1) context 'without system_id' do
end let(:delete_params) { { token: runner.token } }
it_behaves_like '412 response' do it 'does not delete runner manager nor runner' do
let(:request) { api('/runners/managers') } delete_request
let(:params) { delete_params }
end
it_behaves_like 'storing arguments in the application context for the API' do expect(response).to have_gitlab_http_status(:bad_request)
let(:expected_params) { { client_id: "runner/#{runner.id}" } }
end
end end
end
context 'with unknown system_id' do context 'when no token is provided' do
let(:delete_params) { { token: runner.token, system_id: 'unknown_system_id' } } let(:delete_params) { { system_id: runner.runner_managers.first.system_xid } }
it 'returns 404 error' do it 'returns 400 error' do
delete_request delete_request
expect(response).to have_gitlab_http_status(:not_found) expect(response).to have_gitlab_http_status(:bad_request)
end
end end
end
context 'without system_id' do context 'when invalid token is provided' do
let(:delete_params) { { token: runner.token } } let(:delete_params) { { token: 'invalid', system_id: runner.runner_managers.first.system_xid } }
it 'does not delete runner manager nor runner' do it 'returns 403 error' do
delete_request delete_request
expect(response).to have_gitlab_http_status(:bad_request) expect(response).to have_gitlab_http_status(:forbidden)
end
end end
end end
end end
......
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
it 'returns error and leaves runner_manager1', :aggregate_failures do it 'returns error and leaves runner_manager1', :aggregate_failures do
expect do expect do
expect(execute).to be_error expect(execute).to be_error
expect(execute.message).to eq('`system_id` needs to be specified for runners created in the UI.') expect(execute.message).to eq('`system_id` needs to be specified.')
end.to not_change { Ci::Runner.count } end.to not_change { Ci::Runner.count }
.and not_change { Ci::RunnerManager.count } .and not_change { Ci::RunnerManager.count }
end end
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册