Skip to content

Commit

Permalink
Merge pull request #177 from nikz/sidekiq-testing
Browse files Browse the repository at this point in the history
Adds testing for latest Sidekiq versions
  • Loading branch information
nikz committed May 2, 2024
2 parents 453e79f + b968d9d commit ec3d176
Show file tree
Hide file tree
Showing 10 changed files with 43 additions and 31 deletions.
1 change: 1 addition & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ jobs:
gemfile:
- gemfiles/rails_6.gemfile
- gemfiles/rails_7.gemfile
- gemfiles/rails_7_sidekiq_6.gemfile
include:
- ruby: "3.0"
gemfile: gemfiles/rails_6.gemfile
Expand Down
9 changes: 9 additions & 0 deletions Appraisals
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
appraise "rails-6" do
gem "rails", "6.1.4"
gem "sqlite3", "~> 1.4"
gem "sidekiq", ">= 7"
end

appraise "rails-7" do
gem "rails", "7.1.3"
gem "sqlite3", "~> 1.4"
gem "importmap-rails"
gem "sidekiq", ">= 7"
end

appraise "rails-7-sidekiq-6" do
gem "rails", "7.1.3"
gem "sqlite3", "~> 1.4"
gem "importmap-rails"
gem "sidekiq", "~> 6.5"
end
9 changes: 7 additions & 2 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env rake
require "bundler/setup"
require "bundler/gem_tasks"

require "appraisal"
require "rake/testtask"

namespace :test do
Expand All @@ -24,4 +25,8 @@ namespace :test do
end
end

task default: ["test:units", "test:spec"]
if !ENV["APPRAISAL_INITIALIZED"] && !ENV["CI"]
task default: :appraisal
else
task default: ["test:units", "test:spec"]
end
1 change: 1 addition & 0 deletions gemfiles/rails_6.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ source "https://rubygems.org"

gem "rails", "6.1.4"
gem "sqlite3", "~> 1.4"
gem "sidekiq", ">= 7"

gemspec path: "../"
1 change: 1 addition & 0 deletions gemfiles/rails_7.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ source "https://rubygems.org"
gem "rails", "7.1.3"
gem "sqlite3", "~> 1.4"
gem "importmap-rails"
gem "sidekiq", ">= 7"

gemspec path: "../"
10 changes: 10 additions & 0 deletions gemfiles/rails_7_sidekiq_6.gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# This file was generated by Appraisal

source "https://rubygems.org"

gem "rails", "7.1.3"
gem "sqlite3", "~> 1.4"
gem "importmap-rails"
gem "sidekiq", "~> 6.5"

gemspec path: "../"
30 changes: 5 additions & 25 deletions lib/raygun/sidekiq.rb
Original file line number Diff line number Diff line change
@@ -1,24 +1,12 @@
# Adapted from Bugsnag code as per Sidekiq 2.x comment request
# Adapted from Bugsnag code, and Sidekiq Erorr Handling instructions
#
# SideKiq 2.x: https://github.com/mperham/sidekiq/blob/2-x/lib/sidekiq/exception_handler.rb
# SideKiq: https://github.com/sidekiq/sidekiq/wiki/Error-Handling
# Bugsnag: https://github.com/bugsnag/bugsnag-ruby/blob/master/lib/bugsnag/sidekiq.rb

module Raygun

class SidekiqMiddleware # Used for Sidekiq 2.x only
def call(worker, message, queue)
begin
yield
rescue Exception => ex
raise ex if [Interrupt, SystemExit, SignalException].include?(ex.class)
SidekiqReporter.call(ex, worker: worker, message: message, queue: queue)
raise ex
end
end
end

class SidekiqReporter
def self.call(exception, context_hash)
def self.call(exception, context_hash, config)
user = affected_user(context_hash)
data = {
custom_data: {
Expand Down Expand Up @@ -58,14 +46,6 @@ def self.affected_user(context_hash)
end
end

if Sidekiq::VERSION < '3'
Sidekiq.configure_server do |config|
config.server_middleware do |chain|
chain.add Raygun::SidekiqMiddleware
end
end
else
Sidekiq.configure_server do |config|
config.error_handlers << Raygun::SidekiqReporter
end
Sidekiq.configure_server do |config|
config.error_handlers << Raygun::SidekiqReporter
end
1 change: 0 additions & 1 deletion raygun4ruby.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ Gem::Specification.new do |spec|
spec.add_development_dependency "minitest", "~> 5.11"
spec.add_development_dependency "redis-namespace", ">= 1.3.1"
spec.add_development_dependency "resque"
spec.add_development_dependency "sidekiq", [">= 3", "< 3.2.2"]
spec.add_development_dependency "mocha"
spec.add_development_dependency "pry"
spec.add_development_dependency "webmock"
Expand Down
4 changes: 3 additions & 1 deletion spec/rails_helper.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
ENV['RAILS_ENV'] ||= 'test'
require "rails"

require "rails_applications/#{Rails::VERSION::STRING}/config/environment"
major_minor_patch = Rails::VERSION::STRING.split(".").first(3).join(".")

require "rails_applications/#{major_minor_patch}/config/environment"

require "rspec/rails"
8 changes: 6 additions & 2 deletions test/unit/sidekiq_failure_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,16 @@ def setup
def test_failure_backend_appears_to_work
assert Raygun::SidekiqReporter.call(
StandardError.new("Oh no! Your Sidekiq has failed!"),
sidekick_name: "robin"
{ sidekick_name: "robin" },
{} # config
).success?
end

def test_we_are_in_sidekiqs_list_of_error_handlers
assert Sidekiq.error_handlers.include?(Raygun::SidekiqReporter)
# Sidekiq 7.x stores error handlers inside a configuration object, while 6.x and below stores them directly against the Sidekiq module
error_handlers = Sidekiq.respond_to?(:error_handlers) ? Sidekiq.error_handlers : Sidekiq.default_configuration.error_handlers

assert error_handlers.include?(Raygun::SidekiqReporter)
end

end

0 comments on commit ec3d176

Please sign in to comment.