@@ -16,6 +16,16 @@ class MultishardingTest < ActiveSupport::TestCase
1616 end
1717 end
1818
19+ test "shard_selection_lambda can override which shard is used to enqueue individual jobs" do
20+ shard_selection_lambda = -> ( active_job :, active_jobs :) { :queue_shard_two if active_job . arguments . first == "hey!" }
21+
22+ with_shard_selection_lambda ( shard_selection_lambda ) do
23+ assert_difference -> { connected_to_shard_two { SolidQueue ::Job . count } } , 1 do
24+ AddToBufferJob . perform_later "hey!"
25+ end
26+ end
27+ end
28+
1929 test "jobs are enqueued for later in the right shard" do
2030 assert_difference -> { SolidQueue ::ScheduledExecution . count } , 1 do
2131 assert_difference -> { connected_to_shard_two { SolidQueue ::ScheduledExecution . count } } , 1 do
@@ -39,4 +49,31 @@ class MultishardingTest < ActiveSupport::TestCase
3949 end
4050 end
4151 end
52+
53+ test "shard_selection_lambda can override which shard is used to enqueue jobs in bulk" do
54+ active_jobs = [
55+ AddToBufferJob . new ( 2 ) ,
56+ ShardTwoJob . new ( 6 ) ,
57+ AddToBufferJob . new ( 3 ) ,
58+ ShardTwoJob . new ( 7 )
59+ ]
60+ shard_selection_lambda = -> ( active_job :, active_jobs :) { :queue_shard_two if active_jobs . size == 2 }
61+
62+ with_shard_selection_lambda ( shard_selection_lambda ) do
63+ assert_difference -> { SolidQueue ::Job . count } , 0 do
64+ assert_difference -> { connected_to_shard_two { SolidQueue ::Job . count } } , 4 do
65+ ActiveJob . perform_all_later ( active_jobs )
66+ end
67+ end
68+ end
69+ end
70+
71+ private
72+
73+ def with_shard_selection_lambda ( lambda , &block )
74+ SolidQueue . shard_selection_lambda = lambda
75+ block . call
76+ ensure
77+ SolidQueue . shard_selection_lambda = nil
78+ end
4279end
0 commit comments