Fix Active Job skips

Similarly to Action Mailbox, these tests didn't pass because the skip
patch was included before ActiveSupport::TestCase was defined. Moving
the patch to the bottom of the file fixes the issue.

Once the skip patch was fixed, all of the skips were due to differences
in adapters which aren't really test skips as much as tests that should
not ever run against those adapters.
This commit is contained in:
Hartley McGuire 2023-11-28 20:30:07 -05:00
parent ec3d392e20
commit d64acfdcac
No known key found for this signature in database
GPG Key ID: E823FC1403858A82
3 changed files with 73 additions and 82 deletions

View File

@ -26,7 +26,6 @@ class QueuingTest < ActiveSupport::TestCase
result = HelloJob.set(wait_until: 1.second.ago).perform_later "Jamie"
assert result
rescue NotImplementedError
skip
end
test "job returned by enqueue has the arguments available" do
@ -38,7 +37,6 @@ class QueuingTest < ActiveSupport::TestCase
job = HelloJob.set(wait_until: Time.utc(2014, 1, 1)).perform_later
assert_equal Time.utc(2014, 1, 1), job.scheduled_at
rescue NotImplementedError
skip
end
test "job is yielded to block after enqueue with successfully_enqueued property set" do
@ -82,7 +80,6 @@ class QueuingTest < ActiveSupport::TestCase
ActiveJob.perform_all_later(scheduled_job_1, scheduled_job_2)
assert_equal ["Scheduled 2014 says hello", "Scheduled 2015 says hello"], JobBuffer.values.sort
rescue NotImplementedError
skip
end
test "perform_all_later instrumentation" do

View File

@ -1,7 +1,5 @@
# frozen_string_literal: true
require_relative "../../tools/test_common"
require "active_support/testing/strict_warnings"
require "active_job"
require "support/job_buffer"
@ -23,3 +21,5 @@ require "active_support/testing/autorun"
def adapter_is?(*adapter_class_symbols)
adapter_class_symbols.map(&:to_s).include? ActiveJob::Base.queue_adapter_name
end
require_relative "../../tools/test_common"

View File

