diff options
Diffstat (limited to 'spec/workers/ci/runners')
-rw-r--r-- | spec/workers/ci/runners/process_runner_version_update_worker_spec.rb | 48 | ||||
-rw-r--r-- | spec/workers/ci/runners/reconcile_existing_runner_versions_cron_worker_spec.rb | 45 |
2 files changed, 93 insertions, 0 deletions
diff --git a/spec/workers/ci/runners/process_runner_version_update_worker_spec.rb b/spec/workers/ci/runners/process_runner_version_update_worker_spec.rb new file mode 100644 index 00000000000..ff67266c3e8 --- /dev/null +++ b/spec/workers/ci/runners/process_runner_version_update_worker_spec.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Ci::Runners::ProcessRunnerVersionUpdateWorker do + subject(:worker) { described_class.new } + + describe '#perform' do + let(:version) { '1.0.0' } + let(:job_args) { version } + + include_examples 'an idempotent worker' do + subject(:perform_twice) { perform_multiple(job_args, worker: worker, exec_times: 2) } + + let(:service) { ::Ci::Runners::ProcessRunnerVersionUpdateService.new(version) } + let(:available_runner_releases) do + %w[1.0.0 1.0.1] + end + + before do + allow(Ci::Runners::ProcessRunnerVersionUpdateService).to receive(:new).and_return(service) + allow(service).to receive(:execute).and_call_original + + url = ::Gitlab::CurrentSettings.current_application_settings.public_runner_releases_url + + WebMock.stub_request(:get, url).to_return( + body: available_runner_releases.map { |v| { name: v } }.to_json, + status: 200, + headers: { 'Content-Type' => 'application/json' } + ) + end + + it 'logs the service result', :aggregate_failures do + perform_twice + + expect(Ci::Runners::ProcessRunnerVersionUpdateService).to have_received(:new).twice + expect(service).to have_received(:execute).twice + expect(worker.logging_extras).to eq( + { + 'extra.ci_runners_process_runner_version_update_worker.status' => :success, + 'extra.ci_runners_process_runner_version_update_worker.message' => nil, + 'extra.ci_runners_process_runner_version_update_worker.upgrade_status' => 'recommended' + } + ) + end + end + end +end diff --git a/spec/workers/ci/runners/reconcile_existing_runner_versions_cron_worker_spec.rb b/spec/workers/ci/runners/reconcile_existing_runner_versions_cron_worker_spec.rb new file mode 100644 index 00000000000..1292df62ce5 --- /dev/null +++ b/spec/workers/ci/runners/reconcile_existing_runner_versions_cron_worker_spec.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Ci::Runners::ReconcileExistingRunnerVersionsCronWorker do + subject(:worker) { described_class.new } + + describe '#perform' do + context 'when scheduled by cronjob' do + it 'reschedules itself' do + expect(described_class).to(receive(:perform_in).with(a_value_between(0, 12.hours.in_seconds), false)) + expect(::Ci::Runners::ReconcileExistingRunnerVersionsService).not_to receive(:new) + + worker.perform + end + end + + context 'when self-scheduled' do + include_examples 'an idempotent worker' do + subject(:perform) { perform_multiple(false, worker: worker) } + + it 'executes the service' do + expect_next_instance_of(Ci::Runners::ReconcileExistingRunnerVersionsService) do |service| + expect(service).to receive(:execute).and_return(ServiceResponse.success) + end.exactly(worker_exec_times) + + perform + end + end + + it 'logs the service result' do + expect_next_instance_of(Ci::Runners::ReconcileExistingRunnerVersionsService) do |service| + expect(service).to receive(:execute) + .and_return(ServiceResponse.success(payload: { some_job_result_key: 'some_value' })) + end + + worker.perform(false) + + expect(worker.logging_extras).to eq({ + 'extra.ci_runners_reconcile_existing_runner_versions_cron_worker.some_job_result_key' => 'some_value' + }) + end + end + end +end |