test/job_test.rb in rocketjob-1.3.0 vs test/job_test.rb in rocketjob-2.0.0.rc1

- old
+ new

@@ -1,80 +1,27 @@ require_relative 'test_helper' -require_relative 'jobs/test_job' # Unit Test for RocketJob::Job class JobTest < Minitest::Test + + class SimpleJob < RocketJob::Job + def perform + end + end + describe RocketJob::Job do before do - @worker = RocketJob::Worker.new - @worker.started @description = 'Hello World' - @arguments = [1] - @job = Jobs::TestJob.new( - description: @description, - arguments: @arguments, - destroy_on_complete: false - ) - @job2 = Jobs::TestJob.new( - description: "#{@description} 2", - arguments: @arguments, - destroy_on_complete: false, - priority: 52 - ) + @job = SimpleJob.new(description: @description) + @job2 = SimpleJob.new(description: @description, priority: 52) end after do @job.destroy if @job && !@job.new_record? @job2.destroy if @job2 && !@job2.new_record? end - describe '.config' do - it 'support multiple databases' do - assert_equal 'test_rocketjob', RocketJob::Job.collection.db.name - end - end - - describe '#reload' do - it 'handle hash' do - @job = Jobs::TestJob.new( - description: @description, - arguments: [{key: 'value'}], - destroy_on_complete: false, - worker_name: 'worker:123' - ) - - assert_equal 'value', @job.arguments.first[:key] - @job.worker_name = nil - @job.save! - @job.worker_name = '123' - @job.reload - assert @job.arguments.first.is_a?(ActiveSupport::HashWithIndifferentAccess), @job.arguments.first.class.inspect - assert_equal 'value', @job.arguments.first['key'] - assert_equal 'value', @job.arguments.first[:key] - assert_equal nil, @job.worker_name - end - end - - describe '#save!' do - it 'save a blank job' do - @job.save! - assert_nil @job.worker_name - assert_nil @job.completed_at - assert @job.created_at - assert_equal @description, @job.description - assert_equal false, @job.destroy_on_complete - assert_nil @job.expires_at - assert_equal @arguments, @job.arguments - assert_equal 0, @job.percent_complete - assert_equal 51, @job.priority - assert_equal 0, @job.failure_count - assert_nil @job.run_at - assert_nil @job.started_at - assert_equal :queued, @job.state - end - end - describe '#status' do it 'return status for a queued job' do assert_equal true, @job.queued? h = @job.status assert_equal :queued, h['state'] @@ -89,188 +36,12 @@ assert_equal :failed, h['state'] assert_equal @description, h['description'] assert_equal 'RocketJob::JobException', h['exception']['class_name'], h assert_equal 'oh no', h['exception']['message'], h end - - it 'mark user as reason for failure when not supplied' do - @job.start! - @job.fail! - assert_equal true, @job.failed? - assert_equal @description, @job.description - assert_equal 'RocketJob::JobException', @job.exception.class_name - assert_equal 'Job failed through user action', @job.exception.message - assert_equal 'user', @job.exception.worker_name - end end - describe '#fail_with_exception!' do - it 'fail with message' do - @job.start! - @job.fail!('myworker:2323', 'oh no') - assert_equal true, @job.failed? - h = @job.status - assert_equal :failed, h['state'] - assert_equal @description, h['description'] - assert_equal 'RocketJob::JobException', h['exception']['class_name'], h - assert_equal 'oh no', h['exception']['message'], h - end - - it 'fail with exception' do - @job.start! - exception = nil - begin - blah - rescue Exception => exc - exception = exc - end - @job.fail!('myworker:2323', exception) - assert_equal true, @job.failed? - h = @job.status - assert_equal :failed, h['state'] - assert_equal @description, h['description'] - assert_equal exception.class.name.to_s, h['exception']['class_name'], h - assert h['exception']['message'].include?('undefined local variable or method'), h - end - end - - describe '#work' do - it 'call default perform method' do - @job.start! - assert_equal false, @job.work(@worker) - assert_equal true, @job.completed?, @job.state - assert_equal 2, Jobs::TestJob.result - end - - it 'call specific method' do - @job.perform_method = :sum - @job.arguments = [23, 45] - @job.start! - assert_equal false, @job.work(@worker) - assert_equal true, @job.completed? - assert_equal 68, Jobs::TestJob.result - end - - it 'destroy on complete' do - @job.destroy_on_complete = true - @job.start! - assert_equal false, @job.work(@worker) - assert @job.completed?, @job.state - assert_equal 0, RocketJob::Job.where(id: @job.id).count - end - - it 'silence logging when log_level is set' do - @job.destroy_on_complete = true - @job.log_level = :warn - @job.perform_method = :noisy_logger - @job.arguments = [] - @job.start! - logged = false - Jobs::TestJob.logger.stub(:log_internal, -> level, index, message, payload, exception { logged = true if message.include?('some very noisy logging') }) do - assert_equal false, @job.work(@worker), @job.inspect - end - assert_equal false, logged - end - - it 'raise logging when log_level is set' do - @job.destroy_on_complete = true - @job.log_level = :trace - @job.perform_method = :debug_logging - @job.arguments = [] - @job.start! - logged = false - # Raise global log level to :info - SemanticLogger.stub(:default_level_index, 3) do - Jobs::TestJob.logger.stub(:log_internal, -> { logged = true }) do - assert_equal false, @job.work(@worker) - end - end - assert_equal false, logged - end - - it 'call before and after' do - named_parameters = {'counter' => 23} - @job.perform_method = :event - @job.arguments = [named_parameters] - @job.start! - assert_equal false, @job.work(@worker), @job.inspect - assert_equal true, @job.completed? - assert_equal named_parameters.merge('before_event' => true, 'after_event' => true), @job.arguments.first - end - - end - - describe '.next_job' do - before do - RocketJob::Job.destroy_all - end - - it 'return nil when no jobs available' do - assert_equal nil, RocketJob::Job.next_job(@worker.name) - end - - it 'return the first job' do - @job.save! - assert job = RocketJob::Job.next_job(@worker.name), 'Failed to find job' - assert_equal @job.id, job.id - end - - it 'Ignore future dated jobs' do - @job.run_at = Time.now + 1.hour - @job.save! - assert_equal nil, RocketJob::Job.next_job(@worker.name) - end - - it 'Process future dated jobs when time is now' do - @job.run_at = Time.now - @job.save! - assert job = RocketJob::Job.next_job(@worker.name), 'Failed to find future job' - assert_equal @job.id, job.id - end - - it 'Skip expired jobs' do - count = RocketJob::Job.count - @job.expires_at = Time.now - 100 - @job.save! - assert_equal nil, RocketJob::Job.next_job(@worker.name) - assert_equal count, RocketJob::Job.count - end - end - - describe '#requeue!' do - it 'requeue jobs from dead workers' do - worker_name = 'server:12345' - @job.worker_name = worker_name - @job.start! - assert @job.running? - - @job.requeue! - @job.reload - - assert @job.queued? - assert_equal nil, @job.worker_name - end - end - - describe '#requeue' do - it 'requeue jobs from dead workers' do - worker_name = 'server:12345' - @job.worker_name = worker_name - assert @job.valid?, @job.errors.messages - @job.start! - assert @job.running?, @job.state - - @job.requeue - assert @job.queued? - assert_equal nil, @job.worker_name - - @job.reload - assert @job.running? - assert_equal worker_name, @job.worker_name - end - end - describe '.requeue_dead_worker' do it 'requeue jobs from dead workers' do assert_equal 52, @job2.priority worker_name = 'server:12345' @job.worker_name = worker_name @@ -278,38 +49,24 @@ assert @job.running?, @job.state worker_name2 = 'server:76467' @job2.worker_name = worker_name2 @job2.start! + assert_equal true, @job2.valid? + assert @job2.running?, @job2.state + @job2.save! RocketJob::Job.requeue_dead_worker(worker_name) @job.reload assert @job.queued? assert_equal nil, @job.worker_name + assert_equal worker_name2, @job2.worker_name @job2.reload - assert @job2.running? assert_equal worker_name2, @job2.worker_name - end - end - - describe '#retry!' do - it 'retry failed jobs' do - worker_name = 'server:12345' - @job.worker_name = worker_name - @job.start! - assert @job.running? - assert_equal worker_name, @job.worker_name - - @job.fail!(worker_name, 'oh no') - assert @job.failed? - assert_equal 'oh no', @job.exception.message - - @job.retry! - assert @job.queued? - assert_equal nil, @job.worker_name - assert_equal nil, @job.exception + assert @job2.running?, @job2.state + assert_equal worker_name2, @job2.worker_name end end end end