/
spec_helper.rb
184 lines (146 loc) · 3.61 KB
/
spec_helper.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
require "bundler/setup"
require "pry"
require "debug" if RUBY_VERSION.to_f >= 2.6
# this enables sidekiq's server mode
require "sidekiq/cli"
# require "support/test_sidekiq_app/app"
require "sentry-ruby"
require 'simplecov'
SimpleCov.start do
project_name "sentry-sidekiq"
root File.join(__FILE__, "../../../")
coverage_dir File.join(__FILE__, "../../coverage")
end
if ENV["CI"] && ENV["CODECOV"] == "1"
require 'codecov'
SimpleCov.formatter = SimpleCov::Formatter::Codecov
end
require "sentry-sidekiq"
DUMMY_DSN = 'http://12345:67890@sentry.localdomain/sentry/42'
RSpec.configure do |config|
# Enable flags like --only-failures and --next-failure
config.example_status_persistence_file_path = ".rspec_status"
# Disable RSpec exposing methods globally on `Module` and `main`
config.disable_monkey_patching!
config.expect_with :rspec do |c|
c.syntax = :expect
end
config.before :each do
# Make sure we reset the env in case something leaks in
ENV.delete('SENTRY_DSN')
ENV.delete('SENTRY_CURRENT_ENV')
ENV.delete('SENTRY_ENVIRONMENT')
ENV.delete('SENTRY_RELEASE')
ENV.delete('sidekiq_ENV')
ENV.delete('RACK_ENV')
end
config.before :all do
Sidekiq.logger = Logger.new(nil)
end
end
def build_exception
1 / 0
rescue ZeroDivisionError => e
e
end
def build_exception_with_cause(cause = "exception a")
begin
raise cause
rescue
raise "exception b"
end
rescue RuntimeError => e
e
end
def build_exception_with_two_causes
begin
begin
raise "exception a"
rescue
raise "exception b"
end
rescue
raise "exception c"
end
rescue RuntimeError => e
e
end
def build_exception_with_recursive_cause
backtrace = []
exception = double("Exception")
allow(exception).to receive(:cause).and_return(exception)
allow(exception).to receive(:message).and_return("example")
allow(exception).to receive(:backtrace).and_return(backtrace)
exception
end
class HappyWorker
include Sidekiq::Worker
def perform
crumb = Sentry::Breadcrumb.new(message: "I'm happy!")
Sentry.add_breadcrumb(crumb)
Sentry.set_tags mood: 'happy'
end
end
class SadWorker
include Sidekiq::Worker
def perform
crumb = Sentry::Breadcrumb.new(message: "I'm sad!")
Sentry.add_breadcrumb(crumb)
Sentry.set_tags :mood => 'sad'
raise "I'm sad!"
end
end
class VerySadWorker
include Sidekiq::Worker
def perform
crumb = Sentry::Breadcrumb.new(message: "I'm very sad!")
Sentry.add_breadcrumb(crumb)
Sentry.set_tags :mood => 'very sad'
raise "I'm very sad!"
end
end
class ReportingWorker
include Sidekiq::Worker
def perform
Sentry.capture_message("I have something to say!")
end
end
class RetryWorker
include Sidekiq::Worker
sidekiq_options retry: 1
def perform
1/0
end
end
class ZeroRetryWorker
include Sidekiq::Worker
sidekiq_options retry: 0
def perform
1/0
end
end
def execute_worker(processor, klass)
klass_options = klass.sidekiq_options_hash || {}
options = {}
# for Ruby < 2.6
klass_options.each do |k, v|
options[k.to_sym] = v
end
msg = Sidekiq.dump_json(jid: "123123", class: klass, args: [], **options)
work = Sidekiq::BasicFetch::UnitOfWork.new('queue:default', msg)
process_work(processor, work)
end
def process_work(processor, work)
processor.send(:process, work)
rescue StandardError
# do nothing
end
def perform_basic_setup
Sentry.init do |config|
config.dsn = DUMMY_DSN
config.logger = ::Logger.new(nil)
config.background_worker_threads = 0
config.transport.transport_class = Sentry::DummyTransport
yield config if block_given?
end
end