Welcome to mirror list, hosted at ThFree Co, Russian Federation.

runner_instructions_spec.rb « ci « gitlab « lib « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f872c631a5023e0bb1aa724e73f5c066d52394af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Gitlab::Ci::RunnerInstructions do
  using RSpec::Parameterized::TableSyntax

  let(:params) { {} }

  describe 'OS' do
    Gitlab::Ci::RunnerInstructions::OS.each do |name, subject|
      context name do
        it 'has the required fields' do
          expect(subject).to have_key(:human_readable_name)
          expect(subject).to have_key(:download_locations)
          expect(subject).to have_key(:install_script_template_path)
          expect(subject).to have_key(:runner_executable)
        end

        it 'has a valid script' do
          expect(File.read(subject[:install_script_template_path]).length).not_to eq(0)
        end
      end
    end
  end

  describe 'OTHER_ENVIRONMENTS' do
    Gitlab::Ci::RunnerInstructions::OTHER_ENVIRONMENTS.each do |name, subject|
      context name do
        it 'has the required fields' do
          expect(subject).to have_key(:human_readable_name)
          expect(subject).to have_key(:installation_instructions_url)
        end
      end
    end
  end

  describe '#install_script' do
    subject { described_class.new(**params) }

    context 'invalid params' do
      where(:current_params, :expected_error_message) do
        { os: nil, arch: nil }                        | 'Missing OS'
        { os: 'linux', arch: nil }                    | 'Missing arch'
        { os: nil, arch: 'amd64' }                    | 'Missing OS'
        { os: 'non_existing_os', arch: 'amd64' }      | 'Invalid OS'
        { os: 'linux', arch: 'non_existing_arch' }    | 'Architecture not found for OS'
        { os: 'windows', arch: 'non_existing_arch' }  | 'Architecture not found for OS'
      end

      with_them do
        let(:params) { current_params }

        it 'raises argument error' do
          result = subject.install_script

          expect(result).to be_nil
          expect(subject.errors).to include(expected_error_message)
        end
      end
    end

    context 'with valid params' do
      where(:os, :arch) do
        'linux'   | 'amd64'
        'linux'   | '386'
        'linux'   | 'arm'
        'linux'   | 'arm64'
        'windows' | 'amd64'
        'windows' | '386'
        'osx'     | 'amd64'
      end

      with_them do
        let(:params) { { os: os, arch: arch } }

        around do |example|
          # puma in production does not run from Rails.root, ensure file loading does not assume this
          Dir.chdir(Rails.root.join('tmp').to_s) do
            example.run
          end
        end

        it 'returns string containing correct params' do
          result = subject.install_script

          expect(result).to be_a(String)

          if os == 'osx'
            expect(result).to include("darwin-#{arch}")
          else
            expect(result).to include("#{os}-#{arch}")
          end
        end
      end
    end
  end

  describe '#register_command' do
    let(:params) { { os: 'linux', arch: 'foo' } }

    where(:commands) do
      Gitlab::Ci::RunnerInstructions::OS.map do |name, values|
        { name => values[:runner_executable] }
      end
    end

    context 'instance' do
      subject { described_class.new(**params) }

      with_them do
        let(:params) { { os: commands.each_key.first, arch: 'foo' } }

        it 'have correct configurations' do
          result = subject.register_command

          expect(result).to include("#{commands[commands.each_key.first]} register")
          expect(result).to include("--registration-token $REGISTRATION_TOKEN")
          expect(result).to include("--url #{Gitlab::Routing.url_helpers.root_url(only_path: false)}")
        end
      end
    end
  end
end