rollbar 2.8.3 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +18 -0
  3. data/.github/pull_request_template.md +34 -0
  4. data/.github/workflows/ci.yml +67 -0
  5. data/.gitignore +3 -1
  6. data/.rubocop.yml +206 -7
  7. data/Appraisals +10 -10
  8. data/CHANGELOG.md +257 -3
  9. data/Gemfile +74 -13
  10. data/README.md +38 -833
  11. data/Rakefile +0 -0
  12. data/THANKS.md +1 -0
  13. data/data/rollbar.snippet.js +1 -1
  14. data/docs/configuration.md +64 -3
  15. data/docs/plugins.md +46 -0
  16. data/gemfiles/rails50.gemfile +56 -0
  17. data/gemfiles/rails51.gemfile +57 -0
  18. data/gemfiles/rails52.gemfile +56 -0
  19. data/gemfiles/rails60.gemfile +52 -0
  20. data/gemfiles/rails61.gemfile +52 -0
  21. data/gemfiles/rails70.gemfile +52 -0
  22. data/gemfiles/rails71.gemfile +52 -0
  23. data/lib/generators/rollbar/rollbar_generator.rb +24 -20
  24. data/lib/generators/rollbar/templates/{initializer.rb → initializer.erb} +19 -5
  25. data/lib/rails/rollbar_runner.rb +26 -22
  26. data/lib/rollbar/capistrano.rb +78 -38
  27. data/lib/rollbar/capistrano3.rb +62 -1
  28. data/lib/rollbar/capistrano_tasks.rb +166 -0
  29. data/lib/rollbar/configuration.rb +291 -71
  30. data/lib/rollbar/delay/active_job.rb +17 -0
  31. data/lib/rollbar/delay/delayed_job.rb +23 -0
  32. data/lib/rollbar/delay/girl_friday.rb +4 -9
  33. data/lib/rollbar/delay/resque.rb +3 -6
  34. data/lib/rollbar/delay/shoryuken.rb +36 -0
  35. data/lib/rollbar/delay/sidekiq.rb +6 -8
  36. data/lib/rollbar/delay/sucker_punch.rb +17 -22
  37. data/lib/rollbar/delay/thread.rb +74 -3
  38. data/lib/rollbar/deploy.rb +91 -0
  39. data/lib/rollbar/encoding/encoder.rb +22 -11
  40. data/lib/rollbar/encoding.rb +2 -7
  41. data/lib/rollbar/exception_reporter.rb +36 -12
  42. data/lib/rollbar/item/backtrace.rb +118 -0
  43. data/lib/rollbar/item/frame.rb +121 -0
  44. data/lib/rollbar/item/locals.rb +103 -0
  45. data/lib/rollbar/item.rb +314 -0
  46. data/lib/rollbar/js.rb +0 -28
  47. data/lib/rollbar/json.rb +7 -55
  48. data/lib/rollbar/language_support.rb +7 -19
  49. data/lib/rollbar/lazy_store.rb +8 -12
  50. data/lib/rollbar/logger.rb +71 -0
  51. data/lib/rollbar/logger_proxy.rb +18 -1
  52. data/lib/rollbar/middleware/js/json_value.rb +36 -0
  53. data/lib/rollbar/middleware/js.rb +297 -0
  54. data/lib/rollbar/middleware/rack/builder.rb +4 -4
  55. data/lib/rollbar/middleware/rack/test_session.rb +4 -4
  56. data/lib/rollbar/middleware/rack.rb +52 -0
  57. data/lib/rollbar/middleware/rails/rollbar.rb +19 -7
  58. data/lib/rollbar/middleware/rails/show_exceptions.rb +21 -9
  59. data/lib/rollbar/middleware/sinatra.rb +2 -40
  60. data/lib/rollbar/notifier/trace_with_bindings.rb +75 -0
  61. data/lib/rollbar/notifier.rb +913 -0
  62. data/lib/rollbar/plugin.rb +126 -0
  63. data/lib/rollbar/plugins/active_job.rb +54 -0
  64. data/lib/rollbar/plugins/basic_socket.rb +31 -0
  65. data/lib/rollbar/plugins/delayed_job/job_data.rb +50 -0
  66. data/lib/rollbar/plugins/delayed_job/plugin.rb +88 -0
  67. data/lib/rollbar/plugins/delayed_job.rb +12 -0
  68. data/lib/rollbar/plugins/error_context.rb +11 -0
  69. data/lib/rollbar/plugins/goalie.rb +65 -0
  70. data/lib/rollbar/plugins/rack.rb +18 -0
  71. data/lib/rollbar/plugins/rails/controller_methods.rb +56 -0
  72. data/lib/rollbar/plugins/rails/error_subscriber.rb +12 -0
  73. data/lib/rollbar/plugins/rails/railtie30.rb +18 -0
  74. data/lib/rollbar/plugins/rails/railtie32.rb +18 -0
  75. data/lib/rollbar/plugins/rails/railtie_mixin.rb +37 -0
  76. data/lib/rollbar/plugins/rails.rb +89 -0
  77. data/lib/rollbar/plugins/rake.rb +73 -0
  78. data/lib/rollbar/plugins/resque/failure.rb +39 -0
  79. data/lib/rollbar/plugins/resque.rb +11 -0
  80. data/lib/rollbar/plugins/sidekiq/plugin.rb +77 -0
  81. data/lib/rollbar/plugins/sidekiq.rb +37 -0
  82. data/lib/rollbar/plugins/thread.rb +14 -0
  83. data/lib/rollbar/plugins/validations.rb +45 -0
  84. data/lib/rollbar/plugins.rb +47 -0
  85. data/lib/rollbar/rails.rb +0 -1
  86. data/lib/rollbar/rake_tasks.rb +4 -66
  87. data/lib/rollbar/request_data_extractor.rb +157 -117
  88. data/lib/rollbar/rollbar_test.rb +38 -0
  89. data/lib/rollbar/scrubbers/params.rb +133 -0
  90. data/lib/rollbar/scrubbers/url.rb +90 -35
  91. data/lib/rollbar/scrubbers.rb +13 -0
  92. data/lib/rollbar/truncation/frames_strategy.rb +2 -1
  93. data/lib/rollbar/truncation/min_body_strategy.rb +3 -4
  94. data/lib/rollbar/truncation/mixin.rb +1 -1
  95. data/lib/rollbar/truncation/remove_any_key_strategy.rb +126 -0
  96. data/lib/rollbar/truncation/remove_extra_strategy.rb +37 -0
  97. data/lib/rollbar/truncation/remove_request_strategy.rb +21 -0
  98. data/lib/rollbar/truncation/strings_strategy.rb +6 -5
  99. data/lib/rollbar/truncation.rb +10 -4
  100. data/lib/rollbar/util/hash.rb +37 -6
  101. data/lib/rollbar/util/ip_anonymizer.rb +33 -0
  102. data/lib/rollbar/util/ip_obfuscator.rb +1 -1
  103. data/lib/rollbar/util.rb +101 -55
  104. data/lib/rollbar/version.rb +1 -1
  105. data/lib/rollbar.rb +91 -879
  106. data/lib/tasks/benchmark.rake +104 -0
  107. data/lib/tasks/tasks.rake +3 -3
  108. data/rollbar.gemspec +21 -32
  109. data/spec/support/rollbar_api.rb +67 -0
  110. metadata +78 -439
  111. data/.travis.yml +0 -155
  112. data/gemfiles/rails30.gemfile +0 -20
  113. data/gemfiles/rails31.gemfile +0 -16
  114. data/gemfiles/rails32.gemfile +0 -17
  115. data/gemfiles/rails40.gemfile +0 -17
  116. data/gemfiles/rails41.gemfile +0 -15
  117. data/gemfiles/rails42.gemfile +0 -15
  118. data/lib/rollbar/active_job.rb +0 -11
  119. data/lib/rollbar/active_record_extension.rb +0 -14
  120. data/lib/rollbar/core_ext/basic_socket.rb +0 -7
  121. data/lib/rollbar/core_ext/thread.rb +0 -9
  122. data/lib/rollbar/delayed_job.rb +0 -78
  123. data/lib/rollbar/encoding/legacy_encoder.rb +0 -20
  124. data/lib/rollbar/goalie.rb +0 -33
  125. data/lib/rollbar/js/frameworks/rails.rb +0 -29
  126. data/lib/rollbar/js/frameworks.rb +0 -6
  127. data/lib/rollbar/js/middleware.rb +0 -129
  128. data/lib/rollbar/js/version.rb +0 -5
  129. data/lib/rollbar/json/default.rb +0 -11
  130. data/lib/rollbar/json/oj.rb +0 -15
  131. data/lib/rollbar/rack.rb +0 -9
  132. data/lib/rollbar/rails/controller_methods.rb +0 -40
  133. data/lib/rollbar/railtie.rb +0 -46
  134. data/lib/rollbar/rake.rb +0 -38
  135. data/lib/rollbar/sidekiq.rb +0 -40
  136. data/lib/rollbar/tasks/rollbar.cap +0 -45
  137. data/spec/cacert.pem +0 -3988
  138. data/spec/controllers/home_controller_spec.rb +0 -455
  139. data/spec/delay/sidekiq_spec.rb +0 -61
  140. data/spec/delay/sucker_punch_spec.rb +0 -25
  141. data/spec/delayed/backend/test.rb +0 -139
  142. data/spec/delayed/serialization/test.rb +0 -0
  143. data/spec/dummyapp/.gitignore +0 -73
  144. data/spec/dummyapp/Rakefile +0 -7
  145. data/spec/dummyapp/app/assets/javascripts/application.js +0 -3
  146. data/spec/dummyapp/app/assets/stylesheets/application.css.scss +0 -37
  147. data/spec/dummyapp/app/controllers/application_controller.rb +0 -3
  148. data/spec/dummyapp/app/controllers/home_controller.rb +0 -60
  149. data/spec/dummyapp/app/controllers/users_controller.rb +0 -17
  150. data/spec/dummyapp/app/helpers/.gitkeep +0 -0
  151. data/spec/dummyapp/app/mailers/.gitkeep +0 -0
  152. data/spec/dummyapp/app/models/.gitkeep +0 -0
  153. data/spec/dummyapp/app/models/user.rb +0 -7
  154. data/spec/dummyapp/app/views/devise/registrations/edit.html.erb +0 -27
  155. data/spec/dummyapp/app/views/devise/registrations/new.html.erb +0 -20
  156. data/spec/dummyapp/app/views/devise/shared/_links.html.erb +0 -25
  157. data/spec/dummyapp/app/views/home/cause_exception.html.erb +0 -1
  158. data/spec/dummyapp/app/views/home/index.html.erb +0 -4
  159. data/spec/dummyapp/app/views/home/report_exception.html.erb +0 -1
  160. data/spec/dummyapp/app/views/js/test.html.erb +0 -1
  161. data/spec/dummyapp/app/views/layouts/_messages.html.erb +0 -5
  162. data/spec/dummyapp/app/views/layouts/_navigation.html.erb +0 -21
  163. data/spec/dummyapp/app/views/layouts/application.html.erb +0 -25
  164. data/spec/dummyapp/app/views/layouts/simple.html.erb +0 -18
  165. data/spec/dummyapp/app/views/users/index.html.erb +0 -8
  166. data/spec/dummyapp/app/views/users/show.html.erb +0 -3
  167. data/spec/dummyapp/config/application.rb +0 -59
  168. data/spec/dummyapp/config/boot.rb +0 -10
  169. data/spec/dummyapp/config/database.yml +0 -25
  170. data/spec/dummyapp/config/environment.rb +0 -5
  171. data/spec/dummyapp/config/environments/development.rb +0 -37
  172. data/spec/dummyapp/config/environments/production.rb +0 -67
  173. data/spec/dummyapp/config/environments/test.rb +0 -37
  174. data/spec/dummyapp/config/initializers/backtrace_silencers.rb +0 -7
  175. data/spec/dummyapp/config/initializers/inflections.rb +0 -15
  176. data/spec/dummyapp/config/initializers/mime_types.rb +0 -5
  177. data/spec/dummyapp/config/initializers/rollbar.rb +0 -23
  178. data/spec/dummyapp/config/initializers/secret_token.rb +0 -7
  179. data/spec/dummyapp/config/initializers/session_store.rb +0 -8
  180. data/spec/dummyapp/config/initializers/wrap_parameters.rb +0 -16
  181. data/spec/dummyapp/config/locales/devise.en.yml +0 -58
  182. data/spec/dummyapp/config/locales/en.yml +0 -5
  183. data/spec/dummyapp/config/routes.rb +0 -17
  184. data/spec/dummyapp/config.ru +0 -4
  185. data/spec/dummyapp/db/migrate/20121121184652_devise_create_users.rb +0 -46
  186. data/spec/dummyapp/db/migrate/20121121184654_add_name_to_users.rb +0 -5
  187. data/spec/dummyapp/db/schema.rb +0 -35
  188. data/spec/dummyapp/db/seeds.rb +0 -12
  189. data/spec/dummyapp/lib/assets/.gitkeep +0 -0
  190. data/spec/dummyapp/public/404.html +0 -26
  191. data/spec/dummyapp/public/422.html +0 -26
  192. data/spec/dummyapp/public/500.html +0 -25
  193. data/spec/dummyapp/public/favicon.ico +0 -0
  194. data/spec/dummyapp/script/rails +0 -6
  195. data/spec/fixtures/file1 +0 -1
  196. data/spec/fixtures/file2 +0 -1
  197. data/spec/fixtures/payloads/message.json +0 -25
  198. data/spec/fixtures/payloads/sample.trace.json +0 -275
  199. data/spec/fixtures/payloads/sample.trace_chain.json +0 -530
  200. data/spec/generators/rollbar/rollbar_generator_spec.rb +0 -24
  201. data/spec/requests/home_spec.rb +0 -49
  202. data/spec/rollbar/active_job_spec.rb +0 -33
  203. data/spec/rollbar/configuration_spec.rb +0 -24
  204. data/spec/rollbar/delay/girl_friday_spec.rb +0 -41
  205. data/spec/rollbar/delay/resque_spec.rb +0 -37
  206. data/spec/rollbar/delay/thread_spec.rb +0 -27
  207. data/spec/rollbar/delayed_job/job_data.rb +0 -35
  208. data/spec/rollbar/delayed_job_spec.rb +0 -90
  209. data/spec/rollbar/encoding/encoder_spec.rb +0 -63
  210. data/spec/rollbar/js/frameworks/rails_spec.rb +0 -19
  211. data/spec/rollbar/js/middleware_spec.rb +0 -162
  212. data/spec/rollbar/json/oj_spec.rb +0 -18
  213. data/spec/rollbar/json_spec.rb +0 -110
  214. data/spec/rollbar/lazy_store_spec.rb +0 -99
  215. data/spec/rollbar/logger_proxy_spec.rb +0 -34
  216. data/spec/rollbar/middleware/rack/builder_spec.rb +0 -151
  217. data/spec/rollbar/middleware/sinatra_spec.rb +0 -197
  218. data/spec/rollbar/rake_spec.rb +0 -34
  219. data/spec/rollbar/request_data_extractor_spec.rb +0 -82
  220. data/spec/rollbar/scrubbers/url_spec.rb +0 -111
  221. data/spec/rollbar/sidekiq_spec.rb +0 -90
  222. data/spec/rollbar/truncation/frames_strategy_spec.rb +0 -70
  223. data/spec/rollbar/truncation/min_body_strategy_spec.rb +0 -57
  224. data/spec/rollbar/truncation/strings_strategy_spec.rb +0 -89
  225. data/spec/rollbar/truncation_spec.rb +0 -27
  226. data/spec/rollbar/util/hash_spec.rb +0 -22
  227. data/spec/rollbar/util_spec.rb +0 -19
  228. data/spec/rollbar_bc_spec.rb +0 -380
  229. data/spec/rollbar_spec.rb +0 -2067
  230. data/spec/spec_helper.rb +0 -49
  231. data/spec/support/cause_exception.rb +0 -1
  232. data/spec/support/encoding_helpers.rb +0 -8
  233. data/spec/support/encodings/iso_8859_9 +0 -1
  234. data/spec/support/fixture_helpers.rb +0 -10
  235. data/spec/support/get_ip_raising.rb +0 -7
  236. data/spec/support/helpers.rb +0 -5
  237. data/spec/support/notifier_helpers.rb +0 -36
  238. data/spec/support/shared_contexts.rb +0 -12
