2015-12-31 15:33:35 -08:00
|
|
|
# frozen_string_literal: true
|
2022-03-03 12:50:03 -08:00
|
|
|
|
|
|
|
require_relative "helper"
|
|
|
|
require "sidekiq/fetch"
|
|
|
|
require "sidekiq/api"
|
2012-07-27 15:18:11 -07:00
|
|
|
|
2019-02-28 12:43:50 -08:00
|
|
|
describe Sidekiq::BasicFetch do
|
|
|
|
before do
|
2020-08-28 13:17:03 -07:00
|
|
|
@prev_redis = Sidekiq.instance_variable_get(:@redis) || {}
|
2019-02-28 12:43:50 -08:00
|
|
|
Sidekiq.redis do |conn|
|
2022-05-10 21:25:04 +02:00
|
|
|
conn.flushdb
|
2022-03-03 12:50:03 -08:00
|
|
|
conn.rpush("queue:basic", "msg")
|
2013-04-17 10:51:23 -04:00
|
|
|
end
|
2019-02-28 12:43:50 -08:00
|
|
|
end
|
2013-01-05 21:17:08 -08:00
|
|
|
|
2019-10-01 01:26:31 +03:00
|
|
|
after do
|
|
|
|
Sidekiq.redis = @prev_redis
|
|
|
|
end
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
it "retrieves" do
|
|
|
|
fetch = Sidekiq::BasicFetch.new(queues: ["basic", "bar"])
|
2019-02-28 12:43:50 -08:00
|
|
|
uow = fetch.retrieve_work
|
|
|
|
refute_nil uow
|
2022-03-03 12:50:03 -08:00
|
|
|
assert_equal "basic", uow.queue_name
|
|
|
|
assert_equal "msg", uow.job
|
|
|
|
q = Sidekiq::Queue.new("basic")
|
2019-02-28 12:43:50 -08:00
|
|
|
assert_equal 0, q.size
|
|
|
|
uow.requeue
|
|
|
|
assert_equal 1, q.size
|
|
|
|
assert_nil uow.acknowledge
|
|
|
|
end
|
2013-01-16 21:53:48 -08:00
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
it "retrieves with strict setting" do
|
|
|
|
fetch = Sidekiq::BasicFetch.new(queues: ["basic", "bar", "bar"], strict: true)
|
2019-02-28 12:43:50 -08:00
|
|
|
cmd = fetch.queues_cmd
|
2022-03-03 12:50:03 -08:00
|
|
|
assert_equal cmd, ["queue:basic", "queue:bar", Sidekiq::BasicFetch::TIMEOUT]
|
2019-02-28 12:43:50 -08:00
|
|
|
end
|
2014-02-01 15:04:20 -08:00
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
it "bulk requeues" do
|
2019-10-01 01:26:31 +03:00
|
|
|
Sidekiq.redis do |conn|
|
2022-03-03 12:50:03 -08:00
|
|
|
conn.rpush("queue:foo", ["bob", "bar"])
|
|
|
|
conn.rpush("queue:bar", "widget")
|
2019-10-01 01:26:31 +03:00
|
|
|
end
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
q1 = Sidekiq::Queue.new("foo")
|
|
|
|
q2 = Sidekiq::Queue.new("bar")
|
2019-10-01 01:26:31 +03:00
|
|
|
assert_equal 2, q1.size
|
|
|
|
assert_equal 1, q2.size
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
fetch = Sidekiq::BasicFetch.new(queues: ["foo", "bar"])
|
2019-10-01 01:26:31 +03:00
|
|
|
works = 3.times.map { fetch.retrieve_work }
|
2019-02-28 12:43:50 -08:00
|
|
|
assert_equal 0, q1.size
|
|
|
|
assert_equal 0, q2.size
|
2019-10-01 01:26:31 +03:00
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
fetch.bulk_requeue(works, {queues: []})
|
2019-02-28 12:43:50 -08:00
|
|
|
assert_equal 2, q1.size
|
|
|
|
assert_equal 1, q2.size
|
2013-01-16 21:53:48 -08:00
|
|
|
end
|
2019-02-28 12:43:50 -08:00
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
it "sleeps when no queues are active" do
|
|
|
|
fetch = Sidekiq::BasicFetch.new(queues: [])
|
2021-08-19 10:52:24 -07:00
|
|
|
mock = Minitest::Mock.new
|
|
|
|
mock.expect(:call, nil, [Sidekiq::BasicFetch::TIMEOUT])
|
|
|
|
fetch.stub(:sleep, mock) { assert_nil fetch.retrieve_work }
|
|
|
|
mock.verify
|
|
|
|
end
|
2012-07-27 15:18:11 -07:00
|
|
|
end
|