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,240 +0,0 @@
1
- require 'spec_helper'
2
- require 'rollbar/language_support'
3
- require 'rollbar/scrubbers/url'
4
-
5
- describe Rollbar::Scrubbers::URL do
6
- let(:options) do
7
- options = {
8
- :url => url,
9
- :scrub_fields => [:password, :secret],
10
- :scrub_user => false,
11
- :scrub_password => false,
12
- :randomize_scrub_length => true
13
- }
14
-
15
- if defined? whitelist
16
- options[:whitelist] = whitelist
17
- end
18
-
19
- options
20
- end
21
-
22
- describe '#call' do
23
- context 'cannot scrub URLs' do
24
- next if Rollbar::LanguageSupport.can_scrub_url?
25
-
26
- let(:url) { 'http://user:password@foo.com/some-interesting-path#fragment' }
27
-
28
- it 'returns the URL without any change' do
29
- expect(subject.call(options)).to be_eql(url)
30
- end
31
- end
32
-
33
- context 'with ruby different from 1.8' do
34
- next unless Rollbar::LanguageSupport.can_scrub_url?
35
-
36
- context 'without data to be scrubbed' do
37
- let(:url) { 'http://user:password@foo.com/some-interesting-path#fragment' }
38
-
39
- it 'returns the URL without any change' do
40
- expect(subject.call(options)).to be_eql(url)
41
- end
42
-
43
- context 'with arrays in params' do
44
- let(:url) { 'http://user:password@foo.com/some-interesting-path?foo[]=1&foo[]=2' }
45
-
46
- it 'returns the URL without any change' do
47
- expect(subject.call(options)).to be_eql(url)
48
- end
49
- end
50
- end
51
-
52
- context 'scrubbing user and password' do
53
- let(:options) do
54
- {
55
- :url => url,
56
- :scrub_fields => [],
57
- :scrub_password => true,
58
- :scrub_user => true
59
- }
60
- end
61
-
62
- let(:url) { 'http://user:password@foo.com/some-interesting-path#fragment' }
63
-
64
- it 'returns the URL without any change' do
65
- expected_url = /http:\/\/\*{3,8}:\*{3,8}@foo.com\/some-interesting\-path#fragment/
66
-
67
- expect(subject.call(options)).to match(expected_url)
68
- end
69
- end
70
-
71
- context 'with params to be filtered' do
72
- let(:url) { 'http://foo.com/some-interesting-path?foo=bar&password=mypassword&secret=somevalue#fragment' }
73
-
74
- it 'returns the URL with some params filtered' do
75
- expected_url = /http:\/\/foo.com\/some-interesting-path\?foo=bar&password=\*{3,8}&secret=\*{3,8}#fragment/
76
-
77
- expect(subject.call(options)).to match(expected_url)
78
- end
79
-
80
- context 'having array params' do
81
- let(:url) { 'http://foo.com/some-interesting-path?foo=bar&password[]=mypassword&password[]=otherpassword&secret=somevalue#fragment' }
82
-
83
- it 'returns the URL with some params filtered' do
84
- expected_url = /http:\/\/foo.com\/some-interesting-path\?foo=bar&password\[\]=\*{3,8}&password\[\]=\*{3,8}&secret=\*{3,8}#fragment/
85
-
86
- expect(subject.call(options)).to match(expected_url)
87
- end
88
- end
89
- end
90
-
91
- context 'with no-random scrub length' do
92
- let(:options) do
93
- {
94
- :url => url,
95
- :scrub_fields => [:password, :secret],
96
- :scrub_user => false,
97
- :scrub_password => false,
98
- :randomize_scrub_length => false
99
- }
100
- end
101
- let(:password) { 'longpasswordishere' }
102
- let(:url) { "http://foo.com/some-interesting-path?foo=bar&password=#{password}#fragment" }
103
-
104
- it 'scrubs with same length than the scrubbed param' do
105
- expected_url = /http:\/\/foo.com\/some-interesting-path\?foo=bar&password=\*{#{password.length}}#fragment/
106
-
107
- expect(subject.call(options)).to match(expected_url)
108
- end
109
- end
110
-
111
- context 'with malformed URL or not able to be parsed' do
112
- let(:url) { '\this\is\not\a\valid\url' }
113
- before { reconfigure_notifier }
114
-
115
- it 'return the same url' do
116
- expect(Rollbar.logger).to receive(:error).and_call_original
117
- expect(subject.call(options)).to be_eql(url)
118
- end
119
- end
120
-
121
- context 'with URL with spaces and arrays' do
122
- let(:url) do
123
- 'https://server.com/api/v1/assignments/4430038?user_id=1&assignable_id=2&starts_at=Wed%20Jul%2013%202016%2000%3A00%3A00%20GMT-0700%20(PDT)&ends_at=Fri%20Jul%2029%202016%2000%3A00%3A00%20GMT-0700%20(PDT)&allocation_mode=hours_per_day&percent=&fixed_hours=&hours_per_day=0&auth=REMOVED&___uidh=2228207862&password[]=mypassword'
124
- end
125
- let(:options) do
126
- {
127
- :url => url,
128
- :scrub_fields => [:passwd, :password, :password_confirmation, :secret, :confirm_password, :secret_token, :api_key, :access_token, :auth, :SAMLResponse, :password, :auth],
129
- :scrub_user => true,
130
- :scrub_password => true,
131
- :randomize_scrub_length => true
132
- }
133
- end
134
-
135
- it 'doesnt logs error' do
136
- expect(Rollbar.logger).not_to receive(:error).and_call_original
137
- subject.call(options)
138
- end
139
- end
140
- end
141
-
142
- context 'in whitelist mode' do
143
-
144
- let(:whitelist) { [:user, :secret] }
145
-
146
- context 'with ruby different from 1.8' do
147
- next unless Rollbar::LanguageSupport.can_scrub_url?
148
-
149
- context 'cannot scrub URLs' do
150
-
151
- let(:url) { 'http://user:password@foo.com/some-interesting-path#fragment' }
152
-
153
- it 'returns the URL without any change' do
154
- expect(subject.call(options)).to be_eql(url)
155
- end
156
- end
157
-
158
- context 'scrubbing user and password' do
159
-
160
- let(:options) do
161
- {
162
- :url => url,
163
- :scrub_fields => [],
164
- :scrub_password => true,
165
- :scrub_user => true,
166
- :whitelist => whitelist
167
- }
168
- end
169
-
170
- let(:url) { 'http://user:password@foo.com/some-interesting-path#fragment' }
171
-
172
- it 'returns the URL without any change' do
173
- expected_url = /http:\/\/\*{3,8}:\*{3,8}@foo.com\/some-interesting\-path#fragment/
174
-
175
- expect(subject.call(options)).to match(expected_url)
176
- end
177
- end
178
-
179
- context 'with scrub_all' do
180
- let(:options) do
181
- {
182
- :url => url,
183
- :scrub_fields => [:scrub_all],
184
- :scrub_password => false,
185
- :scrub_user => false,
186
- :whitelist => whitelist
187
- }
188
- end
189
- let(:url) { 'http://foo.com/some-interesting-path?foo=bar&password=mypassword&secret=somevalue&dont_scrub=foo#fragment' }
190
-
191
- it 'returns the URL with some params filtered' do
192
- expected_url = /http:\/\/foo.com\/some-interesting-path\?foo=\*{3,8}&password=\*{3,8}&secret=somevalue&dont_scrub=\*{3,8}#fragment/
193
-
194
- expect(subject.call(options)).to match(expected_url)
195
- end
196
-
197
- context 'having array params' do
198
- let(:url) { 'http://foo.com/some-interesting-path?foo=bar&password[]=mypassword&password[]=otherpassword&secret=somevalue&dont_scrub=foo#fragment' }
199
-
200
- it 'returns the URL with some params filtered' do
201
- expected_url = /http:\/\/foo.com\/some-interesting-path\?foo=\*{3,8}&password\[\]=\*{3,8}&password\[\]=\*{3,8}&secret=somevalue&dont_scrub=\*{3,8}#fragment/
202
-
203
- expect(subject.call(options)).to match(expected_url)
204
- end
205
- end
206
- end
207
-
208
- context 'with params to be filtered' do
209
- let(:options) do
210
- {
211
- :url => url,
212
- :scrub_fields => [:dont_scrub, :secret, :password, :foo],
213
- :scrub_password => false,
214
- :scrub_user => false,
215
- :whitelist => whitelist
216
- }
217
- end
218
-
219
- let(:url) { 'http://foo.com/some-interesting-path?foo=bar&password=mypassword&secret=somevalue&dont_scrub=foo#fragment' }
220
-
221
- it 'returns the URL with some params filtered' do
222
- expected_url = /http:\/\/foo.com\/some-interesting-path\?foo=\*{3,8}&password=\*{3,8}&secret=somevalue&dont_scrub=\*{3,8}#fragment/
223
-
224
- expect(subject.call(options)).to match(expected_url)
225
- end
226
-
227
- context 'having array params' do
228
- let(:url) { 'http://foo.com/some-interesting-path?foo=bar&password[]=mypassword&password[]=otherpassword&secret=somevalue&dont_scrub=foo#fragment' }
229
-
230
- it 'returns the URL with some params filtered' do
231
- expected_url = /http:\/\/foo.com\/some-interesting-path\?foo=\*{3,8}&password\[\]=\*{3,8}&password\[\]=\*{3,8}&secret=somevalue&dont_scrub=\*{3,8}#fragment/
232
-
233
- expect(subject.call(options)).to match(expected_url)
234
- end
235
- end
236
- end
237
- end
238
- end
239
- end
240
- end
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'rollbar/scrubbers'
4
-
5
- describe Rollbar::Scrubbers do
6
- describe '.scrub_value' do
7
- context 'with random scrub length' do
8
- before do
9
- allow(Rollbar.configuration).to receive(:randomize_scrub_length).and_return(true)
10
- end
11
-
12
- let(:value) { 'herecomesaverylongvalue' }
13
-
14
- it 'randomizes the scrubbed string' do
15
- expect(described_class.scrub_value(value)).to match(/\*{3,8}/)
16
- end
17
- end
18
-
19
- context 'with no-random scrub length' do
20
- before do
21
- allow(Rollbar.configuration).to receive(:randomize_scrub_length).and_return(false)
22
- end
23
-
24
- let(:value) { 'herecomesaverylongvalue' }
25
-
26
- it 'randomizes the scrubbed string' do
27
- expect(described_class.scrub_value(value)).to match(/\*{#{value.length}}/)
28
- end
29
- end
30
- end
31
- end
@@ -1,19 +0,0 @@
1
- require 'spec_helper'
2
-
3
- unless RUBY_VERSION == '1.8.7'
4
- require 'sidekiq'
5
- end
6
-
7
- Rollbar.plugins.load!
8
-
9
- describe Rollbar::Sidekiq::ClearScope, :reconfigure_notifier => false do
10
- describe '#call' do
11
- let(:middleware_block) { proc{} }
12
-
13
- it 'sends the error to Rollbar::Sidekiq.handle_exception' do
14
- expect(Rollbar).to receive(:reset_notifier!)
15
-
16
- subject.call(nil, nil, nil, &middleware_block)
17
- end
18
- end
19
- end unless RUBY_VERSION == '1.8.7'
@@ -1,70 +0,0 @@
1
- require 'spec_helper'
2
- require 'rollbar/truncation/frames_strategy'
3
-
4
- describe Rollbar::Truncation::FramesStrategy do
5
- def expand_frames(frames)
6
- frames * (1 + 300 / frames.count)
7
- end
8
-
9
- describe '.call', :fixture => :payload do
10
- context 'with trace key' do
11
- let(:payload_fixture) { 'payloads/sample.trace.json' }
12
- let(:frames) { payload['data']['body']['trace']['frames'].clone }
13
-
14
- before do
15
- payload['data']['body']['trace']['frames'] = expand_frames(frames)
16
- end
17
-
18
- it 'returns a new payload with 300 frames' do
19
- result = Rollbar::JSON.load(described_class.call(payload))
20
-
21
- new_frames = result['data']['body']['trace']['frames']
22
-
23
- expect(new_frames.count).to be_eql(300)
24
- expect(new_frames.first).to be_eql(frames.first)
25
- expect(new_frames.last).to be_eql(frames.last)
26
- end
27
- end
28
-
29
- context 'with trace_chain key' do
30
- let(:payload_fixture) { 'payloads/sample.trace_chain.json' }
31
-
32
- let(:frames1) { payload['data']['body']['trace_chain'][0]['frames'].clone }
33
- let(:frames2) { payload['data']['body']['trace_chain'][1]['frames'].clone }
34
-
35
- before do
36
- payload['data']['body']['trace_chain'][0]['frames'] = expand_frames(frames1)
37
- payload['data']['body']['trace_chain'][1]['frames'] = expand_frames(frames2)
38
- end
39
-
40
- it 'returns a new payload with 300 frames for each chain item' do
41
- result = Rollbar::JSON.load(described_class.call(payload))
42
-
43
- new_frames1 = result['data']['body']['trace_chain'][0]['frames']
44
- new_frames2 = result['data']['body']['trace_chain'][1]['frames']
45
-
46
- expect(new_frames1.count).to be_eql(300)
47
- expect(new_frames1.first).to be_eql(frames1.first)
48
- expect(new_frames1.last).to be_eql(frames1.last)
49
-
50
- expect(new_frames2.count).to be_eql(300)
51
- expect(new_frames2.first).to be_eql(frames2.first)
52
- expect(new_frames2.last).to be_eql(frames2.last)
53
- end
54
- end
55
-
56
- context 'without trace or trace_chain', :fixture => :payload do
57
- let(:payload_fixture) { 'payloads/sample.trace.json' }
58
-
59
- before do
60
- payload['data']['body'].delete('trace')
61
- end
62
-
63
- it 'returns the original payload' do
64
- result = Rollbar::JSON.load(described_class.call(payload))
65
-
66
- expect(result).to be_eql(payload)
67
- end
68
- end
69
- end
70
- end
@@ -1,57 +0,0 @@
1
- require 'spec_helper'
2
- require 'rollbar/truncation/frames_strategy'
3
-
4
- describe Rollbar::Truncation::MinBodyStrategy do
5
- describe '.call', :fixture => :payload do
6
- let(:message) { 'a' * 1_000 }
7
-
8
- context 'with trace key ' do
9
- let(:payload_fixture) { 'payloads/sample.trace.json' }
10
- let!(:frames) { payload['data']['body']['trace']['frames'].clone }
11
-
12
- before do
13
- payload['data']['body']['trace']['exception']['message'] = message
14
- end
15
-
16
- it 'truncates the exception message and frames array' do
17
- result = Rollbar::JSON.load(described_class.call(payload))
18
-
19
- trace = result['data']['body']['trace']
20
- expect(trace['frames'].count).to eq 2
21
- expect(trace['exception']['message']).to be_eql('a' * 255)
22
- end
23
- end
24
-
25
- context 'with trace_chain key ' do
26
- let(:payload_fixture) { 'payloads/sample.trace_chain.json' }
27
- let!(:frames1) { payload['data']['body']['trace_chain'][0]['frames'].clone }
28
- let!(:frames2) { payload['data']['body']['trace_chain'][1]['frames'].clone }
29
-
30
- before do
31
- payload['data']['body']['trace_chain'][0]['exception']['message'] = message
32
- payload['data']['body']['trace_chain'][1]['exception']['message'] = message
33
- end
34
-
35
- it 'truncates the exception message and frames array' do
36
- result = Rollbar::JSON.load(described_class.call(payload))
37
-
38
- traces = result['data']['body']['trace_chain']
39
- expect(traces[0]['frames'].count).to eq 2
40
- expect(traces[0]['exception']['message']).to be_eql('a' * 255)
41
-
42
- expect(traces[1]['frames'].count).to eq 2
43
- expect(traces[1]['exception']['message']).to be_eql('a' * 255)
44
- end
45
- end
46
-
47
- context 'with a message payload' do
48
- let(:payload_fixture) { 'payloads/message.json' }
49
-
50
- it "doesn't truncate anything and returns same payload" do
51
- result = Rollbar::JSON.load(described_class.call(payload))
52
-
53
- expect(result).to be_eql(payload)
54
- end
55
- end
56
- end
57
- end
@@ -1,89 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
- require 'rollbar/truncation/frames_strategy'
5
-
6
- describe Rollbar::Truncation::StringsStrategy do
7
- describe '.call' do
8
- let(:long_message) { 'a' * 2000 }
9
- let(:payload) do
10
- {
11
- 'truncated' => long_message,
12
- 'not_truncated' => '123456',
13
- 'hash' => {
14
- 'inner_truncated' => long_message,
15
- 'inner_not_truncated' => '567',
16
- 'array' => ['12345678', '12', { 'inner_inner' => long_message }]
17
- }
18
- }
19
- end
20
-
21
- it 'should truncate all nested strings in the payload' do
22
- result = Rollbar::JSON.load(described_class.call(payload))
23
-
24
- expect(result['truncated'].size).to be_eql(1024)
25
- expect(result['hash']['inner_truncated'].size).to be_eql(1024)
26
- expect(result['hash']['array'][2]['inner_inner'].size).to be_eql(1024)
27
- end
28
-
29
- context 'with utf8 strings' do
30
- let(:long_message) { 'Ŝǻмρļẻ śţяịņģ' + 'a' * 2000 }
31
- let(:payload) do
32
- {
33
- 'truncated' => long_message,
34
- 'not_truncated' => '123456',
35
- }
36
- end
37
-
38
- it 'should truncate utf8 strings properly' do
39
- result = Rollbar::JSON.load(described_class.call(payload))
40
- expect(result['truncated']).to match(/^Ŝǻмρļẻ śţяịņģa*\.{3}/)
41
- end
42
- end
43
-
44
- context 'when first threshold is not enough' do
45
- let(:payload) do
46
- 512.times.to_enum.reduce({}) do |hash, i|
47
- hash[i.to_s] = 'a' * 1024
48
- hash
49
- end
50
- end
51
-
52
- it 'truncates to 512 size strings' do
53
- result = Rollbar::JSON.load(described_class.call(payload))
54
-
55
- expect(result['0'].size).to be_eql(512)
56
- end
57
- end
58
-
59
- context 'when second threshold is still not enough' do
60
- let(:payload) do
61
- 1024.times.to_enum.reduce({}) do |hash, i|
62
- hash[i.to_s] = 'a' * 1024
63
- hash
64
- end
65
- end
66
-
67
- it 'truncates to 256 size strings, the third threshold' do
68
- result = Rollbar::JSON.load(described_class.call(payload))
69
-
70
- expect(result['0'].size).to be_eql(256)
71
- end
72
- end
73
-
74
- context 'when third threshold is still not enough' do
75
- let(:payload) do
76
- 1024.times.to_enum.reduce({}) do |hash, i|
77
- hash[i.to_s] = 'a' * 1024
78
- hash
79
- end
80
- end
81
-
82
- it 'just return the value for third threshold' do
83
- result = Rollbar::JSON.load(described_class.call(payload))
84
-
85
- expect(result['0'].size).to be_eql(256)
86
- end
87
- end
88
- end
89
- end