summaryrefslogtreecommitdiff
path: root/spec/lib/system_check/sidekiq_check_spec.rb
blob: c2f61e0e4b7cb0a2dc6b35158765ee26c1f27005 (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
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe SystemCheck::SidekiqCheck do
  describe '#multi_check' do
    def stub_ps_output(output)
      allow(Gitlab::Popen).to receive(:popen).with(%w(ps uxww)).and_return([output, nil])
    end

    def expect_check_output(matcher)
      expect { subject.multi_check }.to output(matcher).to_stdout
    end

    it 'fails when no worker processes are running' do
      stub_ps_output <<~PS
        root 2193947  0.9  0.1 146564 18104 ?        Ssl  17:34   0:00 ruby bin/sidekiq-cluster * -P ...
      PS

      expect_check_output include(
        'Running? ... no',
        'Please fix the error above and rerun the checks.'
      )
    end

    it 'fails when more than one cluster process is running' do
      stub_ps_output <<~PS
        root 2193947  0.9  0.1 146564 18104 ?        Ssl  17:34   0:00 ruby bin/sidekiq-cluster * -P ...
        root 2193948  0.9  0.1 146564 18104 ?        Ssl  17:34   0:00 ruby bin/sidekiq-cluster * -P ...
        root 2193955 92.2  3.1 4675972 515516 ?      Sl   17:34   0:13 sidekiq 5.2.9 ...
      PS

      expect_check_output include(
        'Running? ... yes',
        'Number of Sidekiq processes (cluster/worker) ... 2/1',
        'Please fix the error above and rerun the checks.'
      )
    end

    it 'succeeds when one cluster process and one or more worker processes are running' do
      stub_ps_output <<~PS
        root 2193947  0.9  0.1 146564 18104 ?        Ssl  17:34   0:00 ruby bin/sidekiq-cluster * -P ...
        root 2193955 92.2  3.1 4675972 515516 ?      Sl   17:34   0:13 sidekiq 5.2.9 ...
        root 2193956 92.2  3.1 4675972 515516 ?      Sl   17:34   0:13 sidekiq 5.2.9 ...
      PS

      expect_check_output <<~OUTPUT
        Running? ... yes
        Number of Sidekiq processes (cluster/worker) ... 1/2
      OUTPUT
    end

    # TODO: Running without a cluster is deprecated and will be removed in GitLab 14.0
    # https://gitlab.com/gitlab-org/gitlab/-/issues/323225
    context 'when running without a cluster' do
      it 'fails when more than one worker process is running' do
        stub_ps_output <<~PS
          root 2193955 92.2  3.1 4675972 515516 ?      Sl   17:34   0:13 sidekiq 5.2.9 ...
          root 2193956 92.2  3.1 4675972 515516 ?      Sl   17:34   0:13 sidekiq 5.2.9 ...
        PS

        expect_check_output include(
          'Running? ... yes',
          'Number of Sidekiq processes (cluster/worker) ... 0/2',
          'Please fix the error above and rerun the checks.'
        )
      end

      it 'succeeds when one worker process is running' do
        stub_ps_output <<~PS
          root 2193955 92.2  3.1 4675972 515516 ?      Sl   17:34   0:13 sidekiq 5.2.9 ...
        PS

        expect_check_output <<~OUTPUT
          Running? ... yes
          Number of Sidekiq processes (cluster/worker) ... 0/1
        OUTPUT
      end
    end
  end
end