mirror of
https://github.com/mperham/sidekiq.git
synced 2022-11-09 13:52:34 -05:00
29dca70e24
* Initial work on Sidekiq::Config * Initial work on Sidekiq::Config * reduce dependencies in deploy marks * bare sidekiq and webapp * Modify runtime to work with Capsules * Cleanup * Rename test files to remove test_ prefix * Update test suite and standard rules to be more compliant * Move constant definition outside code, per standard formatting * Loads of changes for introduction of Capsules * Remove Redis adapter abstraction * update capsule overview * Ensure Sidekiq.redis uses the correct pool for jobs running within a Capsule * Use default_capsule for safety * Slow down the beat to halve its Redis overhead * move config fixtures into cfg/ * Add capsule middleware test * use accessor
108 lines
3.1 KiB
Ruby
108 lines
3.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative "helper"
|
|
|
|
describe Sidekiq do
|
|
before do
|
|
@config = reset!
|
|
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 "lifecycle events" do
|
|
it "handles invalid input" do
|
|
@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 = Sidekiq.default_job_options
|
|
begin
|
|
Sidekiq.default_job_options = {queue: "cat"}
|
|
assert_equal "cat", Sidekiq.default_job_options["queue"]
|
|
ensure
|
|
Sidekiq.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(@config) 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 Sidekiq::RedisClientAdapter::CommandError do
|
|
@config.redis do |c|
|
|
raise Sidekiq::RedisClientAdapter::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::RedisClientAdapter::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::RedisClientAdapter::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
|