summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2017-01-19 23:31:03 +0100
committerKamil Trzcinski <ayufan@ayufan.eu>2017-01-19 23:31:03 +0100
commit31af6be076635e6c6936564558bb977740d39eb0 (patch)
tree64cd70414baef55935f3e5bc360d7dd27d692307
parent1c7eb963f5e9b5992e55a3dd0a025f019d72c84b (diff)
downloadgitlab-ce-31af6be076635e6c6936564558bb977740d39eb0.tar.gz
Fix specs
-rw-r--r--app/models/ci/runner.rb12
-rw-r--r--app/services/ci/update_build_queue_service.rb2
-rw-r--r--lib/api/helpers.rb2
-rw-r--r--spec/models/ci/runner_spec.rb33
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