Skip to content

Commit

Permalink
Add tests for create_runners
Browse files Browse the repository at this point in the history
  • Loading branch information
john-smith-vc committed Oct 3, 2023
1 parent dfffe94 commit 96e91f8
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 0 deletions.
72 changes: 72 additions & 0 deletions lib/gitlab/client/runners.rb
Original file line number Diff line number Diff line change
Expand Up @@ -207,5 +207,77 @@ def verify_auth_registered_runner(token)
body = { token: token }
post('/runners/verify', body: body)
end

# Creates a new group runner with the new Gitlab approach (v16.0+) and returns the id/token information
# https://docs.gitlab.com/ee/api/users.html#create-a-runner
# You must use an access token with the create_runner scope
#
# @example
# Gitlab.create_group_runner(9, tag_list: ['one', 'two'])
# Gitlab.create_group_runner(9, paused: false, description: 'A note', run_untagged: true)
#
# @param [String] group(required) Group ID.
# @param [Hash] options A customizable set of options.
# @return <Gitlab::ObjectifiedHash> Response against runner registration
def create_group_runner(group, options={})
create_runner({ runner_type: 'group_type', group_id: group }.merge(options))
end


# Creates a new project runner with the new Gitlab approach (v16.0+) and returns the id/token information
# https://docs.gitlab.com/ee/api/users.html#create-a-runner
# You must use an access token with the create_runner scope
#
# @example
# Gitlab.create_project_runner(12, tag_list: ['one', 'two'])
# Gitlab.create_project_runner(12, paused: false, description: 'A note', run_untagged: true)
#
# @param [String] project(required) Project ID.
# @param [Hash] options A customizable set of options.
# @return <Gitlab::ObjectifiedHash> Response against runner registration
def create_project_runner(project, options={})
create_runner({ runner_type: 'project_type', project_id: project }.merge(options))
end


# Creates a new instance runner with the new Gitlab approach (v16.0+) and returns the id/token information
# You must be an administrator of the GitLab instance
# You must use an access token with the create_runner scope
# https://docs.gitlab.com/ee/api/users.html#create-a-runner
#
# @example
# Gitlab.create_instance_runner(tag_list: ['one', 'two'])
# Gitlab.create_instance_runner(paused: false, description: 'A note', run_untagged: true)
#
# @param [String] group(required) Project ID.
# @param [Hash] options A customizable set of options.
# @return <Gitlab::ObjectifiedHash> Response against runner registration
def create_instance_runner(options={})
create_runner({ runner_type: 'instance_type' }.merge(options))
end


private

# Creates a runner linked to the current user.
# You must use an access token with the create_runner scope
# https://docs.gitlab.com/ee/api/users.html#create-a-runner
#
# @param [Hash] options(required) A customizable set of options.
# @option options [String] :description(optional) Runner description.
# @option options [Hash] :info(optional) Runner metadata.
# @option options [Boolean] :paused(optional) Whether the Runner ignores new jobs.
# @option options [Boolean] :locked(optional) Whether the Runner should be locked for current project.
# @option options [Boolean] :run_untagged(optional) Whether the Runner should handle untagged jobs.
# @option options [Array<String>] :tag_list(optional) List of Runner tags.
# @option options [String] :access_level(optional) Access level of the runner; not_protected or ref_protected.
# @option options [Integer] :maximum_timeout(optional) Maximum timeout set when this Runner will handle the job.
# @option options [String] :maintenance_note(optional) Free-form maintenance notes for the runner (1024 characters).
# @return <Gitlab::ObjectifiedHash> Response against runner registration {"id": 1, "token": foo "token_expires_at": null}
def create_runner(options)
post('/user/runners', body: options)
end


end
end
5 changes: 5 additions & 0 deletions spec/fixtures/create_group_runner_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"id": 12345,
"token": "glrt-kyahzxLaj4Dc1jQf4xjX",
"token_expires_at": null
}
5 changes: 5 additions & 0 deletions spec/fixtures/create_instance_runner_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"id": 9171,
"token": "glrt-kyahzxLaj4Dc1jQf4xjX",
"token_expires_at": null
}
5 changes: 5 additions & 0 deletions spec/fixtures/create_project_runner_response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"id": 56789,
"token": "glrt-kyahzxLaj4Dc1jQf4xjX",
"token_expires_at": null
}
43 changes: 43 additions & 0 deletions spec/gitlab/client/runners_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,49 @@
end
end


describe 'create_runner' do
it "creates the correct group runner call" do
stub_post('/user/runners', 'create_group_runner_response.json')
.with(body: { runner_type: 'group_type', group_id: 12345, tag_list: ['foo','bar'], description: "desc", locked: false })

@runner_response = Gitlab.create_group_runner(12345, tag_list: ['foo', 'bar'], description: "desc", locked: false)

expect(a_post('/user/runners')
.with(body: { runner_type: 'group_type', group_id: 12345, tag_list: ['foo','bar'], description: "desc", locked: false }))
.to have_been_made

expect(@runner_response.to_h).to eq({"id" => 12345, "token" => "glrt-kyahzxLaj4Dc1jQf4xjX", "token_expires_at" => nil})
end

it "creates the correct project runner call" do
stub_post('/user/runners', 'create_project_runner_response.json')
.with(body: { runner_type: 'project_type', project_id: 56789, tag_list: ['foo','bar'], paused: true, maximum_timeout: 60 })

@runner_response = Gitlab.create_project_runner(56789, tag_list: ['foo', 'bar'], paused: true, maximum_timeout: 60)

expect(a_post('/user/runners')
.with(body: { runner_type: 'project_type', project_id: 56789, tag_list: ['foo','bar'], paused: true, maximum_timeout: 60 }))
.to have_been_made

expect(@runner_response.to_h).to eq({"id" => 56789, "token" => "glrt-kyahzxLaj4Dc1jQf4xjX", "token_expires_at" => nil})
end

it "creates the correct instance runner call" do
stub_post('/user/runners', 'create_instance_runner_response.json')
.with(body: { runner_type: 'instance_type', tag_list: ['foo','bar'], maintenance_note: "note", run_untagged: false, access_level: "ref_protected" })

@runner_response = Gitlab.create_instance_runner(tag_list: ['foo', 'bar'], maintenance_note: "note", run_untagged: false, access_level: "ref_protected")

expect(a_post('/user/runners')
.with(body: { runner_type: 'instance_type', tag_list: ['foo','bar'], maintenance_note: "note", run_untagged: false, access_level: "ref_protected" }))
.to have_been_made

expect(@runner_response.to_h).to eq({"id" => 9171, "token" => "glrt-kyahzxLaj4Dc1jQf4xjX", "token_expires_at" => nil})
end
end


describe '.delete_registered_runner' do
before do
stub_delete('/runners', 'empty').with(body: { token: '6337ff461c94fd3fa32ba3b1ff4125' })
Expand Down

0 comments on commit 96e91f8

Please sign in to comment.