From 31af6be076635e6c6936564558bb977740d39eb0 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Thu, 19 Jan 2017 23:31:03 +0100 Subject: [PATCH] Fix specs --- app/models/ci/runner.rb | 12 +++++-- app/services/ci/update_build_queue_service.rb | 2 +- lib/api/helpers.rb | 2 +- spec/models/ci/runner_spec.rb | 33 ++++++++++++++++--- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index d13e54fcc16..6e58a1878c8 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -22,7 +22,7 @@ module Ci scope :online, ->() { where('contacted_at > ?', LAST_CONTACT_TIME) } scope :ordered, ->() { order(id: :desc) } - after_save :tick_runner_queue + after_save :tick_runner_queue, if: :form_editable_changed? scope :owned_or_shared, ->(project_id) do joins('LEFT JOIN ci_runner_projects ON ci_runner_projects.runner_id = ci_runners.id') @@ -126,14 +126,14 @@ module Ci end def tick_runner_queue - new_update = Time.new.inspect + new_update = SecureRandom.hex Gitlab::Redis.with { |redis| redis.set(runner_queue_key, new_update, ex: RUNNER_QUEUE_EXPIRY_TIME) } new_update end def ensure_runner_queue_value Gitlab::Redis.with do |redis| - value = Time.new.inspect + value = SecureRandom.hex redis.set(runner_queue_key, value, ex: RUNNER_QUEUE_EXPIRY_TIME, nx: true) redis.get(runner_queue_key) end @@ -149,6 +149,12 @@ module Ci "runner:build_queue:#{self.token}" end + def form_editable_changed? + FORM_EDITABLE.any? do |editable| + public_send("#{editable}_changed?") + end + end + def tag_constraints unless has_tags? || run_untagged? errors.add(:tags_list, diff --git a/app/services/ci/update_build_queue_service.rb b/app/services/ci/update_build_queue_service.rb index 704b872ddd0..2e901016666 100644 --- a/app/services/ci/update_build_queue_service.rb +++ b/app/services/ci/update_build_queue_service.rb @@ -1,7 +1,7 @@ module Ci class UpdateBuildQueueService def execute(build) - build.project.runners.select do |runner| + build.project.runners.each do |runner| if runner.can_pick?(build) runner.tick_runner_queue end diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index 49c5f0652ab..6b81fbf294e 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -226,7 +226,7 @@ module API end def render_api_error!(message, status) - error!({ 'message' => message }, status, header) + error!({ 'message' => message }, status) end def handle_api_exception(exception) diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb index 06eaa6d04d9..2b856ca7af7 100644 --- a/spec/models/ci/runner_spec.rb +++ b/spec/models/ci/runner_spec.rb @@ -277,21 +277,44 @@ describe Ci::Runner, models: true do it 'sets a new last_update value when it is called the first time' do last_update = runner.ensure_runner_queue_value - expect_value_in_redis(last_update) + expect_value_in_redis.to eq(last_update) end it 'does not change if it is not expired and called again' do last_update = runner.ensure_runner_queue_value expect(runner.ensure_runner_queue_value).to eq(last_update) - expect_value_in_redis(last_update) + expect_value_in_redis.to eq(last_update) end - def expect_value_in_redis(last_update) + context 'updates runner queue after changing editable value' do + let!(:last_update) { runner.ensure_runner_queue_value } + + before do + runner.update(description: 'new runner') + end + + it 'sets a new last_update value' do + expect_value_in_redis.not_to eq(last_update) + end + end + + context 'does not update runner value after save' do + let!(:last_update) { runner.ensure_runner_queue_value } + + before do + runner.touch + end + + it 'has an old last_update value' do + expect_value_in_redis.to eq(last_update) + end + end + + def expect_value_in_redis Gitlab::Redis.with do |redis| runner_queue_key = runner.send(:runner_queue_key) - - expect(redis.get(runner_queue_key)).to eq(last_update) + expect(redis.get(runner_queue_key)) end end end