1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Validate that args for bulk push is an Array of Arrays (#4578)

This commit is contained in:
Manoj M J 2020-05-26 23:31:22 +05:30 committed by GitHub
parent 19a236eb85
commit a1805e36a0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 5 deletions

View file

@ -90,16 +90,16 @@ module Sidekiq
# Returns an array of the of pushed jobs' jids. The number of jobs pushed can be less
# than the number given if the middleware stopped processing for one or more jobs.
def push_bulk(items)
arg = items["args"].first
return [] unless arg # no jobs to push
raise ArgumentError, "Bulk arguments must be an Array of Arrays: [[1], [2]]" unless arg.is_a?(Array)
args = items["args"]
raise ArgumentError, "Bulk arguments must be an Array of Arrays: [[1], [2]]" unless (args.is_a?(Array) && args.all?(Array))
return [] if args.empty? # no jobs to push
at = items.delete("at")
raise ArgumentError, "Job 'at' must be a Numeric or an Array of Numeric timestamps" if at && (Array(at).empty? || !Array(at).all?(Numeric))
normed = normalize_item(items)
payloads = items["args"].map.with_index { |args, index|
copy = normed.merge("args" => args, "jid" => SecureRandom.hex(12), "enqueued_at" => Time.now.to_f)
payloads = args.map.with_index { |job_args, index|
copy = normed.merge("args" => job_args, "jid" => SecureRandom.hex(12), "enqueued_at" => Time.now.to_f)
copy["at"] = (at.is_a?(Array) ? at[index] : at) if at
result = process_single(items["class"], copy)

View file

@ -162,6 +162,14 @@ describe Sidekiq::Client do
result = Sidekiq::Client.push_bulk('class' => 'QueuedWorker', 'args' => [])
assert_equal 0, result.size
end
describe 'errors' do
it 'raises ArgumentError with invalid params' do
assert_raises ArgumentError do
Sidekiq::Client.push_bulk('class' => 'QueuedWorker', 'args' => [[1], 2])
end
end
end
end
class BaseWorker