diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2014-05-19 10:56:08 +0200 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2014-05-19 10:56:08 +0200 |
commit | dc20f7d4d40648e9a5af999a6436a5130ddad607 (patch) | |
tree | 1adac42a96f52fd3e4d67edffd1412e5515b0fb7 /test | |
parent | c334bea36228319b3f624443f303447e48e29f3d (diff) | |
parent | e06e64efd3ebf6e3351cd490f55273bd2e756b0b (diff) | |
download | rails-dc20f7d4d40648e9a5af999a6436a5130ddad607.tar.gz rails-dc20f7d4d40648e9a5af999a6436a5130ddad607.tar.bz2 rails-dc20f7d4d40648e9a5af999a6436a5130ddad607.zip |
Merge branch 'master' of github.com:rails/activejob
Diffstat (limited to 'test')
-rw-r--r-- | test/adapters/delayed_job.rb | 6 | ||||
-rw-r--r-- | test/cases/adapter_test.rb | 5 | ||||
-rw-r--r-- | test/helper.rb | 2 | ||||
-rw-r--r-- | test/support/delayed_job/delayed/backend/test.rb | 113 | ||||
-rw-r--r-- | test/support/delayed_job/delayed/serialization/test.rb | 0 |
5 files changed, 125 insertions, 1 deletions
diff --git a/test/adapters/delayed_job.rb b/test/adapters/delayed_job.rb new file mode 100644 index 0000000000..2055a6b6e6 --- /dev/null +++ b/test/adapters/delayed_job.rb @@ -0,0 +1,6 @@ +require 'delayed_job' +$LOAD_PATH << File.dirname(__FILE__) + "/../support/delayed_job" + +Delayed::Worker.delay_jobs = false +Delayed::Worker.backend = :test +ActiveJob::Base.adapter = :delayed_job diff --git a/test/cases/adapter_test.rb b/test/cases/adapter_test.rb index f0ff2dfed2..cdc601b06a 100644 --- a/test/cases/adapter_test.rb +++ b/test/cases/adapter_test.rb @@ -25,6 +25,11 @@ class AdapterTest < ActiveSupport::TestCase assert_equal ActiveJob::QueueAdapters::SuckerPunchAdapter, ActiveJob::Base.queue_adapter end + test 'should load delayed_job adapter' do + ActiveJob::Base.adapter = :delayed_job + assert_equal ActiveJob::QueueAdapters::DelayedJobAdapter, ActiveJob::Base.queue_adapter + end + def teardown ActiveJob::Base.queue_adapter = @old_adapter end diff --git a/test/helper.rb b/test/helper.rb index df0a2a53f8..fc3e2642df 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -1,7 +1,7 @@ require 'bundler' Bundler.setup -$LOAD_PATH << File.dirname(__FILE__ + "/../lib") +$LOAD_PATH << File.dirname(__FILE__) + "/../lib" require 'active_job' require "adapters/#{ENV['AJADAPTER'] || 'inline'}" diff --git a/test/support/delayed_job/delayed/backend/test.rb b/test/support/delayed_job/delayed/backend/test.rb new file mode 100644 index 0000000000..b50ed36fc2 --- /dev/null +++ b/test/support/delayed_job/delayed/backend/test.rb @@ -0,0 +1,113 @@ +#copied from https://github.com/collectiveidea/delayed_job/blob/master/spec/delayed/backend/test.rb +require 'ostruct' + +# An in-memory backend suitable only for testing. Tries to behave as if it were an ORM. +module Delayed + module Backend + module Test + class Job + attr_accessor :id + attr_accessor :priority + attr_accessor :attempts + attr_accessor :handler + attr_accessor :last_error + attr_accessor :run_at + attr_accessor :locked_at + attr_accessor :locked_by + attr_accessor :failed_at + attr_accessor :queue + + include Delayed::Backend::Base + + cattr_accessor :id + self.id = 0 + + def initialize(hash = {}) + self.attempts = 0 + self.priority = 0 + self.id = (self.class.id += 1) + hash.each{|k,v| send(:"#{k}=", v)} + end + + @jobs = [] + def self.all + @jobs + end + + def self.count + all.size + end + + def self.delete_all + all.clear + end + + def self.create(attrs = {}) + new(attrs).tap do |o| + o.save + end + end + + def self.create!(*args); create(*args); end + + def self.clear_locks!(worker_name) + all.select{|j| j.locked_by == worker_name}.each {|j| j.locked_by = nil; j.locked_at = nil} + end + + # Find a few candidate jobs to run (in case some immediately get locked by others). + def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time) + jobs = all.select do |j| + j.run_at <= db_time_now && + (j.locked_at.nil? || j.locked_at < db_time_now - max_run_time || j.locked_by == worker_name) && + !j.failed? + end + + jobs = jobs.select{|j| Worker.queues.include?(j.queue)} if Worker.queues.any? + jobs = jobs.select{|j| j.priority >= Worker.min_priority} if Worker.min_priority + jobs = jobs.select{|j| j.priority <= Worker.max_priority} if Worker.max_priority + jobs.sort_by{|j| [j.priority, j.run_at]}[0..limit-1] + end + + # Lock this job for this worker. + # Returns true if we have the lock, false otherwise. + def lock_exclusively!(max_run_time, worker) + now = self.class.db_time_now + if locked_by != worker + # We don't own this job so we will update the locked_by name and the locked_at + self.locked_at = now + self.locked_by = worker + end + + return true + end + + def self.db_time_now + Time.current + end + + def update_attributes(attrs = {}) + attrs.each{|k,v| send(:"#{k}=", v)} + save + end + + def destroy + self.class.all.delete(self) + end + + def save + self.run_at ||= Time.current + + self.class.all << self unless self.class.all.include?(self) + true + end + + def save!; save; end + + def reload + reset + self + end + end + end + end +end diff --git a/test/support/delayed_job/delayed/serialization/test.rb b/test/support/delayed_job/delayed/serialization/test.rb new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/support/delayed_job/delayed/serialization/test.rb |