Skip to content

Commit

Permalink
rescue argument error when deserializing job
Browse files Browse the repository at this point in the history
  • Loading branch information
bkeepers committed Nov 12, 2010
1 parent d5beb84 commit b64962d
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 7 deletions.
2 changes: 1 addition & 1 deletion lib/delayed/backend/base.rb
Expand Up @@ -67,7 +67,7 @@ def payload_object=(object)

def payload_object
@payload_object ||= YAML.load(self.handler)
rescue TypeError, LoadError, NameError => e
rescue TypeError, LoadError, NameError, ArgumentError => e
raise DeserializationError,
"Job failed to load: #{e.message}. Try to manually require the required file. Handler: #{handler.inspect}"
end
Expand Down
18 changes: 12 additions & 6 deletions lib/delayed/backend/shared_spec.rb
Expand Up @@ -125,6 +125,12 @@ def create_job(opts = {})
job = described_class.new :handler => "--- !ruby/struct:StructThatDoesNotExist {}"
lambda { job.payload_object }.should raise_error(Delayed::Backend::DeserializationError)
end

it "should raise a DeserializationError when the YAML.load raises argument error" do
job = described_class.find(create_job.id)
YAML.should_receive(:load).and_raise(ArgumentError)
lambda { job.payload_object }.should raise_error(Delayed::Backend::DeserializationError)
end
end

describe "find_available" do
Expand Down Expand Up @@ -294,7 +300,7 @@ def create_job(opts = {})
@job.locked_at.should be_nil
end
end

context "large handler" do
before do
text = "Lorem ipsum dolor sit amet. " * 1000
Expand Down Expand Up @@ -345,7 +351,7 @@ def create_job(opts = {})
Delayed::Worker.max_run_time = old_max_run_time
end
end

end

context "worker prioritization" do
Expand Down Expand Up @@ -403,7 +409,7 @@ def create_job(opts = {})
# reset defaults
Delayed::Worker.destroy_failed_jobs = true
Delayed::Worker.max_attempts = 25

@job = Delayed::Job.enqueue(ErrorJob.new)
end

Expand All @@ -426,15 +432,15 @@ def create_job(opts = {})
@job.run_at.should > Delayed::Job.db_time_now - 10.minutes
@job.run_at.should < Delayed::Job.db_time_now + 10.minutes
end

it 'should re-schedule with handler provided time if present' do
@job = Delayed::Job.enqueue(CustomRescheduleJob.new(99.minutes))
@worker.run(@job)
@job.reload

(Delayed::Job.db_time_now + 99.minutes - @job.run_at).abs.should < 1
end

it "should not fail when the triggered error doesn't have a message" do
error_with_nil_message = StandardError.new
error_with_nil_message.stub!(:message).and_return nil
Expand Down

0 comments on commit b64962d

Please sign in to comment.