2015-08-26 01:42:46 +00:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe "Admin Runners" do
|
|
|
|
before do
|
2015-09-23 10:47:29 +00:00
|
|
|
login_as :admin
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
describe "Runners page" do
|
|
|
|
before do
|
2016-10-19 12:25:37 +00:00
|
|
|
runner = FactoryGirl.create(:ci_runner, contacted_at: Time.now)
|
2016-06-03 14:22:26 +00:00
|
|
|
pipeline = FactoryGirl.create(:ci_pipeline)
|
|
|
|
FactoryGirl.create(:ci_build, pipeline: pipeline, runner_id: runner.id)
|
2015-12-04 11:55:23 +00:00
|
|
|
visit admin_runners_path
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|
|
|
|
|
2016-10-19 12:25:37 +00:00
|
|
|
it 'has all necessary texts' do
|
|
|
|
expect(page).to have_text "To register a new Runner"
|
|
|
|
expect(page).to have_text "Runners with last contact less than a minute ago: 1"
|
|
|
|
end
|
2015-08-26 01:42:46 +00:00
|
|
|
|
|
|
|
describe 'search' do
|
|
|
|
before do
|
2015-09-30 10:51:03 +00:00
|
|
|
FactoryGirl.create :ci_runner, description: 'runner-foo'
|
|
|
|
FactoryGirl.create :ci_runner, description: 'runner-bar'
|
2015-08-26 01:42:46 +00:00
|
|
|
|
2015-09-15 20:13:01 +00:00
|
|
|
search_form = find('#runners-search')
|
2015-09-30 10:51:03 +00:00
|
|
|
search_form.fill_in 'search', with: 'runner-foo'
|
2015-09-15 20:13:01 +00:00
|
|
|
search_form.click_button 'Search'
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|
|
|
|
|
2016-10-19 12:25:37 +00:00
|
|
|
it 'shows correct runner' do
|
|
|
|
expect(page).to have_content("runner-foo")
|
|
|
|
expect(page).not_to have_content("runner-bar")
|
|
|
|
end
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "Runner show page" do
|
2015-09-15 13:42:02 +00:00
|
|
|
let(:runner) { FactoryGirl.create :ci_runner }
|
2015-08-26 01:42:46 +00:00
|
|
|
|
|
|
|
before do
|
2015-12-04 11:55:23 +00:00
|
|
|
@project1 = FactoryGirl.create(:empty_project)
|
|
|
|
@project2 = FactoryGirl.create(:empty_project)
|
|
|
|
visit admin_runner_path(runner)
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
describe 'runner info' do
|
2015-09-10 14:55:09 +00:00
|
|
|
it { expect(find_field('runner_token').value).to eq runner.token }
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
describe 'projects' do
|
2016-10-19 12:25:37 +00:00
|
|
|
it 'contains project names' do
|
|
|
|
expect(page).to have_content(@project1.name_with_namespace)
|
|
|
|
expect(page).to have_content(@project2.name_with_namespace)
|
|
|
|
end
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
describe 'search' do
|
|
|
|
before do
|
2015-09-15 20:13:01 +00:00
|
|
|
search_form = find('#runner-projects-search')
|
2015-12-04 11:55:23 +00:00
|
|
|
search_form.fill_in 'search', with: @project1.name
|
2015-09-15 20:13:01 +00:00
|
|
|
search_form.click_button 'Search'
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|
|
|
|
|
2016-10-19 12:25:37 +00:00
|
|
|
it 'contains name of correct project' do
|
|
|
|
expect(page).to have_content(@project1.name_with_namespace)
|
|
|
|
expect(page).not_to have_content(@project2.name_with_namespace)
|
|
|
|
end
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|
2016-06-17 14:17:20 +00:00
|
|
|
|
|
|
|
describe 'enable/create' do
|
2016-06-28 10:33:25 +00:00
|
|
|
shared_examples 'assignable runner' do
|
2016-06-28 05:46:47 +00:00
|
|
|
it 'enables a runner for a project' do
|
|
|
|
within '.unassigned-projects' do
|
|
|
|
click_on 'Enable'
|
|
|
|
end
|
|
|
|
|
|
|
|
assigned_project = page.find('.assigned-projects')
|
|
|
|
|
|
|
|
expect(assigned_project).to have_content(@project2.path)
|
|
|
|
end
|
2016-06-17 14:17:20 +00:00
|
|
|
end
|
|
|
|
|
2016-06-28 05:46:47 +00:00
|
|
|
context 'with specific runner' do
|
|
|
|
before do
|
|
|
|
@project1.runners << runner
|
|
|
|
visit admin_runner_path(runner)
|
2016-06-17 14:17:20 +00:00
|
|
|
end
|
|
|
|
|
2016-06-28 10:33:25 +00:00
|
|
|
it_behaves_like 'assignable runner'
|
2016-06-28 05:46:47 +00:00
|
|
|
end
|
|
|
|
|
2016-06-28 12:15:50 +00:00
|
|
|
context 'with locked runner' do
|
|
|
|
before do
|
|
|
|
runner.update(locked: true)
|
|
|
|
@project1.runners << runner
|
|
|
|
visit admin_runner_path(runner)
|
|
|
|
end
|
|
|
|
|
|
|
|
it_behaves_like 'assignable runner'
|
|
|
|
end
|
|
|
|
|
2016-06-28 05:46:47 +00:00
|
|
|
context 'with shared runner' do
|
|
|
|
before do
|
|
|
|
@project1.destroy
|
|
|
|
runner.update(is_shared: true)
|
|
|
|
visit admin_runner_path(runner)
|
|
|
|
end
|
2016-06-17 14:17:20 +00:00
|
|
|
|
2016-06-28 10:33:25 +00:00
|
|
|
it_behaves_like 'assignable runner'
|
2016-06-17 14:17:20 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'disable/destroy' do
|
|
|
|
before do
|
|
|
|
@project1.runners << runner
|
|
|
|
visit admin_runner_path(runner)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'enables specific runner for project' do
|
|
|
|
within '.assigned-projects' do
|
|
|
|
click_on 'Disable'
|
|
|
|
end
|
|
|
|
|
|
|
|
new_runner_project = page.find('.unassigned-projects')
|
|
|
|
|
|
|
|
expect(new_runner_project).to have_content(@project1.path)
|
|
|
|
end
|
|
|
|
end
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|
2015-12-11 10:14:55 +00:00
|
|
|
|
|
|
|
describe 'runners registration token' do
|
2015-12-23 09:48:10 +00:00
|
|
|
let!(:token) { current_application_settings.runners_registration_token }
|
2015-12-14 13:03:58 +00:00
|
|
|
before { visit admin_runners_path }
|
2015-12-11 10:14:55 +00:00
|
|
|
|
|
|
|
it 'has a registration token' do
|
|
|
|
expect(page).to have_content("Registration token is #{token}")
|
|
|
|
expect(page).to have_selector('#runners-token', text: token)
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'reload registration token' do
|
|
|
|
let(:page_token) { find('#runners-token').text }
|
|
|
|
|
|
|
|
before do
|
|
|
|
click_button 'Reset runners registration token'
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'changes registration token' do
|
2016-05-23 23:37:59 +00:00
|
|
|
expect(page_token).not_to eq token
|
2015-12-11 10:14:55 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2015-08-26 01:42:46 +00:00
|
|
|
end
|