2019-10-12 21:52:04 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2015-09-25 12:07:36 +05:30
|
|
|
require 'spec_helper'
|
|
|
|
|
2020-06-23 00:09:42 +05:30
|
|
|
RSpec.describe "Admin Runners" do
|
2022-06-21 17:19:12 +05:30
|
|
|
include Spec::Support::Helpers::Features::RunnersHelpers
|
2022-07-16 23:28:13 +05:30
|
|
|
include Spec::Support::Helpers::ModalHelpers
|
2022-06-21 17:19:12 +05:30
|
|
|
|
|
|
|
let_it_be(:admin) { create(:admin) }
|
2017-08-17 22:00:37 +05:30
|
|
|
|
2015-09-25 12:07:36 +05:30
|
|
|
before do
|
2021-02-22 17:27:13 +05:30
|
|
|
sign_in(admin)
|
|
|
|
gitlab_enable_admin_mode_sign_in(admin)
|
2022-05-07 20:08:51 +05:30
|
|
|
|
|
|
|
wait_for_requests
|
2015-09-25 12:07:36 +05:30
|
|
|
end
|
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
describe "Admin Runners page", :js do
|
2021-09-30 23:02:18 +05:30
|
|
|
let_it_be(:user) { create(:user) }
|
|
|
|
let_it_be(:group) { create(:group) }
|
|
|
|
let_it_be(:namespace) { create(:namespace) }
|
|
|
|
let_it_be(:project) { create(:project, namespace: namespace, creator: user) }
|
2021-09-04 01:27:46 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
context "runners registration" do
|
|
|
|
before do
|
2017-09-10 17:25:29 +05:30
|
|
|
visit admin_runners_path
|
|
|
|
end
|
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
it_behaves_like "shows and resets runner registration token" do
|
|
|
|
let(:dropdown_text) { 'Register an instance runner' }
|
|
|
|
let(:registration_token) { Gitlab::CurrentSettings.runners_registration_token }
|
|
|
|
end
|
|
|
|
end
|
2021-09-30 23:02:18 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
context "when there are runners" do
|
|
|
|
context "with an instance runner" do
|
|
|
|
let!(:instance_runner) { create(:ci_runner, :instance) }
|
2021-09-30 23:02:18 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
before do
|
|
|
|
visit admin_runners_path
|
2021-09-30 23:02:18 +05:30
|
|
|
end
|
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
it_behaves_like 'shows runner in list' do
|
|
|
|
let(:runner) { instance_runner }
|
|
|
|
end
|
2021-09-30 23:02:18 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
it_behaves_like 'pauses, resumes and deletes a runner' do
|
|
|
|
let(:runner) { instance_runner }
|
|
|
|
end
|
2021-09-30 23:02:18 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
it 'shows an instance badge' do
|
|
|
|
within_runner_row(instance_runner.id) do
|
|
|
|
expect(page).to have_selector '.badge', text: 'shared'
|
|
|
|
end
|
2021-09-30 23:02:18 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
context "with multiple runners" do
|
|
|
|
before do
|
|
|
|
create(:ci_runner, :instance, created_at: 1.year.ago, contacted_at: Time.zone.now)
|
|
|
|
create(:ci_runner, :instance, created_at: 1.year.ago, contacted_at: 1.week.ago)
|
|
|
|
create(:ci_runner, :instance, created_at: 1.year.ago, contacted_at: 1.year.ago)
|
2021-09-30 23:02:18 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
visit admin_runners_path
|
|
|
|
end
|
2021-09-30 23:02:18 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
it 'has all necessary texts' do
|
|
|
|
expect(page).to have_text "Register an instance runner"
|
|
|
|
expect(page).to have_text "Online runners 1"
|
|
|
|
expect(page).to have_text "Offline runners 2"
|
|
|
|
expect(page).to have_text "Stale runners 1"
|
2021-09-30 23:02:18 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-01-26 12:08:38 +05:30
|
|
|
it 'shows a job count' do
|
|
|
|
runner = create(:ci_runner, :project, projects: [project])
|
|
|
|
|
|
|
|
create(:ci_build, runner: runner)
|
|
|
|
create(:ci_build, runner: runner)
|
|
|
|
|
|
|
|
visit admin_runners_path
|
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
within_runner_row(runner.id) do
|
|
|
|
expect(find("[data-label='Jobs']")).to have_content '2'
|
2022-01-26 12:08:38 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
describe 'search' do
|
2017-09-10 17:25:29 +05:30
|
|
|
before do
|
2021-09-30 23:02:18 +05:30
|
|
|
create(:ci_runner, :instance, description: 'runner-foo')
|
|
|
|
create(:ci_runner, :instance, description: 'runner-bar')
|
2018-12-05 23:21:45 +05:30
|
|
|
|
|
|
|
visit admin_runners_path
|
2017-09-10 17:25:29 +05:30
|
|
|
end
|
|
|
|
|
2021-12-11 22:18:48 +05:30
|
|
|
it 'runner types tabs have total counts and can be selected' do
|
|
|
|
expect(page).to have_link('All 2')
|
|
|
|
expect(page).to have_link('Instance 2')
|
|
|
|
expect(page).to have_link('Group 0')
|
|
|
|
expect(page).to have_link('Project 0')
|
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
it 'shows runners' do
|
|
|
|
expect(page).to have_content("runner-foo")
|
|
|
|
expect(page).to have_content("runner-bar")
|
|
|
|
end
|
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
it 'shows correct runner when description matches' do
|
2018-12-05 23:21:45 +05:30
|
|
|
input_filtered_search_keys('runner-foo')
|
2015-09-25 12:07:36 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).to have_link('All 1')
|
|
|
|
expect(page).to have_link('Instance 1')
|
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
expect(page).to have_content("runner-foo")
|
|
|
|
expect(page).not_to have_content("runner-bar")
|
|
|
|
end
|
|
|
|
|
2022-07-23 23:45:48 +05:30
|
|
|
context 'when description does not match' do
|
|
|
|
before do
|
|
|
|
input_filtered_search_keys('runner-baz')
|
|
|
|
end
|
2018-12-05 23:21:45 +05:30
|
|
|
|
2022-07-23 23:45:48 +05:30
|
|
|
it_behaves_like 'shows no runners found'
|
2022-03-02 08:16:31 +05:30
|
|
|
|
2022-07-23 23:45:48 +05:30
|
|
|
it 'shows no runner' do
|
|
|
|
expect(page).to have_link('All 0')
|
|
|
|
expect(page).to have_link('Instance 0')
|
|
|
|
end
|
2018-12-05 23:21:45 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
describe 'filter by paused' do
|
|
|
|
before do
|
|
|
|
create(:ci_runner, :instance, description: 'runner-active')
|
|
|
|
create(:ci_runner, :instance, description: 'runner-paused', active: false)
|
|
|
|
|
|
|
|
visit admin_runners_path
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows all runners' do
|
|
|
|
expect(page).to have_link('All 2')
|
|
|
|
|
|
|
|
expect(page).to have_content 'runner-active'
|
|
|
|
expect(page).to have_content 'runner-paused'
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows paused runners' do
|
|
|
|
input_filtered_search_filter_is_only('Paused', 'Yes')
|
|
|
|
|
|
|
|
expect(page).to have_link('All 1')
|
|
|
|
|
|
|
|
expect(page).not_to have_content 'runner-active'
|
|
|
|
expect(page).to have_content 'runner-paused'
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows active runners' do
|
|
|
|
input_filtered_search_filter_is_only('Paused', 'No')
|
|
|
|
|
|
|
|
expect(page).to have_link('All 1')
|
|
|
|
|
|
|
|
expect(page).to have_content 'runner-active'
|
|
|
|
expect(page).not_to have_content 'runner-paused'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
describe 'filter by status' do
|
2022-03-02 08:16:31 +05:30
|
|
|
let!(:never_contacted) { create(:ci_runner, :instance, description: 'runner-never-contacted', contacted_at: nil) }
|
|
|
|
|
|
|
|
before do
|
2022-05-07 20:08:51 +05:30
|
|
|
create(:ci_runner, :instance, description: 'runner-1', contacted_at: Time.zone.now)
|
|
|
|
create(:ci_runner, :instance, description: 'runner-2', contacted_at: Time.zone.now)
|
2022-06-21 17:19:12 +05:30
|
|
|
create(:ci_runner, :instance, description: 'runner-offline', contacted_at: 1.week.ago)
|
2018-12-05 23:21:45 +05:30
|
|
|
|
|
|
|
visit admin_runners_path
|
2022-03-02 08:16:31 +05:30
|
|
|
end
|
2018-12-05 23:21:45 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
it 'shows all runners' do
|
2022-06-21 17:19:12 +05:30
|
|
|
expect(page).to have_link('All 4')
|
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).to have_content 'runner-1'
|
|
|
|
expect(page).to have_content 'runner-2'
|
2022-06-21 17:19:12 +05:30
|
|
|
expect(page).to have_content 'runner-offline'
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).to have_content 'runner-never-contacted'
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows correct runner when status matches' do
|
2022-06-21 17:19:12 +05:30
|
|
|
input_filtered_search_filter_is_only('Status', 'Online')
|
2021-09-30 23:02:18 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
expect(page).to have_link('All 2')
|
2022-03-02 08:16:31 +05:30
|
|
|
|
|
|
|
expect(page).to have_content 'runner-1'
|
|
|
|
expect(page).to have_content 'runner-2'
|
2022-06-21 17:19:12 +05:30
|
|
|
expect(page).not_to have_content 'runner-offline'
|
|
|
|
expect(page).not_to have_content 'runner-never-contacted'
|
2018-12-05 23:21:45 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows correct runner when status is selected and search term is entered' do
|
2022-06-21 17:19:12 +05:30
|
|
|
input_filtered_search_filter_is_only('Status', 'Online')
|
2022-03-02 08:16:31 +05:30
|
|
|
input_filtered_search_keys('runner-1')
|
2021-09-30 23:02:18 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).to have_link('All 1')
|
2021-09-30 23:02:18 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).to have_content 'runner-1'
|
|
|
|
expect(page).not_to have_content 'runner-2'
|
2022-06-21 17:19:12 +05:30
|
|
|
expect(page).not_to have_content 'runner-offline'
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).not_to have_content 'runner-never-contacted'
|
2018-12-05 23:21:45 +05:30
|
|
|
end
|
2021-12-11 22:18:48 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
it 'shows correct runner when status filter is entered' do
|
|
|
|
# use the string "Never" to avoid using space and trigger an early selection
|
|
|
|
input_filtered_search_filter_is_only('Status', 'Never')
|
2021-12-11 22:18:48 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).to have_link('All 1')
|
2021-12-11 22:18:48 +05:30
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).not_to have_content 'runner-1'
|
|
|
|
expect(page).not_to have_content 'runner-2'
|
|
|
|
expect(page).not_to have_content 'runner-paused'
|
|
|
|
expect(page).to have_content 'runner-never-contacted'
|
2021-12-11 22:18:48 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
within_runner_row(never_contacted.id) do
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).to have_selector '.badge', text: 'never contacted'
|
|
|
|
end
|
2021-12-11 22:18:48 +05:30
|
|
|
end
|
2022-07-23 23:45:48 +05:30
|
|
|
|
|
|
|
context 'when status does not match' do
|
|
|
|
before do
|
|
|
|
input_filtered_search_filter_is_only('Status', 'Stale')
|
|
|
|
end
|
|
|
|
|
|
|
|
it_behaves_like 'shows no runners found'
|
|
|
|
|
|
|
|
it 'shows no runner' do
|
|
|
|
expect(page).to have_link('All 0')
|
|
|
|
end
|
|
|
|
end
|
2018-12-05 23:21:45 +05:30
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
describe 'filter by type' do
|
|
|
|
before do
|
|
|
|
create(:ci_runner, :project, description: 'runner-project', projects: [project])
|
|
|
|
create(:ci_runner, :group, description: 'runner-group', groups: [group])
|
|
|
|
end
|
2018-12-05 23:21:45 +05:30
|
|
|
|
2021-12-11 22:18:48 +05:30
|
|
|
it '"All" tab is selected by default' do
|
|
|
|
visit admin_runners_path
|
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).to have_link('All 2')
|
|
|
|
expect(page).to have_link('Group 1')
|
|
|
|
expect(page).to have_link('Project 1')
|
|
|
|
|
2021-12-11 22:18:48 +05:30
|
|
|
page.within('[data-testid="runner-type-tabs"]') do
|
|
|
|
expect(page).to have_link('All', class: 'active')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
it 'shows correct runner when type matches' do
|
2018-12-05 23:21:45 +05:30
|
|
|
visit admin_runners_path
|
|
|
|
|
|
|
|
expect(page).to have_content 'runner-project'
|
|
|
|
expect(page).to have_content 'runner-group'
|
|
|
|
|
2021-12-11 22:18:48 +05:30
|
|
|
page.within('[data-testid="runner-type-tabs"]') do
|
|
|
|
click_on('Project')
|
|
|
|
|
|
|
|
expect(page).to have_link('Project', class: 'active')
|
|
|
|
end
|
2021-09-30 23:02:18 +05:30
|
|
|
|
2018-12-05 23:21:45 +05:30
|
|
|
expect(page).to have_content 'runner-project'
|
|
|
|
expect(page).not_to have_content 'runner-group'
|
|
|
|
end
|
|
|
|
|
2022-04-04 11:22:00 +05:30
|
|
|
it 'show the same counts after selecting another tab' do
|
|
|
|
visit admin_runners_path
|
|
|
|
|
|
|
|
page.within('[data-testid="runner-type-tabs"]') do
|
|
|
|
click_on('Project')
|
|
|
|
|
|
|
|
expect(page).to have_link('All 2')
|
|
|
|
expect(page).to have_link('Group 1')
|
|
|
|
expect(page).to have_link('Project 1')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-12-05 23:21:45 +05:30
|
|
|
it 'shows correct runner when type is selected and search term is entered' do
|
2021-09-30 23:02:18 +05:30
|
|
|
create(:ci_runner, :project, description: 'runner-2-project', projects: [project])
|
2018-12-05 23:21:45 +05:30
|
|
|
|
|
|
|
visit admin_runners_path
|
|
|
|
|
2021-12-11 22:18:48 +05:30
|
|
|
page.within('[data-testid="runner-type-tabs"]') do
|
|
|
|
click_on 'Project'
|
|
|
|
end
|
2018-12-05 23:21:45 +05:30
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
expect(page).to have_content 'runner-project'
|
|
|
|
expect(page).to have_content 'runner-2-project'
|
|
|
|
expect(page).not_to have_content 'runner-group'
|
|
|
|
|
|
|
|
input_filtered_search_keys('runner-project')
|
|
|
|
|
|
|
|
expect(page).to have_content 'runner-project'
|
|
|
|
expect(page).not_to have_content 'runner-2-project'
|
|
|
|
expect(page).not_to have_content 'runner-group'
|
2018-12-05 23:21:45 +05:30
|
|
|
end
|
2021-12-11 22:18:48 +05:30
|
|
|
|
|
|
|
it 'maintains the same filter when switching between runner types' do
|
|
|
|
create(:ci_runner, :project, description: 'runner-paused-project', active: false, projects: [project])
|
|
|
|
|
|
|
|
visit admin_runners_path
|
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
input_filtered_search_filter_is_only('Paused', 'No')
|
2021-12-11 22:18:48 +05:30
|
|
|
|
|
|
|
expect(page).to have_content 'runner-project'
|
|
|
|
expect(page).to have_content 'runner-group'
|
|
|
|
expect(page).not_to have_content 'runner-paused-project'
|
|
|
|
|
|
|
|
page.within('[data-testid="runner-type-tabs"]') do
|
|
|
|
click_on 'Project'
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(page).to have_content 'runner-project'
|
|
|
|
expect(page).not_to have_content 'runner-group'
|
|
|
|
expect(page).not_to have_content 'runner-paused-project'
|
|
|
|
end
|
2022-07-23 23:45:48 +05:30
|
|
|
|
|
|
|
context 'when type does not match' do
|
|
|
|
before do
|
|
|
|
visit admin_runners_path
|
|
|
|
page.within('[data-testid="runner-type-tabs"]') do
|
|
|
|
click_on 'Instance'
|
|
|
|
|
|
|
|
expect(page).to have_link('Instance', class: 'active')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it_behaves_like 'shows no runners found'
|
|
|
|
|
|
|
|
it 'shows no runner' do
|
|
|
|
expect(page).not_to have_content 'runner-project'
|
|
|
|
expect(page).not_to have_content 'runner-group'
|
|
|
|
end
|
|
|
|
end
|
2018-12-05 23:21:45 +05:30
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
describe 'filter by tag' do
|
|
|
|
before do
|
|
|
|
create(:ci_runner, :instance, description: 'runner-blue', tag_list: ['blue'])
|
|
|
|
create(:ci_runner, :instance, description: 'runner-red', tag_list: ['red'])
|
|
|
|
end
|
2019-07-07 11:18:12 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
it 'shows tags suggestions' do
|
|
|
|
visit admin_runners_path
|
|
|
|
|
|
|
|
open_filtered_search_suggestions('Tags')
|
|
|
|
|
|
|
|
page.within(search_bar_selector) do
|
|
|
|
expect(page).to have_content 'blue'
|
|
|
|
expect(page).to have_content 'red'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
it 'shows correct runner when tag matches' do
|
2019-07-07 11:18:12 +05:30
|
|
|
visit admin_runners_path
|
|
|
|
|
|
|
|
expect(page).to have_content 'runner-blue'
|
|
|
|
expect(page).to have_content 'runner-red'
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
input_filtered_search_filter_is_only('Tags', 'blue')
|
2019-07-07 11:18:12 +05:30
|
|
|
|
|
|
|
expect(page).to have_content 'runner-blue'
|
|
|
|
expect(page).not_to have_content 'runner-red'
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows correct runner when tag is selected and search term is entered' do
|
2021-09-30 23:02:18 +05:30
|
|
|
create(:ci_runner, :instance, description: 'runner-2-blue', tag_list: ['blue'])
|
2019-07-07 11:18:12 +05:30
|
|
|
|
|
|
|
visit admin_runners_path
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
input_filtered_search_filter_is_only('Tags', 'blue')
|
2019-07-07 11:18:12 +05:30
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
expect(page).to have_content 'runner-blue'
|
|
|
|
expect(page).to have_content 'runner-2-blue'
|
|
|
|
expect(page).not_to have_content 'runner-red'
|
2019-07-07 11:18:12 +05:30
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
input_filtered_search_keys('runner-2-blue')
|
2019-07-07 11:18:12 +05:30
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
expect(page).to have_content 'runner-2-blue'
|
|
|
|
expect(page).not_to have_content 'runner-blue'
|
|
|
|
expect(page).not_to have_content 'runner-red'
|
2019-07-07 11:18:12 +05:30
|
|
|
end
|
2022-07-23 23:45:48 +05:30
|
|
|
|
|
|
|
context 'when tag does not match' do
|
|
|
|
before do
|
|
|
|
visit admin_runners_path
|
|
|
|
input_filtered_search_filter_is_only('Tags', 'green')
|
|
|
|
end
|
|
|
|
|
|
|
|
it_behaves_like 'shows no runners found'
|
|
|
|
|
|
|
|
it 'shows no runner' do
|
|
|
|
expect(page).not_to have_content 'runner-blue'
|
|
|
|
end
|
|
|
|
end
|
2019-07-07 11:18:12 +05:30
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
it 'sorts by last contact date' do
|
|
|
|
create(:ci_runner, :instance, description: 'runner-1', created_at: '2018-07-12 15:37', contacted_at: '2018-07-12 15:37')
|
|
|
|
create(:ci_runner, :instance, description: 'runner-2', created_at: '2018-07-12 16:37', contacted_at: '2018-07-12 16:37')
|
2018-12-05 23:21:45 +05:30
|
|
|
|
|
|
|
visit admin_runners_path
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
within '[data-testid="runner-list"] tbody tr:nth-child(1)' do
|
2018-12-05 23:21:45 +05:30
|
|
|
expect(page).to have_content 'runner-2'
|
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
within '[data-testid="runner-list"] tbody tr:nth-child(2)' do
|
2018-12-05 23:21:45 +05:30
|
|
|
expect(page).to have_content 'runner-1'
|
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
click_on 'Created date' # Open "sort by" dropdown
|
|
|
|
click_on 'Last contact'
|
|
|
|
click_on 'Sort direction: Descending'
|
2018-12-05 23:21:45 +05:30
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
within '[data-testid="runner-list"] tbody tr:nth-child(1)' do
|
2018-12-05 23:21:45 +05:30
|
|
|
expect(page).to have_content 'runner-1'
|
|
|
|
end
|
|
|
|
|
2021-09-30 23:02:18 +05:30
|
|
|
within '[data-testid="runner-list"] tbody tr:nth-child(2)' do
|
2018-12-05 23:21:45 +05:30
|
|
|
expect(page).to have_content 'runner-2'
|
|
|
|
end
|
2017-09-10 17:25:29 +05:30
|
|
|
end
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|
2015-09-25 12:07:36 +05:30
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
context "when there are no runners" do
|
2015-09-25 12:07:36 +05:30
|
|
|
before do
|
2017-09-10 17:25:29 +05:30
|
|
|
visit admin_runners_path
|
2015-09-25 12:07:36 +05:30
|
|
|
end
|
|
|
|
|
2022-07-23 23:45:48 +05:30
|
|
|
it_behaves_like 'shows no runners registered'
|
2022-03-02 08:16:31 +05:30
|
|
|
|
|
|
|
it 'shows tabs with total counts equal to 0' do
|
|
|
|
expect(page).to have_link('All 0')
|
|
|
|
expect(page).to have_link('Instance 0')
|
|
|
|
expect(page).to have_link('Group 0')
|
|
|
|
expect(page).to have_link('Project 0')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when visiting outdated URLs" do
|
2022-06-21 17:19:12 +05:30
|
|
|
it 'updates ACTIVE runner status to paused=false' do
|
|
|
|
visit admin_runners_path('status[]': 'ACTIVE')
|
2021-12-11 22:18:48 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
expect(page).to have_current_path(admin_runners_path('paused[]': 'false') )
|
2021-12-11 22:18:48 +05:30
|
|
|
end
|
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
it 'updates PAUSED runner status to paused=true' do
|
|
|
|
visit admin_runners_path('status[]': 'PAUSED')
|
2021-09-04 01:27:46 +05:30
|
|
|
|
2022-06-21 17:19:12 +05:30
|
|
|
expect(page).to have_current_path(admin_runners_path('paused[]': 'true') )
|
2021-09-04 01:27:46 +05:30
|
|
|
end
|
|
|
|
end
|
2015-09-25 12:07:36 +05:30
|
|
|
end
|
|
|
|
|
2022-04-04 11:22:00 +05:30
|
|
|
describe "Runner show page", :js do
|
|
|
|
let(:runner) do
|
|
|
|
create(
|
|
|
|
:ci_runner,
|
|
|
|
description: 'runner-foo',
|
|
|
|
version: '14.0',
|
|
|
|
ip_address: '127.0.0.1',
|
|
|
|
tag_list: ['tag1']
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
|
|
|
visit admin_runner_path(runner)
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'runner show page breadcrumbs' do
|
|
|
|
it 'contains the current runner id and token' do
|
|
|
|
page.within '[data-testid="breadcrumb-links"]' do
|
2022-07-16 23:28:13 +05:30
|
|
|
expect(page.find('[data-testid="breadcrumb-current-link"]')).to have_link("##{runner.id} (#{runner.short_sha})")
|
2022-04-04 11:22:00 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows runner details' do
|
|
|
|
aggregate_failures do
|
|
|
|
expect(page).to have_content 'Description runner-foo'
|
|
|
|
expect(page).to have_content 'Last contact Never contacted'
|
|
|
|
expect(page).to have_content 'Version 14.0'
|
|
|
|
expect(page).to have_content 'IP Address 127.0.0.1'
|
|
|
|
expect(page).to have_content 'Configuration Runs untagged jobs'
|
|
|
|
expect(page).to have_content 'Maximum job timeout None'
|
|
|
|
expect(page).to have_content 'Tags tag1'
|
|
|
|
end
|
|
|
|
end
|
2022-07-16 23:28:13 +05:30
|
|
|
|
|
|
|
describe 'when a runner is deleted' do
|
|
|
|
before do
|
|
|
|
click_on 'Delete runner'
|
|
|
|
|
|
|
|
within_modal do
|
|
|
|
click_on 'Delete runner'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'deletes runner' do
|
|
|
|
expect(page.find('[data-testid="alert-success"]')).to have_content('deleted')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'redirects to runner list' do
|
|
|
|
expect(current_url).to match(admin_runners_path)
|
|
|
|
end
|
|
|
|
end
|
2022-04-04 11:22:00 +05:30
|
|
|
end
|
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
describe "Runner edit page" do
|
2022-07-16 23:28:13 +05:30
|
|
|
let(:runner) { create(:ci_runner, :project) }
|
2015-09-25 12:07:36 +05:30
|
|
|
|
|
|
|
before do
|
2018-12-05 23:21:45 +05:30
|
|
|
@project1 = create(:project)
|
|
|
|
@project2 = create(:project)
|
2022-03-02 08:16:31 +05:30
|
|
|
visit edit_admin_runner_path(runner)
|
|
|
|
|
|
|
|
wait_for_requests
|
2015-09-25 12:07:36 +05:30
|
|
|
end
|
|
|
|
|
2022-04-04 11:22:00 +05:30
|
|
|
describe 'runner edit page breadcrumbs' do
|
2022-03-02 08:16:31 +05:30
|
|
|
it 'contains the current runner id and token' do
|
2021-04-29 21:17:54 +05:30
|
|
|
page.within '[data-testid="breadcrumb-links"]' do
|
2022-03-02 08:16:31 +05:30
|
|
|
expect(page).to have_link("##{runner.id} (#{runner.short_sha})")
|
2022-07-16 23:28:13 +05:30
|
|
|
expect(page.find('[data-testid="breadcrumb-current-link"]')).to have_content("Edit")
|
2021-04-29 21:17:54 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-03-02 08:16:31 +05:30
|
|
|
describe 'runner header', :js do
|
|
|
|
it 'contains the runner status, type and id' do
|
2022-07-16 23:28:13 +05:30
|
|
|
expect(page).to have_content("never contacted specific Runner ##{runner.id} created")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'when a runner is updated', :js do
|
|
|
|
before do
|
|
|
|
click_on _('Save changes')
|
|
|
|
wait_for_requests
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'show success alert' do
|
|
|
|
expect(page.find('[data-testid="alert-success"]')).to have_content('saved')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'redirects to runner page' do
|
|
|
|
expect(current_url).to match(admin_runner_path(runner))
|
2021-02-22 17:27:13 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-09-25 12:07:36 +05:30
|
|
|
describe 'projects' do
|
2017-08-17 22:00:37 +05:30
|
|
|
it 'contains project names' do
|
2018-03-27 19:54:05 +05:30
|
|
|
expect(page).to have_content(@project1.full_name)
|
|
|
|
expect(page).to have_content(@project2.full_name)
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|
2015-09-25 12:07:36 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
describe 'search' do
|
|
|
|
before do
|
|
|
|
search_form = find('#runner-projects-search')
|
2015-12-23 02:04:40 +05:30
|
|
|
search_form.fill_in 'search', with: @project1.name
|
2015-09-25 12:07:36 +05:30
|
|
|
search_form.click_button 'Search'
|
|
|
|
end
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
it 'contains name of correct project' do
|
2018-03-27 19:54:05 +05:30
|
|
|
expect(page).to have_content(@project1.full_name)
|
|
|
|
expect(page).not_to have_content(@project2.full_name)
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|
2015-09-25 12:07:36 +05:30
|
|
|
end
|
2016-06-22 15:30:34 +05:30
|
|
|
|
|
|
|
describe 'enable/create' do
|
2016-08-24 12:49:21 +05:30
|
|
|
shared_examples 'assignable runner' do
|
|
|
|
it 'enables a runner for a project' do
|
2021-04-29 21:17:54 +05:30
|
|
|
within '[data-testid="unassigned-projects"]' do
|
2016-08-24 12:49:21 +05:30
|
|
|
click_on 'Enable'
|
|
|
|
end
|
|
|
|
|
2021-04-29 21:17:54 +05:30
|
|
|
assigned_project = page.find('[data-testid="assigned-projects"]')
|
2016-08-24 12:49:21 +05:30
|
|
|
|
2021-11-11 11:23:49 +05:30
|
|
|
expect(page).to have_content('Runner assigned to project.')
|
2016-08-24 12:49:21 +05:30
|
|
|
expect(assigned_project).to have_content(@project2.path)
|
|
|
|
end
|
2016-06-22 15:30:34 +05:30
|
|
|
end
|
|
|
|
|
2016-08-24 12:49:21 +05:30
|
|
|
context 'with specific runner' do
|
2018-11-08 19:23:39 +05:30
|
|
|
let(:runner) { create(:ci_runner, :project, projects: [@project1]) }
|
|
|
|
|
2016-08-24 12:49:21 +05:30
|
|
|
before do
|
2022-03-02 08:16:31 +05:30
|
|
|
visit edit_admin_runner_path(runner)
|
2016-06-22 15:30:34 +05:30
|
|
|
end
|
|
|
|
|
2016-08-24 12:49:21 +05:30
|
|
|
it_behaves_like 'assignable runner'
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'with locked runner' do
|
2018-11-08 19:23:39 +05:30
|
|
|
let(:runner) { create(:ci_runner, :project, projects: [@project1], locked: true) }
|
|
|
|
|
2016-08-24 12:49:21 +05:30
|
|
|
before do
|
2022-03-02 08:16:31 +05:30
|
|
|
visit edit_admin_runner_path(runner)
|
2016-08-24 12:49:21 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
it_behaves_like 'assignable runner'
|
|
|
|
end
|
2016-06-22 15:30:34 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
describe 'disable/destroy' do
|
2018-11-08 19:23:39 +05:30
|
|
|
let(:runner) { create(:ci_runner, :project, projects: [@project1]) }
|
|
|
|
|
2016-06-22 15:30:34 +05:30
|
|
|
before do
|
2022-03-02 08:16:31 +05:30
|
|
|
visit edit_admin_runner_path(runner)
|
2016-06-22 15:30:34 +05:30
|
|
|
end
|
|
|
|
|
2021-11-11 11:23:49 +05:30
|
|
|
it 'removed specific runner from project' do
|
2021-04-29 21:17:54 +05:30
|
|
|
within '[data-testid="assigned-projects"]' do
|
2016-06-22 15:30:34 +05:30
|
|
|
click_on 'Disable'
|
|
|
|
end
|
|
|
|
|
2021-04-29 21:17:54 +05:30
|
|
|
new_runner_project = page.find('[data-testid="unassigned-projects"]')
|
2016-06-22 15:30:34 +05:30
|
|
|
|
2021-11-11 11:23:49 +05:30
|
|
|
expect(page).to have_content('Runner unassigned from project.')
|
2016-06-22 15:30:34 +05:30
|
|
|
expect(new_runner_project).to have_content(@project1.path)
|
|
|
|
end
|
|
|
|
end
|
2015-09-25 12:07:36 +05:30
|
|
|
end
|
|
|
|
end
|