@ -13,58 +13,60 @@ class QueuingTest < ActiveSupport::TestCase
assert_job_executed
end
test "should not run jobs queued on a non-listening queue" do
skip if adapter_is?(:inline, :async, :sucker_punch)
old_queue = TestJob.queue_name
unless adapter_is?(:inline, :async, :sucker_punch)
test "should not run jobs queued on a non-listening queue" do
old_queue = TestJob.queue_name
begin
TestJob.queue_as :some_other_queue
TestJob.perform_later @id
wait_for_jobs_to_finish_for(2.seconds)
assert_job_not_executed
ensure
TestJob.queue_name = old_queue
begin
TestJob.queue_as :some_other_queue
TestJob.perform_later @id
wait_for_jobs_to_finish_for(2.seconds)
assert_job_not_executed
ensure
TestJob.queue_name = old_queue
end
end
end
test "should supply a wrapped class name to Sidekiq" do
skip unless adapter_is?(:sidekiq)
Sidekiq::Testing.fake! do
if adapter_is?(:sidekiq)
test "should supply a wrapped class name to Sidekiq" do
Sidekiq::Testing.fake! do
::HelloJob.perform_later
hash = ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper.jobs.first
assert_equal "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper", hash["class"]
assert_equal "HelloJob", hash["wrapped"]
end
end
test "should access provider_job_id inside Sidekiq job" do
Sidekiq::Testing.inline! do
job = ::ProviderJidJob.perform_later
assert_equal "Provider Job ID: #{job.provider_job_id}", JobBuffer.last_value
end
end
end
if adapter_is?(:delayed_job)
test "should supply a wrapped class name to DelayedJob" do
::HelloJob.perform_later
hash = ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper.jobs.first
assert_equal "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper", hash["class"]
assert_equal "HelloJob", hash["wrapped"]
job = Delayed::Job.first
assert_match(/HelloJob \[[0-9a-f-]+\] from DelayedJob\(default\) with arguments: \[\]/, job.name)
end
end
test "should access provider_job_id inside Sidekiq job" do
skip unless adapter_is?(:sidekiq)
Sidekiq::Testing.inline! do
job = ::ProviderJidJob.perform_later
assert_equal "Provider Job ID: #{job.provider_job_id}", JobBuffer.last_value
if adapter_is?(:resque)
test "resque JobWrapper should have instance variable queue" do
job = ::HelloJob.set(wait: 5.seconds).perform_later
hash = Resque.decode(Resque.find_delayed_selection { true }[0])
assert_equal hash["queue"], job.queue_name
end
end
test "should supply a wrapped class name to DelayedJob" do
skip unless adapter_is?(:delayed_job)
::HelloJob.perform_later
job = Delayed::Job.first
assert_match(/HelloJob \[[0-9a-f-]+\] from DelayedJob\(default\) with arguments: \[\]/, job.name)
end
test "resque JobWrapper should have instance variable queue" do
skip unless adapter_is?(:resque)
job = ::HelloJob.set(wait: 5.seconds).perform_later
hash = Resque.decode(Resque.find_delayed_selection { true }[0])
assert_equal hash["queue"], job.queue_name
end
test "should not run job enqueued in the future" do
TestJob.set(wait: 10.minutes).perform_later @id
wait_for_jobs_to_finish_for(5.seconds)
assert_job_not_executed
rescue NotImplementedError
skip
end
test "should run job enqueued in the future at the specified time" do
@ -74,7 +76,6 @@ class QueuingTest < ActiveSupport::TestCase
wait_for_jobs_to_finish_for(10.seconds)
assert_job_executed
rescue NotImplementedError
skip
end
test "should run job bulk enqueued in the future at the specified time" do
@ -84,25 +85,22 @@ class QueuingTest < ActiveSupport::TestCase
wait_for_jobs_to_finish_for(10.seconds)
assert_job_executed
rescue NotImplementedError
skip
end
test "should supply a provider_job_id when available for immediate jobs" do
skip unless adapter_is?(:async, :delayed_job, :sidekiq, :queue_classic)
test_job = TestJob.perform_later @id
assert test_job.provider_job_id, "Provider job id should be set by provider"
if adapter_is?(:async, :delayed_job, :sidekiq, :queue_classic)
test "should supply a provider_job_id when available for immediate jobs" do
test_job = TestJob.perform_later @id
assert test_job.provider_job_id, "Provider job id should be set by provider"
end
test "should supply a provider_job_id when available for delayed jobs" do
delayed_test_job = TestJob.set(wait: 1.minute).perform_later @id
assert delayed_test_job.provider_job_id, "Provider job id should by set for delayed jobs by provider"
end
end
test "should supply a provider_job_id when available for delayed jobs" do
skip unless adapter_is?(:async, :delayed_job, :sidekiq, :queue_classic)
delayed_test_job = TestJob.set(wait: 1.minute).perform_later @id
assert delayed_test_job.provider_job_id, "Provider job id should by set for delayed jobs by provider"
end
test "current locale is kept while running perform_later" do
skip if adapter_is?(:inline)
begin
unless adapter_is?(:inline)
test "current locale is kept while running perform_later" do
I18n.available_locales = [:en, :de]
I18n.locale = :de
@ -114,12 +112,8 @@ class QueuingTest < ActiveSupport::TestCase
I18n.available_locales = [:en]
I18n.locale = :en
end
end
test "current timezone is kept while running perform_later" do
skip if adapter_is?(:inline)
begin
test "current timezone is kept while running perform_later" do
current_zone = Time.zone
Time.zone = "Hawaii"
@ -132,28 +126,28 @@ class QueuingTest < ActiveSupport::TestCase
end
end
test "should run job with higher priority first" do
skip unless adapter_is?(:delayed_job)
wait_until = Time.now + 3.seconds
TestJob.set(wait_until: wait_until, priority: 20).perform_later "#{@id}.1"
TestJob.set(wait_until: wait_until, priority: 10).perform_later "#{@id}.2"
wait_for_jobs_to_finish_for(10.seconds)
assert_job_executed "#{@id}.1"
assert_job_executed "#{@id}.2"
assert_job_executed_before("#{@id}.2", "#{@id}.1")
if adapter_is?(:delayed_job)
test "should run job with higher priority first" do
wait_until = Time.now + 3.seconds
TestJob.set(wait_until: wait_until, priority: 20).perform_later "#{@id}.1"
TestJob.set(wait_until: wait_until, priority: 10).perform_later "#{@id}.2"
wait_for_jobs_to_finish_for(10.seconds)
assert_job_executed "#{@id}.1"
assert_job_executed "#{@id}.2"
assert_job_executed_before("#{@id}.2", "#{@id}.1")
end
end
test "should run job with higher priority first in Backburner" do
skip unless adapter_is?(:backburner)
jobs_manager.tube.pause(3)
TestJob.set(priority: 20).perform_later "#{@id}.1"
TestJob.set(priority: 10).perform_later "#{@id}.2"
wait_for_jobs_to_finish_for(10.seconds)
assert_job_executed "#{@id}.1"
assert_job_executed "#{@id}.2"
assert_job_executed_before("#{@id}.2", "#{@id}.1")
if adapter_is?(:backburner)
test "should run job with higher priority first in Backburner" do
jobs_manager.tube.pause(3)
TestJob.set(priority: 20).perform_later "#{@id}.1"
TestJob.set(priority: 10).perform_later "#{@id}.2"
wait_for_jobs_to_finish_for(10.seconds)
assert_job_executed "#{@id}.1"
assert_job_executed "#{@id}.2"
assert_job_executed_before("#{@id}.2", "#{@id}.1")
end
end
private