From 4096c477a9c3aa441efcd74b5997287ae2995681 Mon Sep 17 00:00:00 2001 From: Zachary Belzer Date: Thu, 18 Feb 2010 14:58:02 -0600 Subject: [PATCH] Updates to the backend test structure * Moved specific backend tests to a backend directory * Conditionally testing mongo adapter * Renamed mongo to mongo_mapper since there are other mongo ORMs --- README.textile | 2 +- Rakefile | 2 +- .../backend/{mongo.rb => mongo_mapper.rb} | 10 ++-- lib/delayed/performable_method.rb | 2 +- lib/delayed_job.rb | 11 +++- .../active_record_job_spec.rb} | 1 + .../mongo_mapper_job_spec.rb} | 13 ++--- spec/{ => backend}/shared_backend_spec.rb | 0 spec/delayed_method_spec.rb | 6 +- spec/performable_method_spec.rb | 5 +- spec/setup/active_record.rb | 33 +++++++++++ spec/setup/mongo_mapper.rb | 13 +++++ spec/spec_helper.rb | 56 ++++++++----------- spec/worker_spec.rb | 2 +- 14 files changed, 98 insertions(+), 58 deletions(-) rename lib/delayed/backend/{mongo.rb => mongo_mapper.rb} (96%) rename spec/{job_spec.rb => backend/active_record_job_spec.rb} (96%) rename spec/{mongo_job_spec.rb => backend/mongo_mapper_job_spec.rb} (84%) rename spec/{ => backend}/shared_backend_spec.rb (100%) create mode 100644 spec/setup/active_record.rb create mode 100644 spec/setup/mongo_mapper.rb diff --git a/README.textile b/README.textile index 21471cfeb..5558c92a1 100644 --- a/README.textile +++ b/README.textile @@ -51,7 +51,7 @@ You can change the backend in an initializer:
 # config/initializers/delayed_job.rb
-Delayed::Worker.backend = :mongo
+Delayed::Worker.backend = :mongo_mapper
 