@@ -1,455 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe HomeController do
5
- let(:logger_mock) { double("Rails.logger").as_null_object }
6
- let(:notifier) { Rollbar.notifier }
7
-
8
- before do
9
- reset_configuration
10
- preconfigure_rails_notifier
11
-
12
- Rollbar.configure do |config|
13
- config.access_token = test_access_token
14
- config.logger = logger_mock
15
- config.request_timeout = 60
16
- end
17
- end
18
-
19
- context "rollbar base_data" do
20
- it 'should have the Rails environment' do
21
- data = Rollbar.notifier.send(:build_payload, 'error', 'message', nil, nil)
22
- data['data'][:environment].should == ::Rails.env
23
- end
24
-
25
- it 'should have an overridden environment' do
26
- Rollbar.configure do |config|
27
- config.environment = 'dev'
28
- end
29
-
30
- data = Rollbar.notifier.send(:build_payload, 'error', 'message', nil, nil)
31
- data['data'][:environment].should == 'dev'
32
- end
33
-
34
- it 'should use the default "unspecified" environment if rails env ends up being empty' do
35
- old_env, ::Rails.env = ::Rails.env, ''
36
- preconfigure_rails_notifier
37
-
38
- data = Rollbar.notifier.send(:build_payload, 'error', 'message', nil, nil)
39
- data['data'][:environment].should == 'unspecified'
40
-
41
- ::Rails.env = old_env
42
- end
43
- end
44
-
45
- context "rollbar controller methods with %s requests" % (local? ? 'local' : 'non-local') do
46
- # TODO run these for a a more-real request
47
- it "should build valid request data" do
48
- data = @controller.rollbar_request_data
49
- data.should have_key(:params)
50
- data.should have_key(:url)
51
- data.should have_key(:user_ip)
52
- data.should have_key(:headers)
53
- data.should have_key(:session)
54
- data.should have_key(:method)
55
- data.should have_key(:route)
56
- end
57
-
58
- it "should build empty person data when no one is logged-in" do
59
- data = @controller.rollbar_person_data
60
- data.should == {}
61
- end
62
-
63
- context 'rollbar_scrub_headers' do
64
- it 'should filter authentication by default' do
65
- headers = {
66
- 'HTTP_AUTHORIZATION' => 'some-user',
67
- 'HTTP_USER_AGENT' => 'spec'
68
- }
69
-
70
- filtered = controller.send( :rollbar_headers, headers )
71
-
72
- expect(filtered['Authorization']).to match(/\**/)
73
- expect(filtered['User-Agent']).to be_eql('spec')
74
- end
75
-
76
- it 'should filter custom headers' do
77
- Rollbar.configure do |config|
78
- config.scrub_headers = ['Auth', 'Token']
79
- end
80
-
81
- headers = {
82
- 'HTTP_AUTH' => 'auth-value',
83
- 'HTTP_TOKEN' => 'token-value',
84
- 'HTTP_CONTENT_TYPE' => 'text/html'
85
- }
86
-
87
- filtered = controller.send( :rollbar_headers, headers )
88
- expect(filtered['Auth']).to match(/\**/)
89
- expect(filtered['Token']).to match(/\**/)
90
- expect(filtered['Content-Type']).to be_eql('text/html')
91
- end
92
-
93
- end
94
-
95
- context "rollbar_request_url" do
96
- it "should build simple http urls" do
97
- req = controller.request
98
- req.host = 'rollbar.com'
99
-
100
- controller.send(:rollbar_request_data)[:url].should == 'http://rollbar.com'
101
- end
102
-
103
- it "should respect forwarded host" do
104
- req = controller.request
105
- req.host = '127.0.0.1:8080'
106
- req.env['HTTP_X_FORWARDED_HOST'] = 'test.com'
107
-
108
- controller.send(:rollbar_request_data)[:url].should == 'http://test.com'
109
- end
110
-
111
- it "should respect forwarded proto" do
112
- req = controller.request
113
- req.host = 'rollbar.com'
114
- req.env['HTTP_X_FORWARDED_PROTO'] = 'https'
115
-
116
- controller.send(:rollbar_request_data)[:url].should == 'https://rollbar.com'
117
- end
118
-
119
- it "should respect forwarded port" do
120
- req = controller.request
121
- req.host = '127.0.0.1:8080'
122
- req.env['HTTP_X_FORWARDED_HOST'] = 'test.com'
123
- req.env['HTTP_X_FORWARDED_PORT'] = '80'
124
-
125
- controller.send(:rollbar_request_data)[:url].should == 'http://test.com'
126
-
127
- req.env['HTTP_X_FORWARDED_PORT'] = '81'
128
- controller.send(:rollbar_request_data)[:url].should == 'http://test.com:81'
129
- end
130
- end
131
-
132
- context "rollbar_user_ip" do
133
- it "should use X-Real-Ip when set" do
134
- controller.request.env["HTTP_X_REAL_IP"] = '1.1.1.1'
135
- controller.request.env["HTTP_X_FORWARDED_FOR"] = '1.2.3.4'
136
- controller.send(:rollbar_request_data)[:user_ip].should == '1.1.1.1'
137
- end
138
-
139
- it "should use X-Forwarded-For when set" do
140
- controller.request.env["HTTP_X_FORWARDED_FOR"] = '1.2.3.4'
141
- controller.send(:rollbar_request_data)[:user_ip].should == '1.2.3.4'
142
- end
143
-
144
- it "should use the remote_addr when neither is set" do
145
- controller.send(:rollbar_request_data)[:user_ip].should == '0.0.0.0'
146
- end
147
-
148
- context "rollbar_user_ip obfuscator" do
149
- before do
150
- Rollbar.configure do |config|
151
- config.user_ip_obfuscator_secret = 'secret'
152
- end
153
- end
154
-
155
- it "should obfuscate the ip when user_ip_obfuscator_secret is set" do
156
- real_ip = '1.1.1.1'
157
- obfuscated_ip = '95.191.35.149'
158
- controller.request.env["HTTP_X_REAL_IP"] = real_ip
159
- controller.send(:rollbar_request_data)[:user_ip].should == obfuscated_ip
160
- end
161
-
162
- it "should clear the ip field when an invalid ip is provided" do
163
- invalid_ip = '1.1.1.999'
164
- controller.request.env["HTTP_X_REAL_IP"] = invalid_ip
165
- controller.send(:rollbar_request_data)[:user_ip].should == nil
166
- end
167
- end
168
- end
169
-
170
- context "rollbar_route_params", :type => 'request' do
171
- it "should save route params in request[:route]" do
172
- route = controller.send(:rollbar_request_data)[:route]
173
-
174
- route.should have_key(:controller)
175
- route.should have_key(:action)
176
- route.should have_key(:format)
177
-
178
- route[:controller].should == 'home'
179
- route[:action].should == 'index'
180
- end
181
-
182
- it "should save controller and action in the payload body" do
183
- post '/report_exception'
184
-
185
- route = controller.send(:rollbar_request_data)[:route]
186
-
187
- route[:controller].should == 'home'
188
- route[:action].should == 'report_exception'
189
-
190
- Rollbar.last_report.should_not be_nil
191
- Rollbar.last_report[:context].should == 'home#report_exception'
192
- end
193
- end
194
- end
195
-
196
- context "param_scrubbing", :type => "request" do
197
- it "should scrub the default scrub_fields" do
198
- params = {
199
- :passwd => "hidden",
200
- :password => "hidden",
201
- :secret => "hidden",
202
- :notpass => "visible",
203
- :secret_token => "f6805fea1cae0fb79c5e63bbdcd12bc6",
204
- }
205
-
206
- post '/report_exception', params
207
-
208
- filtered = Rollbar.last_report[:request][:params]
209
-
210
- expect(filtered["passwd"]).to match(/\**/)
211
- expect(filtered["password"]).to match(/\**/)
212
- expect(filtered["secret"]).to match(/\**/)
213
- expect(filtered["notpass"]).to match(/\**/)
214
- expect(filtered["secret_token"]).to match(/\**/)
215
- end
216
-
217
- it "should scrub custom scrub_fields" do
218
- Rollbar.configure do |config|
219
- config.scrub_fields = [:notpass, :secret]
220
- end
221
-
222
- params = {
223
- :passwd => "visible",
224
- :password => "visible",
225
- :secret => "hidden",
226
- :notpass => "hidden"
227
- }
228
-
229
- post '/report_exception', params
230
-
231
- filtered = Rollbar.last_report[:request][:params]
232
-
233
- filtered["passwd"].should == "visible"
234
- # config.filter_parameters is set to [:password] in
235
- # spec/dummyapp/config/application.rb
236
- expect(filtered["password"]).to match(/\**/)
237
- expect(filtered["secret"]).to match(/\**/)
238
- expect(filtered["notpass"]).to match(/\**/)
239
- end
240
- end
241
-
242
- describe "GET 'index'" do
243
- it "should be successful and report two messages" do
244
- logger_mock.should_receive(:info).with('[Rollbar] Success').twice
245
- get 'index'
246
- response.should be_success
247
- end
248
- end
249
-
250
- describe "'report_exception'", :type => "request" do
251
- it "should raise a NameError and report an exception after a GET" do
252
- logger_mock.should_receive(:info).with('[Rollbar] Success').once
253
-
254
- get '/report_exception'
255
- response.should be_success
256
- end
257
-
258
- it "should raise a NameError and have PUT params in the reported exception" do
259
- logger_mock.should_receive(:info).with('[Rollbar] Success')
260
-
261
- put '/report_exception', :putparam => "putval"
262
-
263
- Rollbar.last_report.should_not be_nil
264
- Rollbar.last_report[:request][:params]["putparam"].should == "putval"
265
- end
266
-
267
- context 'using deprecated report_exception' do
268
- it 'reports the errors successfully' do
269
- logger_mock.should_receive(:info).with('[Rollbar] Success')
270
-
271
- put '/deprecated_report_exception', :putparam => "putval"
272
-
273
- Rollbar.last_report.should_not be_nil
274
- Rollbar.last_report[:request][:params]["putparam"].should == "putval"
275
- end
276
- end
277
-
278
- it "should raise a NameError and have JSON POST params" do
279
- logger_mock.should_receive(:info).with('[Rollbar] Success')
280
- @request.env["HTTP_ACCEPT"] = "application/json"
281
-
282
- params = { :jsonparam => 'jsonval' }.to_json
283
- post '/report_exception', params, { 'CONTENT_TYPE' => 'application/json' }
284
-
285
- Rollbar.last_report.should_not be_nil
286
- Rollbar.last_report[:request][:params]['jsonparam'].should == 'jsonval'
287
- end
288
- end
289
-
290
- describe "'cause_exception'", :type => "request" do
291
- it "should raise an uncaught exception and report a message" do
292
- logger_mock.should_receive(:info).with('[Rollbar] Success').once
293
-
294
- expect { get '/cause_exception' }.to raise_exception
295
- end
296
-
297
- context 'show_exceptions' do
298
- before(:each) do
299
- if Dummy::Application.respond_to? :env_config
300
- config = Dummy::Application.env_config
301
- else
302
- config = Dummy::Application.env_defaults
303
- end
304
-
305
- config['action_dispatch.show_exceptions'] = true
306
- end
307
-
308
- after(:each) do
309
- if Dummy::Application.respond_to? :env_config
310
- config = Dummy::Application.env_config
311
- else
312
- config = Dummy::Application.env_defaults
313
- end
314
-
315
- config['action_dispatch.show_exceptions'] = false
316
- end
317
-
318
- it "middleware should catch the exception and only report to rollbar once" do
319
- logger_mock.should_receive(:info).with('[Rollbar] Success').once
320
-
321
- get '/cause_exception'
322
- end
323
-
324
- it 'should not fail if the controller doesnt contain the person method' do
325
- Rollbar.configure do |config|
326
- config.person_method = 'invalid_method'
327
- end
328
-
329
- get '/cause_exception'
330
- end
331
-
332
- context 'with logged user' do
333
- let(:user) do
334
- User.create(:email => 'foo@bar.com',
335
- :username => 'the_username')
336
- end
337
-
338
- before { cookies[:session_id] = user.id }
339
-
340
- it 'sends the current user data' do
341
- put '/report_exception', 'foo' => 'bar'
342
-
343
- person_data = Rollbar.last_report[:person]
344
-
345
- expect(person_data[:id]).to be_eql(user.id)
346
- expect(person_data[:email]).to be_eql(user.email)
347
- expect(person_data[:username]).to be_eql(user.username)
348
- end
349
- end
350
- end
351
- end
352
-
353
- context 'with routing errors', :type => :request do
354
- it 'raises a RoutingError exception' do
355
- expect { get '/foo/bar', :foo => :bar }.to raise_exception
356
-
357
- report = Rollbar.last_report
358
- expect(report[:request][:params]['foo']).to be_eql('bar')
359
- end
360
- end
361
-
362
- context 'with ip parsing raising error' do
363
- it 'raise a IpSpoofAttackError exception' do
364
- controller.request.env['action_dispatch.remote_ip'] = GetIpRaising.new
365
-
366
- expect do
367
- expect(controller.send(:rollbar_request_data)[:user_ip]).to be_nil
368
- end.not_to raise_exception(GetIpRaising::IpSpoofAttackError)
369
- end
370
- end
371
-
372
- context 'with file uploads',:type => "request" do
373
- let(:file1) { fixture_file_upload('spec/fixtures/file1') }
374
- let(:file2) { fixture_file_upload('spec/fixtures/file2') }
375
-
376
- context 'with a single upload' do
377
- it "saves attachment data" do
378
- expect { post '/file_upload', :upload => file1 }.to raise_exception
379
-
380
- upload_param = Rollbar.last_report[:request][:params]['upload']
381
-
382
- expect(upload_param).to have_key(:filename)
383
- expect(upload_param).to have_key(:type)
384
- expect(upload_param).to have_key(:name)
385
- expect(upload_param).to have_key(:head)
386
-
387
- expect(upload_param[:tempfile]).to be_eql("Skipped value of class 'Tempfile'")
388
- end
389
- end
390
-
391
- context 'with multiple uploads', :type => :request do
392
- it "saves attachment data for all uploads" do
393
- expect { post '/file_upload', :upload => [file1, file2] }.to raise_exception
394
- sent_params = Rollbar.last_report[:request][:params]['upload']
395
-
396
- expect(sent_params).to be_kind_of(Array)
397
- expect(sent_params).to have(2).items
398
- end
399
- end
400
- end
401
-
402
- context 'with session data', :type => :request do
403
- before { get '/set_session_data' }
404
- it 'reports the session data' do
405
- expect { get '/use_session_data' }.to raise_exception
406
-
407
- session_data = Rollbar.last_report[:request][:session]
408
-
409
- expect(session_data['some_value']).to be_eql('this-is-a-cool-value')
410
- end
411
- end
412
-
413
- context 'with json ACCEPT header', :type => 'request' do
414
- let(:params) { { :foo => :bar } }
415
-
416
- it 'parses the correct headers' do
417
- expect do
418
- post '/cause_exception', params, { 'ACCEPT' => 'application/vnd.github.v3+json' }
419
- end.to raise_exception
420
-
421
- expect(Rollbar.last_report[:request][:params]['foo']).to be_eql('bar')
422
- end
423
- end
424
-
425
- context 'with params to be scrubed from URL', :type => :request do
426
- next unless Rollbar::LanguageSupport.can_scrub_url?
427
-
428
- before do
429
- Rollbar.configure do |config|
430
- config.scrub_fields = [:password]
431
- end
432
- end
433
-
434
- let(:headers) do
435
- {
436
- 'ORIGINAL_FULLPATH' => '/cause_exception?password=my-secret-password'
437
- }
438
- end
439
-
440
- it 'scrubs sensible data from URL' do
441
- expect { get '/cause_exception', { :password => 'my-secret-password' }, headers }.to raise_exception
442
-
443
- request_data = Rollbar.last_report[:request]
444
-
445
- expect(request_data[:url]).to match('http:\/\/www.example.com\/cause_exception\?password=\*{3,8}')
446
- end
447
- end
448
-
449
- after(:each) do
450
- Rollbar.configure do |config|
451
- config.logger = ::Rails.logger
452
- end
453
- end
454
-
455
- end
@@ -1,61 +0,0 @@
1
- require 'spec_helper'
2
-
3
- begin
4
- require 'rollbar/delay/sidekiq'
5
- require 'sidekiq/testing'
6
- rescue LoadError
7
- module Rollbar
8
- module Delay
9
- class Sidekiq
10
- end
11
- end
12
- end
13
- end
14
-
15
- describe Rollbar::Delay::Sidekiq, :if => RUBY_VERSION != '1.8.7' do
16
- let(:payload) { anything }
17
-
18
- describe "#perform" do
19
- it "performs payload" do
20
- Rollbar.should_receive(:process_from_async_handler).with(payload)
21
- subject.perform payload
22
- end
23
- end
24
-
25
- describe "#call" do
26
- shared_examples "a Rollbar processor" do
27
-
28
- it "processes payload" do
29
- Rollbar.should_receive(:process_from_async_handler).with(payload)
30
-
31
- subject.call payload
32
- described_class.drain
33
- end
34
- end
35
-
36
- context "with default options" do
37
- it "enqueues to default queue" do
38
- options = Rollbar::Delay::Sidekiq::OPTIONS.merge('args' => payload)
39
- ::Sidekiq::Client.should_receive(:push).with options
40
-
41
- subject.call payload
42
- end
43
-
44
- it_behaves_like "a Rollbar processor"
45
- end
46
-
47
- context "with custom options" do
48
- let(:custom_config) { { 'queue' => 'custom_queue' } }
49
- subject { Rollbar::Delay::Sidekiq.new custom_config }
50
-
51
- it "enqueues to custom queue" do
52
- options = Rollbar::Delay::Sidekiq::OPTIONS.merge(custom_config.merge('args' => payload))
53
- ::Sidekiq::Client.should_receive(:push).with options
54
-
55
- subject.call payload
56
- end
57
-
58
- it_behaves_like "a Rollbar processor"
59
- end
60
- end
61
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- begin
4
- require 'rollbar/delay/sucker_punch'
5
- require 'sucker_punch/testing/inline'
6
- rescue LoadError
7
- module Rollbar
8
- module Delay
9
- class SuckerPunch
10
- end
11
- end
12
- end
13
- end
14
-
15
- describe Rollbar::Delay::SuckerPunch, :if => RUBY_VERSION != '1.8.7' do
16
- describe '.call' do
17
- let(:payload) { 'anything' }
18
-
19
- it 'performs the task asynchronously' do
20
- Rollbar.should_receive(:process_from_async_handler)
21
-
22
- Rollbar::Delay::SuckerPunch.call(payload)
23
- end
24
- end
25
- end
@@ -1,139 +0,0 @@
1
- require 'ostruct'
2
- require 'delayed/backend/base'
3
-
4
- # This code is taken from delayed_job/spec/delayed/backend/test.rb.
5
- #
6
- # It just works as a in memory job backend. Job#save is modified to create
7
- # a new Delayed::Worker and call #work_off(1) so the job is processed inline.
8
-
9
- module Delayed
10
- module Backend
11
- module Test
12
- def self.run
13
- worker.work_off(1)
14
- end
15
-
16
- def self.worker
17
- prepare_worker unless @worker
18
-
19
- @worker
20
- end
21
-
22
- def self.prepare_worker
23
- @worker = ::Delayed::Worker.new
24
- end
25
-
26
- class Job
27
- attr_accessor :id
28
- attr_accessor :priority
29
- attr_accessor :attempts
30
- attr_accessor :handler
31
- attr_accessor :last_error
32
- attr_accessor :run_at
33
- attr_accessor :locked_at
34
- attr_accessor :locked_by
35
- attr_accessor :failed_at
36
- attr_accessor :queue
37
-
38
- include Delayed::Backend::Base
39
-
40
- cattr_accessor :id
41
- self.id = 0
42
-
43
- def initialize(hash = {})
44
- self.attempts = 0
45
- self.priority = 0
46
- self.id = (self.class.id += 1)
47
- hash.each { |k, v| send("#{k}=", v) }
48
- end
49
-
50
- def self.all
51
- @jobs ||= []
52
- end
53
-
54
- def self.count
55
- all.size
56
- end
57
-
58
- def self.delete_all
59
- all.clear
60
- end
61
-
62
- def self.create(attrs = {})
63
- new(attrs).tap do |o|
64
- o.save
65
- end
66
- end
67
-
68
- def self.create!(*args)
69
- create(*args)
70
- end
71
-
72
- def self.clear_locks!(worker_name)
73
- all.select { |j| j.locked_by == worker_name }.each do |j|
74
- j.locked_by = nil
75
- j.locked_at = nil
76
- end
77
- end
78
-
79
- # Find a few candidate jobs to run (in case some immediately get locked by others).
80
- def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time) # rubocop:disable CyclomaticComplexity, PerceivedComplexity
81
- jobs = all.select do |j|
82
- j.run_at <= db_time_now &&
83
- (j.locked_at.nil? || j.locked_at < db_time_now - max_run_time || j.locked_by == worker_name) &&
84
- !j.failed?
85
- end
86
- jobs.select! { |j| j.priority <= Worker.max_priority } if Worker.max_priority
87
- jobs.select! { |j| j.priority >= Worker.min_priority } if Worker.min_priority
88
- jobs.select! { |j| Worker.queues.include?(j.queue) } if Worker.queues.any?
89
- jobs.sort_by! { |j| [j.priority, j.run_at] }[0..limit - 1]
90
- end
91
-
92
- # Lock this job for this worker.
93
- # Returns true if we have the lock, false otherwise.
94
- def lock_exclusively!(_max_run_time, worker)
95
- now = self.class.db_time_now
96
- if locked_by != worker
97
- # We don't own this job so we will update the locked_by name and the locked_at
98
- self.locked_at = now
99
- self.locked_by = worker
100
- end
101
-
102
- true
103
- end
104
-
105
- def self.db_time_now
106
- Time.current
107
- end
108
-
109
- def update_attributes(attrs = {})
110
- attrs.each { |k, v| send(:"#{k}=", v) }
111
- save
112
- end
113
-
114
- def destroy
115
- self.class.all.delete(self)
116
- end
117
-
118
- def save
119
- self.run_at ||= Time.current
120
-
121
- self.class.all << self unless self.class.all.include?(self)
122
-
123
- ::Delayed::Backend::Test.run
124
-
125
- true
126
- end
127
-
128
- def save!
129
- save
130
- end
131
-
132
- def reload
133
- reset
134
- self
135
- end
136
- end
137
- end
138
- end
139
- end
File without changes