aboutsummaryrefslogblamecommitdiffstats
path: root/activejob/test/cases/exceptions_test.rb
blob: 3df4f04bec8acf76d9d524d9fa8ccd3c53b8f89b (plain) (tree)
1
2
3
4
5
6
7
8
9








                                                                      
                                             

                  



                                              



                                                                          
                                                         

                                          
 

                                                                           


                                                                                





                                                                               


                                                                                             




                       

                                                                                 
     




                                                                                              
   





































                                                                   
require 'helper'
require 'jobs/retry_job'

class ExceptionsTest < ActiveSupport::TestCase
  setup do
    JobBuffer.clear
  end

  test "successfully retry job throwing exception against defaults" do
    RetryJob.perform_later 'DefaultsError', 5

    assert_equal [
      "Raised DefaultsError for the 1st time",
      "Raised DefaultsError for the 2nd time",
      "Raised DefaultsError for the 3rd time",
      "Raised DefaultsError for the 4th time",
      "Successfully completed job" ], JobBuffer.values
  end

  test "successfully retry job throwing exception against higher limit" do
    RetryJob.perform_later 'ShortWaitTenAttemptsError', 9
    assert_equal 9, JobBuffer.values.count
  end

  test "failed retry job when exception kept occurring against defaults" do
    begin
      RetryJob.perform_later 'DefaultsError', 6
      assert_equal "Raised DefaultsError for the 5th time", JobBuffer.last_value
    rescue DefaultsError
      pass
    end
  end

  test "failed retry job when exception kept occurring against higher limit" do
    begin
      RetryJob.perform_later 'ShortWaitTenAttemptsError', 11
      assert_equal "Raised ShortWaitTenAttemptsError for the 10th time", JobBuffer.last_value
    rescue ShortWaitTenAttemptsError
      pass
    end
  end

  test "discard job" do
    RetryJob.perform_later 'DiscardableError', 2
    assert_equal "Raised DiscardableError for the 1st time", JobBuffer.last_value
  end
  
  test "custom handling of job that exceeds retry attempts" do
    RetryJob.perform_later 'CustomCatchError', 6
    assert_equal "Dealt with a job that failed to retry in a custom way", JobBuffer.last_value
  end
end

class ExponentiallyBackoffExceptionsTest < ActiveJob::TestCase
  setup do
    JobBuffer.clear
  end

  test "exponentially retrying job" do
    travel_to Time.now

    perform_enqueued_jobs do
      assert_performed_with at: (Time.now + 3.seconds).to_i do
      assert_performed_with at: (Time.now + 18.seconds).to_i do
      assert_performed_with at: (Time.now + 83.seconds).to_i do
      assert_performed_with at: (Time.now + 258.seconds).to_i do
        RetryJob.perform_later 'ExponentialWaitTenAttemptsError', 5
      end
      end
      end
      end
    end
  end

  test "custom wait retrying job" do
    travel_to Time.now

    perform_enqueued_jobs do
      assert_performed_with at: (Time.now + 2.seconds).to_i do
      assert_performed_with at: (Time.now + 4.seconds).to_i do
      assert_performed_with at: (Time.now + 6.seconds).to_i do
      assert_performed_with at: (Time.now + 8.seconds).to_i do
        RetryJob.perform_later 'CustomWaitTenAttemptsError', 5
      end
      end
      end
      end
    end
  end
end