h2. Upgrading to 1.8 diff --git a/Rakefile b/Rakefile index 5fdeab0a4..2ecc61ef9 100644 --- a/Rakefile +++ b/Rakefile @@ -32,7 +32,7 @@ task :default => :spec desc 'Run the specs' Spec::Rake::SpecTask.new(:spec) do |t| t.libs << 'lib' - t.pattern = 'spec/**/*_spec.rb' + t.pattern = 'spec/*_spec.rb' t.verbose = true end task :spec => :check_dependencies diff --git a/lib/delayed/backend/mongo.rb b/lib/delayed/backend/mongo_mapper.rb similarity index 96% rename from lib/delayed/backend/mongo.rb rename to lib/delayed/backend/mongo_mapper.rb index 0128825b7..02546000f 100644 --- a/lib/delayed/backend/mongo.rb +++ b/lib/delayed/backend/mongo_mapper.rb @@ -1,6 +1,6 @@ require 'mongo_mapper' -module MongoMapper +module ::MongoMapper module Document module ClassMethods def load_for_delayed_job(id) @@ -18,9 +18,9 @@ def dump_for_delayed_job module Delayed module Backend - module Mongo + module MongoMapper class Job - include MongoMapper::Document + include ::MongoMapper::Document include Delayed::Backend::Base set_collection_name 'delayed_jobs' @@ -37,7 +37,7 @@ class Job before_save :set_default_run_at def self.db_time_now - MongoMapper.time_class.now.utc + ::MongoMapper.time_class.now.utc end def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time) @@ -107,4 +107,4 @@ def set_default_run_at end end end -end \ No newline at end of file +end diff --git a/lib/delayed/performable_method.rb b/lib/delayed/performable_method.rb index 0a3e1690a..ba418299e 100644 --- a/lib/delayed/performable_method.rb +++ b/lib/delayed/performable_method.rb @@ -59,4 +59,4 @@ def dump(obj) end end end -end \ No newline at end of file +end diff --git a/lib/delayed_job.rb b/lib/delayed_job.rb index 22b089c6e..75cdb845c 100644 --- a/lib/delayed_job.rb +++ b/lib/delayed_job.rb @@ -1,3 +1,5 @@ +require 'active_support' + require File.dirname(__FILE__) + '/delayed/message_sending' require File.dirname(__FILE__) + '/delayed/performable_method' require File.dirname(__FILE__) + '/delayed/backend/base' @@ -6,7 +8,14 @@ Object.send(:include, Delayed::MessageSending) Module.send(:include, Delayed::MessageSending::ClassMethods) -Delayed::Worker.backend = :active_record +if defined?(ActiveRecord) + Delayed::Worker.backend = :active_record +elsif defined?(MongoMapper) + Delayed::Worker.backend = :mongo_mapper +else + $stderr.puts "Could not decide on a backend, defaulting to active_record" + Delayed::Worker.backend = :active_record +end if defined?(Merb::Plugins) Merb::Plugins.add_rakefiles File.dirname(__FILE__) / 'delayed' / 'tasks' diff --git a/spec/job_spec.rb b/spec/backend/active_record_job_spec.rb similarity index 96% rename from spec/job_spec.rb rename to spec/backend/active_record_job_spec.rb index 915caac16..103cf0c8d 100644 --- a/spec/job_spec.rb +++ b/spec/backend/active_record_job_spec.rb @@ -1,4 +1,5 @@ require 'spec_helper' +require 'delayed/backend/active_record' describe Delayed::Job do before(:all) do diff --git a/spec/mongo_job_spec.rb b/spec/backend/mongo_mapper_job_spec.rb similarity index 84% rename from spec/mongo_job_spec.rb rename to spec/backend/mongo_mapper_job_spec.rb index 7f5561d82..ad8b807ab 100644 --- a/spec/mongo_job_spec.rb +++ b/spec/backend/mongo_mapper_job_spec.rb @@ -1,13 +1,10 @@ require 'spec_helper' -require 'delayed/backend/mongo' +require 'delayed/backend/mongo_mapper' -MongoMapper.connection = Mongo::Connection.new nil, nil, :logger => ActiveRecord::Base.logger -MongoMapper.database = 'delayed_job' - -describe Delayed::Backend::Mongo::Job do +describe Delayed::Backend::MongoMapper::Job do before(:all) do - @backend = Delayed::Backend::Mongo::Job + @backend = Delayed::Backend::MongoMapper::Job end before(:each) do @@ -24,7 +21,7 @@ def read(story) end class MongoStory - include MongoMapper::Document + include ::MongoMapper::Document key :text, String def tell @@ -59,4 +56,4 @@ def tell job.payload_object.perform.should == 'Epilog: Once upon a timeā€¦' end end -end \ No newline at end of file +end diff --git a/spec/shared_backend_spec.rb b/spec/backend/shared_backend_spec.rb similarity index 100% rename from spec/shared_backend_spec.rb rename to spec/backend/shared_backend_spec.rb diff --git a/spec/delayed_method_spec.rb b/spec/delayed_method_spec.rb index 1914637ac..a97e02f31 100644 --- a/spec/delayed_method_spec.rb +++ b/spec/delayed_method_spec.rb @@ -27,7 +27,7 @@ story.whatever(1, 5) Delayed::Job.count.should == 1 - job = Delayed::Job.find(:first) + job = Delayed::Job.first job.payload_object.class.should == Delayed::PerformableMethod job.payload_object.method.should == :whatever_without_send_later job.payload_object.args.should == [1, 5] @@ -42,9 +42,9 @@ end it "should schedule the job in the future" do - time = 1.hour.from_now + time = 1.hour.from_now.utc.to_time job = "string".send_at(time, :length) - job.run_at.should == time + job.run_at.to_i.should == time.to_i end it "should store payload as PerformableMethod" do diff --git a/spec/performable_method_spec.rb b/spec/performable_method_spec.rb index b3499a06e..1c2dac8c2 100644 --- a/spec/performable_method_spec.rb +++ b/spec/performable_method_spec.rb @@ -39,7 +39,4 @@ def read(story) p.args.should == ["LOAD;Story;#{story.id}"] p.perform.should == 'Epilog: Once upon...' end - - - -end \ No newline at end of file +end diff --git a/spec/setup/active_record.rb b/spec/setup/active_record.rb new file mode 100644 index 000000000..614edf682 --- /dev/null +++ b/spec/setup/active_record.rb @@ -0,0 +1,33 @@ +require 'active_record' + +ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:') +ActiveRecord::Base.logger = DELAYED_JOB_LOGGER +ActiveRecord::Migration.verbose = false + +ActiveRecord::Schema.define do + + create_table :delayed_jobs, :force => true do |table| + table.integer :priority, :default => 0 + table.integer :attempts, :default => 0 + table.text :handler + table.string :last_error + table.datetime :run_at + table.datetime :locked_at + table.string :locked_by + table.datetime :failed_at + table.timestamps + end + + create_table :stories, :force => true do |table| + table.string :text + end + +end + +# Purely useful for test cases... +class Story < ActiveRecord::Base + def tell; text; end + def whatever(n, _); tell*n; end + + handle_asynchronously :whatever +end diff --git a/spec/setup/mongo_mapper.rb b/spec/setup/mongo_mapper.rb new file mode 100644 index 000000000..e1a0b24ff --- /dev/null +++ b/spec/setup/mongo_mapper.rb @@ -0,0 +1,13 @@ +MongoMapper.connection = Mongo::Connection.new nil, nil, :logger => DELAYED_JOB_LOGGER +MongoMapper.database = 'delayed_job' + +unless defined?(Story) + class Story + include ::MongoMapper::Document + def tell; text; end + def whatever(n, _); tell*n; end + def self.count; end + + handle_asynchronously :whatever + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 5c30c4788..b4b876170 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -2,42 +2,32 @@ require 'rubygems' require 'spec' -require 'active_record' -require 'delayed_job' - -logger = Logger.new('/tmp/dj.log') -ActiveRecord::Base.logger = logger -Delayed::Worker.logger = logger -ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:') -ActiveRecord::Migration.verbose = false - -ActiveRecord::Schema.define do - - create_table :delayed_jobs, :force => true do |table| - table.integer :priority, :default => 0 - table.integer :attempts, :default => 0 - table.text :handler - table.string :last_error - table.datetime :run_at - table.datetime :locked_at - table.string :locked_by - table.datetime :failed_at - table.timestamps - end - - create_table :stories, :force => true do |table| - table.string :text +require 'logger' + +backends_available = [] +%w(active_record mongo_mapper).each do |backend| + begin + require backend + backends_available << backend + rescue LoadError => e + $stderr.puts "The backend '#{backend}' is not available. Skipping tests" end - end -# Purely useful for test cases... -class Story < ActiveRecord::Base - def tell; text; end - def whatever(n, _); tell*n; end - - handle_asynchronously :whatever +if backends_available.empty? + raise LoadError, "Cannot run delayed_job specs. No backends available" end +require 'delayed_job' require 'sample_jobs' -require 'shared_backend_spec' \ No newline at end of file +require 'backend/shared_backend_spec' + +DELAYED_JOB_LOGGER = Logger.new('/tmp/dj.log') +Delayed::Worker.logger = DELAYED_JOB_LOGGER + +DEFAULT_BACKEND = backends_available.first.to_sym + +backends_available.each do |backend| + require "setup/#{backend}" + require "backend/#{backend}_job_spec" +end diff --git a/spec/worker_spec.rb b/spec/worker_spec.rb index 86c20a746..8937063e3 100644 --- a/spec/worker_spec.rb +++ b/spec/worker_spec.rb @@ -11,7 +11,7 @@ def job_create(opts = {}) before(:each) do # Make sure backend is set to active record - Delayed::Worker.backend = :active_record + Delayed::Worker.backend = DEFAULT_BACKEND @worker = Delayed::Worker.new(:max_priority => nil, :min_priority => nil, :quiet => true)