rollbar 2.18.2 → 2.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +15 -0
  3. data/.travis.yml +155 -93
  4. data/Gemfile +19 -13
  5. data/README.md +12 -0
  6. data/gemfiles/rails30.gemfile +17 -10
  7. data/gemfiles/rails31.gemfile +20 -12
  8. data/gemfiles/rails32.gemfile +16 -7
  9. data/gemfiles/rails40.gemfile +16 -5
  10. data/gemfiles/rails41.gemfile +15 -5
  11. data/gemfiles/rails42.gemfile +25 -14
  12. data/gemfiles/rails50.gemfile +15 -8
  13. data/gemfiles/rails51.gemfile +15 -8
  14. data/gemfiles/rails52.gemfile +62 -0
  15. data/gemfiles/ruby_1_8_and_1_9_2.gemfile +2 -2
  16. data/lib/rails/rollbar_runner.rb +16 -1
  17. data/lib/rollbar/capistrano.rb +71 -39
  18. data/lib/rollbar/capistrano3.rb +53 -1
  19. data/lib/rollbar/capistrano_tasks.rb +131 -0
  20. data/lib/rollbar/configuration.rb +13 -4
  21. data/lib/rollbar/delay/active_job.rb +17 -0
  22. data/lib/rollbar/delay/sidekiq.rb +3 -1
  23. data/lib/rollbar/delay/thread.rb +1 -1
  24. data/lib/rollbar/deploy.rb +69 -0
  25. data/lib/rollbar/item.rb +17 -6
  26. data/lib/rollbar/middleware/js.rb +25 -3
  27. data/lib/rollbar/middleware/js/json_value.rb +26 -0
  28. data/lib/rollbar/notifier.rb +32 -13
  29. data/lib/rollbar/plugins/active_job.rb +3 -0
  30. data/lib/rollbar/plugins/rails/controller_methods.rb +2 -1
  31. data/lib/rollbar/plugins/rails/railtie_mixin.rb +7 -1
  32. data/lib/rollbar/rake_tasks.rb +126 -67
  33. data/lib/rollbar/scrubbers/params.rb +6 -0
  34. data/lib/rollbar/util.rb +75 -45
  35. data/lib/rollbar/util/hash.rb +15 -6
  36. data/lib/rollbar/version.rb +1 -1
  37. data/rollbar.gemspec +2 -3
  38. metadata +9 -261
  39. data/lib/rollbar/tasks/rollbar.cap +0 -47
  40. data/spec/cacert.pem +0 -3988
  41. data/spec/controllers/home_controller_spec.rb +0 -480
  42. data/spec/delay/sidekiq_spec.rb +0 -61
  43. data/spec/delay/sucker_punch_spec.rb +0 -25
  44. data/spec/delayed/backend/test.rb +0 -140
  45. data/spec/delayed/serialization/test.rb +0 -0
  46. data/spec/dummyapp/.gitignore +0 -73
  47. data/spec/dummyapp/Rakefile +0 -7
  48. data/spec/dummyapp/app/assets/javascripts/application.js +0 -3
  49. data/spec/dummyapp/app/assets/stylesheets/application.css.scss +0 -37
  50. data/spec/dummyapp/app/controllers/application_controller.rb +0 -3
  51. data/spec/dummyapp/app/controllers/home_controller.rb +0 -60
  52. data/spec/dummyapp/app/controllers/users_controller.rb +0 -17
  53. data/spec/dummyapp/app/helpers/.gitkeep +0 -0
  54. data/spec/dummyapp/app/mailers/.gitkeep +0 -0
  55. data/spec/dummyapp/app/models/.gitkeep +0 -0
  56. data/spec/dummyapp/app/models/book.rb +0 -5
  57. data/spec/dummyapp/app/models/post.rb +0 -9
  58. data/spec/dummyapp/app/models/user.rb +0 -9
  59. data/spec/dummyapp/app/views/devise/registrations/edit.html.erb +0 -27
  60. data/spec/dummyapp/app/views/devise/registrations/new.html.erb +0 -20
  61. data/spec/dummyapp/app/views/devise/shared/_links.html.erb +0 -25
  62. data/spec/dummyapp/app/views/home/cause_exception.html.erb +0 -1
  63. data/spec/dummyapp/app/views/home/index.html.erb +0 -4
  64. data/spec/dummyapp/app/views/home/report_exception.html.erb +0 -1
  65. data/spec/dummyapp/app/views/js/test.html.erb +0 -1
  66. data/spec/dummyapp/app/views/layouts/_messages.html.erb +0 -5
  67. data/spec/dummyapp/app/views/layouts/_navigation.html.erb +0 -21
  68. data/spec/dummyapp/app/views/layouts/application.html.erb +0 -25
  69. data/spec/dummyapp/app/views/layouts/simple.html.erb +0 -18
  70. data/spec/dummyapp/app/views/users/index.html.erb +0 -8
  71. data/spec/dummyapp/app/views/users/show.html.erb +0 -3
  72. data/spec/dummyapp/config.ru +0 -4
  73. data/spec/dummyapp/config/application.rb +0 -59
  74. data/spec/dummyapp/config/boot.rb +0 -10
  75. data/spec/dummyapp/config/database.yml +0 -25
  76. data/spec/dummyapp/config/environment.rb +0 -5
  77. data/spec/dummyapp/config/environments/development.rb +0 -37
  78. data/spec/dummyapp/config/environments/production.rb +0 -67
  79. data/spec/dummyapp/config/environments/test.rb +0 -37
  80. data/spec/dummyapp/config/initializers/backtrace_silencers.rb +0 -7
  81. data/spec/dummyapp/config/initializers/inflections.rb +0 -15
  82. data/spec/dummyapp/config/initializers/mime_types.rb +0 -5
  83. data/spec/dummyapp/config/initializers/rollbar.rb +0 -26
  84. data/spec/dummyapp/config/initializers/secret_token.rb +0 -7
  85. data/spec/dummyapp/config/initializers/session_store.rb +0 -8
  86. data/spec/dummyapp/config/initializers/wrap_parameters.rb +0 -16
  87. data/spec/dummyapp/config/locales/devise.en.yml +0 -58
  88. data/spec/dummyapp/config/locales/en.yml +0 -5
  89. data/spec/dummyapp/config/routes.rb +0 -17
  90. data/spec/dummyapp/config/secrets.yml +0 -2
  91. data/spec/dummyapp/db/migrate/20121121184652_devise_create_users.rb +0 -46
  92. data/spec/dummyapp/db/migrate/20121121184654_add_name_to_users.rb +0 -5
  93. data/spec/dummyapp/db/migrate/20161219184410_create_books.rb +0 -10
  94. data/spec/dummyapp/db/migrate/20161219185529_add_username_to_users.rb +0 -5
  95. data/spec/dummyapp/db/schema.rb +0 -41
  96. data/spec/dummyapp/db/seeds.rb +0 -12
  97. data/spec/dummyapp/lib/assets/.gitkeep +0 -0
  98. data/spec/dummyapp/public/404.html +0 -26
  99. data/spec/dummyapp/public/422.html +0 -26
  100. data/spec/dummyapp/public/500.html +0 -25
  101. data/spec/dummyapp/public/favicon.ico +0 -0
  102. data/spec/dummyapp/script/rails +0 -6
  103. data/spec/fixtures/file1 +0 -1
  104. data/spec/fixtures/file2 +0 -1
  105. data/spec/fixtures/payloads/message.json +0 -25
  106. data/spec/fixtures/payloads/sample.trace.json +0 -275
  107. data/spec/fixtures/payloads/sample.trace_chain.json +0 -530
  108. data/spec/fixtures/plugins/dummy1.rb +0 -5
  109. data/spec/fixtures/plugins/dummy2.rb +0 -5
  110. data/spec/generators/rollbar/rollbar_generator_rails30_spec.rb +0 -31
  111. data/spec/generators/rollbar/rollbar_generator_spec.rb +0 -51
  112. data/spec/requests/home_spec.rb +0 -49
  113. data/spec/rollbar/configuration_spec.rb +0 -74
  114. data/spec/rollbar/delay/delayed_job_spec.rb +0 -22
  115. data/spec/rollbar/delay/girl_friday_spec.rb +0 -41
  116. data/spec/rollbar/delay/resque_spec.rb +0 -37
  117. data/spec/rollbar/delay/shoryuken_spec.rb +0 -44
  118. data/spec/rollbar/delay/thread_spec.rb +0 -27
  119. data/spec/rollbar/encoding/encoder_spec.rb +0 -63
  120. data/spec/rollbar/item/backtrace_spec.rb +0 -26
  121. data/spec/rollbar/item/frame_spec.rb +0 -267
  122. data/spec/rollbar/item_spec.rb +0 -736
  123. data/spec/rollbar/json/oj_spec.rb +0 -18
  124. data/spec/rollbar/json_spec.rb +0 -110
  125. data/spec/rollbar/lazy_store_spec.rb +0 -99
  126. data/spec/rollbar/logger_proxy_spec.rb +0 -69
  127. data/spec/rollbar/logger_spec.rb +0 -124
  128. data/spec/rollbar/middleware/js_spec.rb +0 -428
  129. data/spec/rollbar/middleware/sinatra_spec.rb +0 -197
  130. data/spec/rollbar/notifier_spec.rb +0 -67
  131. data/spec/rollbar/plugin_spec.rb +0 -209
  132. data/spec/rollbar/plugins/active_job_spec.rb +0 -45
  133. data/spec/rollbar/plugins/delayed_job/job_data_spec.rb +0 -48
  134. data/spec/rollbar/plugins/delayed_job_spec.rb +0 -129
  135. data/spec/rollbar/plugins/rack_spec.rb +0 -152
  136. data/spec/rollbar/plugins/rails_js_spec.rb +0 -19
  137. data/spec/rollbar/plugins/rake_spec.rb +0 -34
  138. data/spec/rollbar/plugins/resque/failure_spec.rb +0 -36
  139. data/spec/rollbar/plugins/sidekiq_spec.rb +0 -169
  140. data/spec/rollbar/plugins/validations_spec.rb +0 -56
  141. data/spec/rollbar/plugins_spec.rb +0 -68
  142. data/spec/rollbar/request_data_extractor_spec.rb +0 -321
  143. data/spec/rollbar/scrubbers/params_spec.rb +0 -598
  144. data/spec/rollbar/scrubbers/url_spec.rb +0 -240
  145. data/spec/rollbar/scrubbers_spec.rb +0 -31
  146. data/spec/rollbar/sidekig/clear_scope_spec.rb +0 -19
  147. data/spec/rollbar/truncation/frames_strategy_spec.rb +0 -70
  148. data/spec/rollbar/truncation/min_body_strategy_spec.rb +0 -57
  149. data/spec/rollbar/truncation/strings_strategy_spec.rb +0 -89
  150. data/spec/rollbar/truncation_spec.rb +0 -27
  151. data/spec/rollbar/util/hash_spec.rb +0 -22
  152. data/spec/rollbar/util/ip_anonymizer_spec.rb +0 -30
  153. data/spec/rollbar/util_spec.rb +0 -80
  154. data/spec/rollbar_bc_spec.rb +0 -380
  155. data/spec/rollbar_spec.rb +0 -1737
  156. data/spec/spec_helper.rb +0 -84
  157. data/spec/support/cause_exception.rb +0 -1
  158. data/spec/support/encoding_helpers.rb +0 -8
  159. data/spec/support/encodings/iso_8859_9 +0 -1
  160. data/spec/support/fixture_helpers.rb +0 -10
  161. data/spec/support/get_ip_raising.rb +0 -7
  162. data/spec/support/helpers.rb +0 -5
  163. data/spec/support/matchers.rb +0 -23
  164. data/spec/support/notifier_helpers.rb +0 -57
  165. data/spec/support/rollbar_api.rb +0 -57
  166. data/spec/support/secure_headers_mocks.rb +0 -83
  167. data/spec/support/shared_contexts.rb +0 -12
