1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00
mperham--sidekiq/test/test_sidekiq.rb
Mike Perham 67daa7a408
Prepare for upcoming Sidekiq::Config redesign (#5340)
* Prepare for upcoming Sidekiq::Config redesign

Adjust the server internals to use a config object rather than refering directly to the Sidekiq module.
2022-05-31 13:37:31 -07:00

126 lines
3.5 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
require_relative "helper"
describe Sidekiq do
before do
@config = Sidekiq
end
describe "json processing" do
it "handles json" do
assert_equal({"foo" => "bar"}, Sidekiq.load_json("{\"foo\":\"bar\"}"))
assert_equal "{\"foo\":\"bar\"}", Sidekiq.dump_json({"foo" => "bar"})
end
end
describe "redis connection" do
it "returns error without creating a connection if block is not given" do
assert_raises(ArgumentError) do
@config.redis
end
end
end
describe "❨╯°□°❩╯︵┻━┻" do
before { $stdout = StringIO.new }
after { $stdout = STDOUT }
it "allows angry developers to express their emotional constitution and remedies it" do
Sidekiq.°°
assert_equal "Calm down, yo.\n", $stdout.string
end
end
describe "options" do
it "provides attribute writers" do
assert_equal 3, @config.concurrency = 3
assert_equal %w[foo bar], @config.queues = ["foo", "bar"]
end
end
describe "lifecycle events" do
it "handles invalid input" do
config = @config
config[:lifecycle_events][:startup].clear
e = assert_raises ArgumentError do
config.on(:startp)
end
assert_match(/Invalid event name/, e.message)
e = assert_raises ArgumentError do
config.on("startup")
end
assert_match(/Symbols only/, e.message)
config.on(:startup) do
1 + 1
end
assert_equal 2, config[:lifecycle_events][:startup].first.call
end
end
describe "default_job_options" do
it "stringifies keys" do
@old_options = @config.default_job_options
begin
@config.default_job_options = {queue: "cat"}
assert_equal "cat", @config.default_job_options["queue"]
ensure
@config.default_job_options = @old_options
end
end
end
describe "error handling" do
it "deals with user-specified error handlers which raise errors" do
output = capture_logging do
@config.error_handlers << proc { |x, hash|
raise "boom"
}
@config.handle_exception(RuntimeError.new("hello"))
ensure
@config.error_handlers.pop
end
assert_includes output, "boom"
assert_includes output, "ERROR"
end
end
describe "redis connection" do
it "does not continually retry" do
assert_raises Redis::CommandError do
@config.redis do |c|
raise Redis::CommandError, "READONLY You can't write against a replica."
end
end
end
it "reconnects if connection is flagged as readonly" do
counts = []
@config.redis do |c|
counts << c.info["total_connections_received"].to_i
raise Sidekiq::RedisConnection.adapter::CommandError, "READONLY You can't write against a replica." if counts.size == 1
end
assert_equal 2, counts.size
assert_equal counts[0] + 1, counts[1]
end
it "reconnects if instance state changed" do
counts = []
@config.redis do |c|
counts << c.info["total_connections_received"].to_i
raise Sidekiq::RedisConnection.adapter::CommandError, "UNBLOCKED force unblock from blocking operation, instance state changed (master -> replica?)" if counts.size == 1
end
assert_equal 2, counts.size
assert_equal counts[0] + 1, counts[1]
end
end
describe "redis info" do
it "calls the INFO command which returns at least redis_version" do
output = @config.redis_info
assert_includes output.keys, "redis_version"
end
end
end