@@ -1,27 +0,0 @@
1
- require 'spec_helper'
2
- require 'rollbar/truncation'
3
-
4
- describe Rollbar::Truncation do
5
- describe '.truncate' do
6
- let(:payload) { {} }
7
-
8
- context 'if truncation is not needed' do
9
- it 'only calls RawStrategy is truncation is not needed' do
10
- allow(described_class).to receive(:truncate?).and_return(false)
11
- expect(Rollbar::Truncation::RawStrategy).to receive(:call).with(payload)
12
-
13
- Rollbar::Truncation.truncate(payload)
14
- end
15
- end
16
-
17
- context 'if truncation is needed' do
18
- it 'calls the next strategy, FramesStrategy' do
19
- allow(described_class).to receive(:truncate?).and_return(true, false)
20
- expect(Rollbar::Truncation::RawStrategy).to receive(:call).with(payload)
21
- expect(Rollbar::Truncation::FramesStrategy).to receive(:call).with(payload)
22
-
23
- Rollbar::Truncation.truncate(payload)
24
- end
25
- end
26
- end
27
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
- require 'rollbar/util/hash'
3
-
4
- describe Rollbar::Util::Hash do
5
- let(:value) do
6
- {
7
- :foo => 'bar',
8
- :bar => {
9
- :foo => 'bar',
10
- :bar => [{:foo => 'bar'}]
11
- },
12
- }
13
- end
14
-
15
- it 'converts the symbol keys to string' do
16
- new_hash = described_class.deep_stringify_keys(value)
17
-
18
- expect(new_hash['foo']).to be_eql('bar')
19
- expect(new_hash['bar']['foo']).to be_eql('bar')
20
- expect(new_hash['bar']['bar'][0]['foo']).to be_eql('bar')
21
- end
22
- end
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
- require 'rollbar/util/ip_anonymizer'
3
-
4
- describe Rollbar::Util::IPAnonymizer do
5
-
6
- before do
7
- Rollbar.configuration.anonymize_user_ip = true
8
- end
9
-
10
- context 'with IPv4 address' do
11
- let(:ip) { '127.0.0.1' }
12
-
13
- it 'anonymizes the IP by replacing the last octet with 0' do
14
- anonymized_ip = described_class.anonymize_ip(ip)
15
-
16
- expect(anonymized_ip).to be_eql(IPAddr.new('127.0.0.0').to_s)
17
- end
18
- end
19
-
20
- context 'with IPv6 address' do
21
- let(:ip) { '2001:0db8:85a3:0000:0000:8a2e:0370:7334' }
22
-
23
- it 'anonymizes the IP by replacing the last 80 bits with 0' do
24
-
25
- anonymized_ip = described_class.anonymize_ip(ip)
26
-
27
- expect(anonymized_ip).to be_eql(IPAddr.new('2001:db8:85a3::').to_s)
28
- end
29
- end
30
- end
@@ -1,80 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- require 'rollbar/util'
6
-
7
- describe Rollbar::Util do
8
- describe '.deep_merge' do
9
- context 'with nil arguments' do
10
- let(:data) do
11
- { :foo => :bar }
12
- end
13
-
14
- it 'doesnt fail and returns same hash' do
15
- result = Rollbar::Util.deep_merge(nil, data)
16
-
17
- expect(result).to be_eql(data)
18
- end
19
- end
20
- end
21
-
22
- describe '.enforce_valid_utf8' do
23
- # TODO(jon): all these tests should be removed since they are in
24
- # in spec/rollbar/encoding/encoder.rb.
25
- #
26
- # This should just check that in payload with simple values and
27
- # nested values are each one passed through Rollbar::Encoding.encode
28
- context 'with utf8 string and ruby > 1.8' do
29
- next unless String.instance_methods.include?(:force_encoding)
30
-
31
- let(:payload) { { :foo => 'Изменение' } }
32
-
33
- it 'just returns the same string' do
34
- payload_copy = payload.clone
35
- described_class.enforce_valid_utf8(payload_copy)
36
-
37
- expect(payload_copy[:foo]).to be_eql('Изменение')
38
- end
39
- end
40
-
41
- it 'should replace invalid utf8 values' do
42
- bad_key = force_to_ascii("inner \x92bad key")
43
-
44
- payload = {
45
- :bad_value => force_to_ascii("bad value 1\255"),
46
- :bad_value_2 => force_to_ascii("bad\255 value 2"),
47
- force_to_ascii("bad\255 key") => "good value",
48
- :hash => {
49
- :inner_bad_value => force_to_ascii("\255\255bad value 3"),
50
- bad_key.to_sym => 'inner good value',
51
- force_to_ascii("bad array key\255") => [
52
- 'good array value 1',
53
- force_to_ascii("bad\255 array value 1\255"),
54
- {
55
- :inner_inner_bad => force_to_ascii("bad inner \255inner value")
56
- }
57
- ]
58
- }
59
- }
60
-
61
-
62
- payload_copy = payload.clone
63
- described_class.enforce_valid_utf8(payload_copy)
64
-
65
- payload_copy[:bad_value].should == "bad value 1"
66
- payload_copy[:bad_value_2].should == "bad value 2"
67
- payload_copy["bad key"].should == "good value"
68
- payload_copy.keys.should_not include("bad\456 key")
69
- payload_copy[:hash][:inner_bad_value].should == "bad value 3"
70
- payload_copy[:hash][:"inner bad key"].should == 'inner good value'
71
- payload_copy[:hash]["bad array key"].should == [
72
- 'good array value 1',
73
- 'bad array value 1',
74
- {
75
- :inner_inner_bad => 'bad inner inner value'
76
- }
77
- ]
78
- end
79
- end
80
- end
@@ -1,380 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'logger'
4
- require 'spec_helper'
5
-
6
- describe Rollbar do
7
- let(:notifier) { Rollbar.notifier }
8
-
9
- context 'bc_report_message' do
10
- before do
11
- configure
12
- Rollbar.configure do |config|
13
- config.logger = logger_mock
14
- end
15
- end
16
-
17
- let(:logger_mock) { double('Rails.logger').as_null_object }
18
- let(:user) do
19
- User.create(:email => 'email@example.com',
20
- :encrypted_password => '',
21
- :created_at => Time.now,
22
- :updated_at => Time.now)
23
- end
24
-
25
- it 'should report simple messages' do
26
- logger_mock.should_receive(:info).with('[Rollbar] Scheduling item')
27
- logger_mock.should_receive(:info).with('[Rollbar] Success')
28
-
29
- Rollbar.report_message('Test message')
30
- end
31
-
32
- it 'should not report anything when disabled' do
33
- logger_mock.should_not_receive(:info).with('[Rollbar] Success')
34
-
35
- Rollbar.configure do |config|
36
- config.enabled = false
37
- end
38
-
39
- Rollbar.report_message('Test message that should be ignored')
40
- end
41
-
42
- it 'should report messages with extra data' do
43
- logger_mock.should_receive(:info).with('[Rollbar] Success')
44
- Rollbar.report_message('Test message with extra data', 'debug', :foo => 'bar',
45
- :hash => { :a => 123, :b => 'xyz' })
46
- end
47
-
48
- it 'should not crash with circular extra_data' do
49
- a = { :foo => 'bar' }
50
- b = { :a => a }
51
- c = { :b => b }
52
- a[:c] = c
53
-
54
- logger_mock.should_receive(:error).with(/\[Rollbar\] Reporting internal error encountered while sending data to Rollbar./)
55
-
56
- Rollbar.report_message('Test message with circular extra data', 'debug', a)
57
- end
58
-
59
- it 'should be able to report form validation errors when they are present' do
60
- logger_mock.should_receive(:info).with('[Rollbar] Success')
61
- user.errors.add(:example, 'error')
62
- user.report_validation_errors_to_rollbar
63
- end
64
-
65
- it 'should not report form validation errors when they are not present' do
66
- logger_mock.should_not_receive(:info).with('[Rollbar] Success')
67
- user.errors.clear
68
- user.report_validation_errors_to_rollbar
69
- end
70
- end
71
-
72
- context 'bc_report_message_with_request' do
73
- before(:each) do
74
- configure
75
- Rollbar.configure do |config|
76
- config.logger = logger_mock
77
- end
78
- end
79
-
80
- after do
81
- Rollbar.unconfigure
82
- configure
83
- end
84
-
85
- let(:logger_mock) { double('Rails.logger').as_null_object }
86
- let(:user) { User.create(:email => 'email@example.com', :encrypted_password => '', :created_at => Time.now, :updated_at => Time.now) }
87
-
88
- it 'should report simple messages' do
89
- allow(Rollbar).to receive(:notifier).and_return(notifier)
90
- logger_mock.should_receive(:info).with('[Rollbar] Scheduling item')
91
- logger_mock.should_receive(:info).with('[Rollbar] Success')
92
- Rollbar.report_message_with_request('Test message')
93
-
94
- Rollbar.last_report[:request].should be_nil
95
- Rollbar.last_report[:person].should be_nil
96
- end
97
-
98
- it 'should report messages with request, person data and extra data' do
99
- Rollbar.last_report = nil
100
-
101
- logger_mock.should_receive(:info).with('[Rollbar] Scheduling item')
102
- logger_mock.should_receive(:info).with('[Rollbar] Success')
103
-
104
- request_data = {
105
- :params => {:foo => 'bar'}
106
- }
107
-
108
- person_data = {
109
- :id => 123,
110
- :username => 'username'
111
- }
112
-
113
- extra_data = {
114
- :extra_foo => 'extra_bar'
115
- }
116
-
117
- Rollbar.report_message_with_request('Test message', 'info', request_data, person_data, extra_data)
118
-
119
- Rollbar.last_report[:request].should == request_data
120
- Rollbar.last_report[:person].should == person_data
121
- Rollbar.last_report[:body][:message][:extra][:extra_foo].should == 'extra_bar'
122
- end
123
- end
124
-
125
- context 'bc_report_exception' do
126
- before(:each) do
127
- configure
128
- Rollbar.configure do |config|
129
- config.logger = logger_mock
130
- end
131
-
132
- begin
133
- foo = bar
134
- rescue => e
135
- @exception = e
136
- end
137
- end
138
-
139
- after do
140
- Rollbar.unconfigure
141
- configure
142
- end
143
-
144
- let(:logger_mock) { double('Rails.logger').as_null_object }
145
-
146
- it 'should report exceptions without person or request data' do
147
- logger_mock.should_receive(:info).with('[Rollbar] Success')
148
- Rollbar.report_exception(@exception)
149
- end
150
-
151
- it 'should not report anything when disabled' do
152
- logger_mock.should_not_receive(:info).with('[Rollbar] Success')
153
- Rollbar.configure do |config|
154
- config.enabled = false
155
- end
156
-
157
- Rollbar.report_exception(@exception)
158
- end
159
-
160
- it 'should be enabled when freshly configured' do
161
- Rollbar.configuration.enabled.should == true
162
- end
163
-
164
- it 'should not be enabled when not configured' do
165
- Rollbar.clear_notifier!
166
-
167
- Rollbar.configuration.enabled.should be_nil
168
- Rollbar.report_exception(@exception).should == 'disabled'
169
- end
170
-
171
- it 'should stay disabled if configure is called again' do
172
- Rollbar.clear_notifier!
173
-
174
- # configure once, setting enabled to false.
175
- Rollbar.configure do |config|
176
- config.enabled = false
177
- end
178
-
179
- # now configure again (perhaps to change some other values)
180
- Rollbar.configure do |config| end
181
-
182
- Rollbar.configuration.enabled.should == false
183
- Rollbar.report_exception(@exception).should == 'disabled'
184
- end
185
-
186
- it 'should report exceptions with request and person data' do
187
- logger_mock.should_receive(:info).with('[Rollbar] Success')
188
- request_data = {
189
- :params => { :foo => 'bar' },
190
- :url => 'http://localhost/',
191
- :user_ip => '127.0.0.1',
192
- :headers => {},
193
- :GET => { 'baz' => 'boz' },
194
- :session => { :user_id => 123 },
195
- :method => 'GET',
196
- }
197
- person_data = {
198
- :id => 1,
199
- :username => 'test',
200
- :email => 'test@example.com'
201
- }
202
- Rollbar.report_exception(@exception, request_data, person_data)
203
- end
204
-
205
- # Skip jruby 1.9+ (https://github.com/jruby/jruby/issues/2373)
206
- if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby' && (not RUBY_VERSION =~ /^1\.9/)
207
- it 'should work with an IO object as rack.errors' do
208
- logger_mock.should_receive(:info).with('[Rollbar] Success')
209
-
210
- request_data = {
211
- :params => { :foo => 'bar' },
212
- :url => 'http://localhost/',
213
- :user_ip => '127.0.0.1',
214
- :headers => {},
215
- :GET => { 'baz' => 'boz' },
216
- :session => { :user_id => 123 },
217
- :method => 'GET',
218
- :env => { :'rack.errors' => IO.new(2, File::WRONLY) },
219
- }
220
-
221
- person_data = {
222
- :id => 1,
223
- :username => 'test',
224
- :email => 'test@example.com'
225
- }
226
-
227
- Rollbar.report_exception(@exception, request_data, person_data)
228
- end
229
- end
230
-
231
- it 'should ignore ignored exception classes' do
232
- Rollbar.configure do |config|
233
- config.exception_level_filters = { 'NameError' => 'ignore' }
234
- end
235
-
236
- logger_mock.should_not_receive(:info)
237
- logger_mock.should_not_receive(:error)
238
-
239
- Rollbar.report_exception(@exception)
240
- end
241
-
242
- it 'should ignore ignored persons' do
243
- Rollbar.configure do |config|
244
- config.ignored_person_ids += [1]
245
- end
246
-
247
- logger_mock.should_not_receive(:info)
248
- logger_mock.should_not_receive(:error)
249
-
250
- person_data = {
251
- :id => 1,
252
- :username => 'test',
253
- :email => 'test@example.com'
254
- }
255
- Rollbar.report_exception(@exception, {}, person_data)
256
- end
257
-
258
- it 'should not ignore non-ignored persons' do
259
- Rollbar.configure do |config|
260
- config.ignored_person_ids += [1]
261
- end
262
-
263
- Rollbar.last_report = nil
264
-
265
- person_data = {
266
- :id => 1,
267
- :username => 'test',
268
- :email => 'test@example.com'
269
- }
270
- Rollbar.report_exception(@exception, {}, person_data)
271
- Rollbar.last_report.should be_nil
272
-
273
- person_data = {
274
- :id => 2,
275
- :username => 'test2',
276
- :email => 'test2@example.com'
277
- }
278
- Rollbar.report_exception(@exception, {}, person_data)
279
- Rollbar.last_report.should_not be_nil
280
- end
281
-
282
- it 'should allow callables to set exception filtered level with :use_exception_level_filters option' do
283
- callable_mock = double
284
- Rollbar.configure do |config|
285
- config.exception_level_filters = { 'NameError' => callable_mock }
286
- end
287
-
288
- callable_mock.should_receive(:call).with(@exception).at_least(:once).and_return('info')
289
- logger_mock.should_receive(:info)
290
- logger_mock.should_not_receive(:error)
291
-
292
- Rollbar.report_exception(@exception)
293
- end
294
-
295
- it 'should not report exceptions when silenced' do
296
- notifier.should_not_receive :schedule_payload
297
-
298
- begin
299
- test_var = 1
300
- Rollbar.silenced do
301
- test_var = 2
302
- raise
303
- end
304
- rescue => e
305
- Rollbar.report_exception(e)
306
- end
307
-
308
- test_var.should == 2
309
- end
310
-
311
- it 'should report exception objects with no backtrace' do
312
- allow(Rollbar).to receive(:notifier).and_return(notifier)
313
-
314
- payload = nil
315
-
316
- notifier.stub(:schedule_item) do |*args|
317
- payload = args[0]
318
- end
319
-
320
- Rollbar.report_exception(StandardError.new('oops'))
321
-
322
- payload['data'][:body][:trace][:frames].should == []
323
- payload['data'][:body][:trace][:exception][:class].should == 'StandardError'
324
- payload['data'][:body][:trace][:exception][:message].should == 'oops'
325
- end
326
-
327
- it 'should return the exception data with a uuid, on platforms with SecureRandom' do
328
- if defined?(SecureRandom) and SecureRandom.respond_to?(:uuid)
329
- notifier.stub(:schedule_payload) do |*args| end
330
-
331
- exception_data = Rollbar.report_exception(StandardError.new('oops'))
332
- exception_data[:uuid].should_not be_nil
333
- end
334
- end
335
-
336
- it 'should report exception objects with nonstandard backtraces' do
337
- allow(Rollbar).to receive(:notifier).and_return(notifier)
338
-
339
- payload = nil
340
-
341
- notifier.stub(:schedule_item) do |*args|
342
- payload = args[0]
343
- end
344
-
345
- class CustomException < StandardError
346
- def backtrace
347
- ['custom backtrace line']
348
- end
349
- end
350
-
351
- exception = CustomException.new('oops')
352
-
353
- Rollbar.report_exception(exception)
354
-
355
- payload['data'][:body][:trace][:frames][0][:method].should == 'custom backtrace line'
356
- end
357
-
358
- it 'should report exceptions with a custom level' do
359
- allow(Rollbar).to receive(:notifier).and_return(notifier)
360
- payload = nil
361
-
362
- notifier.stub(:schedule_item) do |*args|
363
- payload = args[0]
364
- end
365
-
366
- Rollbar.report_exception(@exception)
367
-
368
- payload['data'][:level].should == 'error'
369
-
370
- Rollbar.report_exception(@exception, nil, nil, 'debug')
371
-
372
- payload['data'][:level].should == 'debug'
373
- end
374
- end
375
-
376
- # configure with some basic params
377
- def configure
378
- reconfigure_notifier
379
- end
380
- end