bugsnag 6.7.3 → 6.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (369) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -0
  3. data/.rubocop_todo.yml +3 -1
  4. data/.travis.yml +40 -0
  5. data/CHANGELOG.md +22 -0
  6. data/Gemfile +9 -4
  7. data/VERSION +1 -1
  8. data/features/fixtures/delayed_job/.dockerignore +1 -0
  9. data/features/fixtures/delayed_job/Dockerfile +12 -0
  10. data/features/fixtures/delayed_job/Gemfile +4 -0
  11. data/features/fixtures/docker-compose.yml +247 -0
  12. data/features/fixtures/plain/.dockerignore +2 -0
  13. data/features/fixtures/plain/Dockerfile +12 -0
  14. data/features/fixtures/plain/app/Gemfile +3 -0
  15. data/features/fixtures/plain/app/app.rb +40 -0
  16. data/features/fixtures/plain/app/configuration/api_key.rb +9 -0
  17. data/features/fixtures/plain/app/configuration/proxy.rb +14 -0
  18. data/features/fixtures/plain/app/configuration/send_handled.rb +7 -0
  19. data/features/fixtures/plain/app/configuration/send_unhandled.rb +9 -0
  20. data/features/fixtures/plain/app/delivery/fork_threadpool.rb +25 -0
  21. data/features/fixtures/plain/app/delivery/synchronous.rb +14 -0
  22. data/features/fixtures/plain/app/delivery/threadpool.rb +14 -0
  23. data/features/fixtures/plain/app/exception_data/crash.rb +34 -0
  24. data/features/fixtures/plain/app/exception_data/handled_context.rb +10 -0
  25. data/features/fixtures/plain/app/exception_data/handled_hash.rb +10 -0
  26. data/features/fixtures/plain/app/exception_data/handled_meta_data.rb +10 -0
  27. data/features/fixtures/plain/app/exception_data/handled_user_id.rb +10 -0
  28. data/features/fixtures/plain/app/exception_data/unhandled_context.rb +7 -0
  29. data/features/fixtures/plain/app/exception_data/unhandled_hash.rb +7 -0
  30. data/features/fixtures/plain/app/exception_data/unhandled_meta_data.rb +7 -0
  31. data/features/fixtures/plain/app/exception_data/unhandled_user_id.rb +7 -0
  32. data/features/fixtures/plain/app/filters/additional_filters.rb +11 -0
  33. data/features/fixtures/plain/app/filters/default_filters.rb +15 -0
  34. data/features/fixtures/plain/app/handled/block_metadata.rb +15 -0
  35. data/features/fixtures/plain/app/handled/ignore_exception.rb +12 -0
  36. data/features/fixtures/plain/app/handled/notify_exception.rb +9 -0
  37. data/features/fixtures/plain/app/handled/notify_string.rb +9 -0
  38. data/features/fixtures/plain/app/ignore_classes/handled.rb +8 -0
  39. data/features/fixtures/plain/app/ignore_classes/ignore_error.rb +8 -0
  40. data/features/fixtures/plain/app/ignore_classes/unhandled.rb +4 -0
  41. data/features/fixtures/plain/app/report_modification/add_tab.rb +16 -0
  42. data/features/fixtures/plain/app/report_modification/add_tab_existing.rb +22 -0
  43. data/features/fixtures/plain/app/report_modification/add_tab_override.rb +19 -0
  44. data/features/fixtures/plain/app/report_modification/ignore_report.rb +9 -0
  45. data/features/fixtures/plain/app/report_modification/initiators/handled_before_notify.rb +10 -0
  46. data/features/fixtures/plain/app/report_modification/initiators/handled_block.rb +8 -0
  47. data/features/fixtures/plain/app/report_modification/initiators/unhandled_before_notify.rb +11 -0
  48. data/features/fixtures/plain/app/report_modification/modify_api_key.rb +9 -0
  49. data/features/fixtures/plain/app/report_modification/modify_severity.rb +9 -0
  50. data/features/fixtures/plain/app/report_modification/remove_user_details.rb +14 -0
  51. data/features/fixtures/plain/app/report_modification/set_custom_user_details.rb +16 -0
  52. data/features/fixtures/plain/app/report_modification/set_user_details.rb +13 -0
  53. data/features/fixtures/plain/app/stack_frame_modification/initiators/handled_before_notify.rb +25 -0
  54. data/features/fixtures/plain/app/stack_frame_modification/initiators/handled_block.rb +24 -0
  55. data/features/fixtures/plain/app/stack_frame_modification/initiators/unhandled_before_notify.rb +26 -0
  56. data/features/fixtures/plain/app/stack_frame_modification/mark_frames_in_project.rb +13 -0
  57. data/features/fixtures/plain/app/stack_frame_modification/remove_stack_frame.rb +9 -0
  58. data/features/fixtures/plain/app/unhandled/Interrupt.rb +6 -0
  59. data/features/fixtures/plain/app/unhandled/bad_syntax.rb +1 -0
  60. data/features/fixtures/plain/app/unhandled/custom_error.rb +9 -0
  61. data/features/fixtures/plain/app/unhandled/load_error.rb +6 -0
  62. data/features/fixtures/plain/app/unhandled/local_jump_error.rb +10 -0
  63. data/features/fixtures/plain/app/unhandled/name_error.rb +6 -0
  64. data/features/fixtures/plain/app/unhandled/no_method_error.rb +6 -0
  65. data/features/fixtures/plain/app/unhandled/runtime_error.rb +6 -0
  66. data/features/fixtures/plain/app/unhandled/syntax_error.rb +6 -0
  67. data/features/fixtures/plain/app/unhandled/system_call_error.rb +6 -0
  68. data/features/fixtures/plain/app/unhandled/system_exit.rb +6 -0
  69. data/features/fixtures/plain/json/delivery_fork.json +4 -0
  70. data/features/fixtures/plain/json/delivery_synchronous.json +4 -0
  71. data/features/fixtures/plain/json/delivery_threadpool.json +4 -0
  72. data/features/fixtures/plain/json/filters_default_metadata_filters.json +9 -0
  73. data/features/fixtures/rack1/.dockerignore +1 -0
  74. data/features/fixtures/rack1/Dockerfile +12 -0
  75. data/features/fixtures/rack1/Gemfile +4 -0
  76. data/features/fixtures/rack1/app.rb +8 -0
  77. data/features/fixtures/rack2/.dockerignore +1 -0
  78. data/features/fixtures/rack2/Dockerfile +12 -0
  79. data/features/fixtures/rack2/Gemfile +4 -0
  80. data/features/fixtures/rack2/app.rb +8 -0
  81. data/features/fixtures/rails3/.dockerignore +1 -0
  82. data/features/fixtures/rails3/Dockerfile +16 -0
  83. data/features/fixtures/rails3/app/.gitignore +15 -0
  84. data/features/fixtures/rails3/app/Gemfile +13 -0
  85. data/features/fixtures/rails3/app/Rakefile +7 -0
  86. data/features/fixtures/rails3/app/app/assets/images/rails.png +0 -0
  87. data/features/fixtures/rails3/app/app/assets/javascripts/application.js +15 -0
  88. data/features/fixtures/rails3/app/app/assets/stylesheets/application.css +13 -0
  89. data/features/fixtures/rails3/app/app/controllers/api_key_controller.rb +20 -0
  90. data/features/fixtures/rails3/app/app/controllers/app_type_controller.rb +20 -0
  91. data/features/fixtures/rails3/app/app/controllers/app_version_controller.rb +25 -0
  92. data/features/fixtures/rails3/app/app/controllers/application_controller.rb +7 -0
  93. data/features/fixtures/rails3/app/app/controllers/auto_notify_controller.rb +31 -0
  94. data/features/fixtures/rails3/app/app/controllers/before_notify_controller.rb +44 -0
  95. data/features/fixtures/rails3/app/app/controllers/handled_controller.rb +26 -0
  96. data/features/fixtures/rails3/app/app/controllers/ignore_classes_controller.rb +23 -0
  97. data/features/fixtures/rails3/app/app/controllers/metadata_filters_controller.rb +16 -0
  98. data/features/fixtures/rails3/app/app/controllers/project_root_controller.rb +25 -0
  99. data/features/fixtures/rails3/app/app/controllers/release_stage_controller.rb +20 -0
  100. data/features/fixtures/rails3/app/app/controllers/send_code_controller.rb +20 -0
  101. data/features/fixtures/rails3/app/app/controllers/send_environment_controller.rb +12 -0
  102. data/features/fixtures/rails3/app/app/controllers/session_tracking_controller.rb +20 -0
  103. data/features/fixtures/rails3/app/app/controllers/unhandled_controller.rb +11 -0
  104. data/features/fixtures/rails3/app/app/controllers/warden_controller.rb +30 -0
  105. data/features/fixtures/rails3/app/app/helpers/application_helper.rb +2 -0
  106. data/features/fixtures/rails3/app/app/mailers/.gitkeep +0 -0
  107. data/features/fixtures/rails3/app/app/models/.gitkeep +0 -0
  108. data/features/fixtures/rails3/app/app/models/user.rb +6 -0
  109. data/features/fixtures/rails3/app/app/views/layouts/application.html.erb +14 -0
  110. data/features/fixtures/rails3/app/config.ru +4 -0
  111. data/features/fixtures/rails3/app/config/application.rb +67 -0
  112. data/features/fixtures/rails3/app/config/boot.rb +6 -0
  113. data/features/fixtures/rails3/app/config/database.yml +31 -0
  114. data/features/fixtures/rails3/app/config/environment.rb +5 -0
  115. data/features/fixtures/rails3/app/config/environments/development.rb +37 -0
  116. data/features/fixtures/rails3/app/config/environments/production.rb +67 -0
  117. data/features/fixtures/rails3/app/config/environments/rails_env.rb +37 -0
  118. data/features/fixtures/rails3/app/config/initializers/bugsnag.rb +14 -0
  119. data/features/fixtures/rails3/app/config/initializers/secret_token.rb +7 -0
  120. data/features/fixtures/rails3/app/config/initializers/session_store.rb +8 -0
  121. data/features/fixtures/rails3/app/config/initializers/warden.rb +3 -0
  122. data/features/fixtures/rails3/app/config/initializers/wrap_parameters.rb +14 -0
  123. data/features/fixtures/rails3/app/config/locales/en.yml +5 -0
  124. data/features/fixtures/rails3/app/config/routes.rb +18 -0
  125. data/features/fixtures/rails3/app/db/migrate/20180423142727_create_users.rb +45 -0
  126. data/features/fixtures/rails3/app/db/schema.rb +37 -0
  127. data/features/fixtures/rails3/app/db/seeds.rb +7 -0
  128. data/features/fixtures/rails3/app/lib/assets/.gitkeep +0 -0
  129. data/features/fixtures/rails3/app/lib/strategies/token_strategy.rb +12 -0
  130. data/features/fixtures/rails3/app/lib/tasks/.gitkeep +0 -0
  131. data/features/fixtures/rails3/app/log/.gitkeep +0 -0
  132. data/features/fixtures/rails3/app/public/404.html +26 -0
  133. data/features/fixtures/rails3/app/public/422.html +26 -0
  134. data/features/fixtures/rails3/app/public/500.html +25 -0
  135. data/features/fixtures/rails3/app/public/favicon.ico +0 -0
  136. data/features/fixtures/rails3/app/public/index.html +241 -0
  137. data/features/fixtures/rails3/app/public/robots.txt +5 -0
  138. data/features/fixtures/rails3/app/script/rails +6 -0
  139. data/features/fixtures/rails4/.dockerignore +1 -0
  140. data/features/fixtures/rails4/Dockerfile +18 -0
  141. data/features/fixtures/rails4/app/.gitignore +16 -0
  142. data/features/fixtures/rails4/app/Gemfile +42 -0
  143. data/features/fixtures/rails4/app/README.rdoc +28 -0
  144. data/features/fixtures/rails4/app/Rakefile +6 -0
  145. data/features/fixtures/rails4/app/app/assets/images/.keep +0 -0
  146. data/features/fixtures/rails4/app/app/assets/javascripts/application.js +16 -0
  147. data/features/fixtures/rails4/app/app/assets/stylesheets/application.css +13 -0
  148. data/features/fixtures/rails4/app/app/controllers/api_key_controller.rb +20 -0
  149. data/features/fixtures/rails4/app/app/controllers/app_type_controller.rb +20 -0
  150. data/features/fixtures/rails4/app/app/controllers/app_version_controller.rb +25 -0
  151. data/features/fixtures/rails4/app/app/controllers/application_controller.rb +7 -0
  152. data/features/fixtures/rails4/app/app/controllers/auto_notify_controller.rb +31 -0
  153. data/features/fixtures/rails4/app/app/controllers/before_notify_controller.rb +44 -0
  154. data/features/fixtures/rails4/app/app/controllers/concerns/.keep +0 -0
  155. data/features/fixtures/rails4/app/app/controllers/devise_controller.rb +32 -0
  156. data/features/fixtures/rails4/app/app/controllers/handled_controller.rb +26 -0
  157. data/features/fixtures/rails4/app/app/controllers/ignore_classes_controller.rb +23 -0
  158. data/features/fixtures/rails4/app/app/controllers/metadata_filters_controller.rb +16 -0
  159. data/features/fixtures/rails4/app/app/controllers/project_root_controller.rb +25 -0
  160. data/features/fixtures/rails4/app/app/controllers/release_stage_controller.rb +20 -0
  161. data/features/fixtures/rails4/app/app/controllers/send_code_controller.rb +20 -0
  162. data/features/fixtures/rails4/app/app/controllers/send_environment_controller.rb +12 -0
  163. data/features/fixtures/rails4/app/app/controllers/session_tracking_controller.rb +20 -0
  164. data/features/fixtures/rails4/app/app/controllers/unhandled_controller.rb +11 -0
  165. data/features/fixtures/rails4/app/app/helpers/application_helper.rb +2 -0
  166. data/features/fixtures/rails4/app/app/mailers/.keep +0 -0
  167. data/features/fixtures/rails4/app/app/models/.keep +0 -0
  168. data/features/fixtures/rails4/app/app/models/concerns/.keep +0 -0
  169. data/features/fixtures/rails4/app/app/models/user.rb +6 -0
  170. data/features/fixtures/rails4/app/app/views/layouts/application.html.erb +14 -0
  171. data/features/fixtures/rails4/app/config.ru +4 -0
  172. data/features/fixtures/rails4/app/config/application.rb +23 -0
  173. data/features/fixtures/rails4/app/config/boot.rb +4 -0
  174. data/features/fixtures/rails4/app/config/database.yml +31 -0
  175. data/features/fixtures/rails4/app/config/environment.rb +5 -0
  176. data/features/fixtures/rails4/app/config/environments/development.rb +31 -0
  177. data/features/fixtures/rails4/app/config/environments/production.rb +81 -0
  178. data/features/fixtures/rails4/app/config/environments/rails_env.rb +30 -0
  179. data/features/fixtures/rails4/app/config/environments/test.rb +31 -0
  180. data/features/fixtures/rails4/app/config/initializers/backtrace_silencers.rb +7 -0
  181. data/features/fixtures/rails4/app/config/initializers/bugsnag.rb +14 -0
  182. data/features/fixtures/rails4/app/config/initializers/devise.rb +283 -0
  183. data/features/fixtures/rails4/app/config/initializers/filter_parameter_logging.rb +5 -0
  184. data/features/fixtures/rails4/app/config/initializers/inflections.rb +16 -0
  185. data/features/fixtures/rails4/app/config/initializers/mime_types.rb +5 -0
  186. data/features/fixtures/rails4/app/config/initializers/secret_token.rb +12 -0
  187. data/features/fixtures/rails4/app/config/initializers/session_store.rb +3 -0
  188. data/features/fixtures/rails4/app/config/initializers/wrap_parameters.rb +14 -0
  189. data/features/fixtures/rails4/app/config/locales/devise.en.yml +64 -0
  190. data/features/fixtures/rails4/app/config/locales/en.yml +23 -0
  191. data/features/fixtures/rails4/app/config/routes.rb +19 -0
  192. data/features/fixtures/rails4/app/db/migrate/20180420160315_devise_create_users.rb +47 -0
  193. data/features/fixtures/rails4/app/db/seeds.rb +7 -0
  194. data/features/fixtures/rails4/app/lib/assets/.keep +0 -0
  195. data/features/fixtures/rails4/app/lib/tasks/.keep +0 -0
  196. data/features/fixtures/rails4/app/log/.keep +0 -0
  197. data/features/fixtures/rails4/app/public/404.html +58 -0
  198. data/features/fixtures/rails4/app/public/422.html +58 -0
  199. data/features/fixtures/rails4/app/public/500.html +57 -0
  200. data/features/fixtures/rails4/app/public/favicon.ico +0 -0
  201. data/features/fixtures/rails4/app/public/robots.txt +5 -0
  202. data/features/fixtures/rails4/app/test/controllers/.keep +0 -0
  203. data/features/fixtures/rails4/app/test/fixtures/.keep +0 -0
  204. data/features/fixtures/rails4/app/test/helpers/.keep +0 -0
  205. data/features/fixtures/rails4/app/test/integration/.keep +0 -0
  206. data/features/fixtures/rails4/app/test/mailers/.keep +0 -0
  207. data/features/fixtures/rails4/app/test/models/.keep +0 -0
  208. data/features/fixtures/rails4/app/test/test_helper.rb +15 -0
  209. data/features/fixtures/rails5/.dockerignore +1 -0
  210. data/features/fixtures/rails5/Dockerfile +18 -0
  211. data/features/fixtures/rails5/app/.gitignore +21 -0
  212. data/features/fixtures/rails5/app/Gemfile +47 -0
  213. data/features/fixtures/rails5/app/README.md +24 -0
  214. data/features/fixtures/rails5/app/Rakefile +6 -0
  215. data/features/fixtures/rails5/app/app/assets/config/manifest.js +3 -0
  216. data/features/fixtures/rails5/app/app/assets/images/.keep +0 -0
  217. data/features/fixtures/rails5/app/app/assets/javascripts/application.js +16 -0
  218. data/features/fixtures/rails5/app/app/assets/javascripts/cable.js +13 -0
  219. data/features/fixtures/rails5/app/app/assets/javascripts/channels/.keep +0 -0
  220. data/features/fixtures/rails5/app/app/assets/stylesheets/application.css +15 -0
  221. data/features/fixtures/rails5/app/app/channels/application_cable/channel.rb +4 -0
  222. data/features/fixtures/rails5/app/app/channels/application_cable/connection.rb +4 -0
  223. data/features/fixtures/rails5/app/app/controllers/api_key_controller.rb +16 -0
  224. data/features/fixtures/rails5/app/app/controllers/app_type_controller.rb +16 -0
  225. data/features/fixtures/rails5/app/app/controllers/app_version_controller.rb +21 -0
  226. data/features/fixtures/rails5/app/app/controllers/application_controller.rb +7 -0
  227. data/features/fixtures/rails5/app/app/controllers/auto_notify_controller.rb +27 -0
  228. data/features/fixtures/rails5/app/app/controllers/before_notify_controller.rb +40 -0
  229. data/features/fixtures/rails5/app/app/controllers/clearance_controller.rb +33 -0
  230. data/features/fixtures/rails5/app/app/controllers/concerns/.keep +0 -0
  231. data/features/fixtures/rails5/app/app/controllers/handled_controller.rb +22 -0
  232. data/features/fixtures/rails5/app/app/controllers/ignore_classes_controller.rb +19 -0
  233. data/features/fixtures/rails5/app/app/controllers/metadata_filters_controller.rb +12 -0
  234. data/features/fixtures/rails5/app/app/controllers/project_root_controller.rb +21 -0
  235. data/features/fixtures/rails5/app/app/controllers/release_stage_controller.rb +16 -0
  236. data/features/fixtures/rails5/app/app/controllers/send_code_controller.rb +16 -0
  237. data/features/fixtures/rails5/app/app/controllers/send_environment_controller.rb +8 -0
  238. data/features/fixtures/rails5/app/app/controllers/session_tracking_controller.rb +16 -0
  239. data/features/fixtures/rails5/app/app/controllers/unhandled_controller.rb +7 -0
  240. data/features/fixtures/rails5/app/app/helpers/application_helper.rb +2 -0
  241. data/features/fixtures/rails5/app/app/jobs/application_job.rb +2 -0
  242. data/features/fixtures/rails5/app/app/mailers/application_mailer.rb +4 -0
  243. data/features/fixtures/rails5/app/app/models/application_record.rb +3 -0
  244. data/features/fixtures/rails5/app/app/models/concerns/.keep +0 -0
  245. data/features/fixtures/rails5/app/app/models/user.rb +3 -0
  246. data/features/fixtures/rails5/app/app/views/layouts/application.html.erb +14 -0
  247. data/features/fixtures/rails5/app/app/views/layouts/mailer.html.erb +13 -0
  248. data/features/fixtures/rails5/app/app/views/layouts/mailer.text.erb +1 -0
  249. data/features/fixtures/rails5/app/config.ru +5 -0
  250. data/features/fixtures/rails5/app/config/application.rb +15 -0
  251. data/features/fixtures/rails5/app/config/boot.rb +3 -0
  252. data/features/fixtures/rails5/app/config/cable.yml +9 -0
  253. data/features/fixtures/rails5/app/config/database.yml +29 -0
  254. data/features/fixtures/rails5/app/config/environment.rb +5 -0
  255. data/features/fixtures/rails5/app/config/environments/development.rb +55 -0
  256. data/features/fixtures/rails5/app/config/environments/production.rb +87 -0
  257. data/features/fixtures/rails5/app/config/environments/rails_env.rb +55 -0
  258. data/features/fixtures/rails5/app/config/environments/test.rb +55 -0
  259. data/features/fixtures/rails5/app/config/initializers/assets.rb +11 -0
  260. data/features/fixtures/rails5/app/config/initializers/backtrace_silencers.rb +7 -0
  261. data/features/fixtures/rails5/app/config/initializers/bugsnag.rb +14 -0
  262. data/features/fixtures/rails5/app/config/initializers/clearance.rb +5 -0
  263. data/features/fixtures/rails5/app/config/initializers/cookies_serializer.rb +5 -0
  264. data/features/fixtures/rails5/app/config/initializers/filter_parameter_logging.rb +5 -0
  265. data/features/fixtures/rails5/app/config/initializers/inflections.rb +16 -0
  266. data/features/fixtures/rails5/app/config/initializers/mime_types.rb +4 -0
  267. data/features/fixtures/rails5/app/config/initializers/new_framework_defaults.rb +24 -0
  268. data/features/fixtures/rails5/app/config/initializers/session_store.rb +3 -0
  269. data/features/fixtures/rails5/app/config/initializers/wrap_parameters.rb +14 -0
  270. data/features/fixtures/rails5/app/config/locales/devise.en.yml +64 -0
  271. data/features/fixtures/rails5/app/config/locales/en.yml +23 -0
  272. data/features/fixtures/rails5/app/config/puma.rb +47 -0
  273. data/features/fixtures/rails5/app/config/routes.rb +52 -0
  274. data/features/fixtures/rails5/app/config/secrets.yml +25 -0
  275. data/features/fixtures/rails5/app/config/spring.rb +6 -0
  276. data/features/fixtures/rails5/app/db/migrate/20180426095545_create_users.rb +17 -0
  277. data/features/fixtures/rails5/app/db/schema.rb +29 -0
  278. data/features/fixtures/rails5/app/db/seeds.rb +7 -0
  279. data/features/fixtures/rails5/app/lib/assets/.keep +0 -0
  280. data/features/fixtures/rails5/app/lib/tasks/.keep +0 -0
  281. data/features/fixtures/rails5/app/log/.keep +0 -0
  282. data/features/fixtures/rails5/app/public/404.html +67 -0
  283. data/features/fixtures/rails5/app/public/422.html +67 -0
  284. data/features/fixtures/rails5/app/public/500.html +66 -0
  285. data/features/fixtures/rails5/app/public/apple-touch-icon-precomposed.png +0 -0
  286. data/features/fixtures/rails5/app/public/apple-touch-icon.png +0 -0
  287. data/features/fixtures/rails5/app/public/favicon.ico +0 -0
  288. data/features/fixtures/rails5/app/public/robots.txt +5 -0
  289. data/features/fixtures/rails5/app/test/controllers/.keep +0 -0
  290. data/features/fixtures/rails5/app/test/fixtures/.keep +0 -0
  291. data/features/fixtures/rails5/app/test/fixtures/files/.keep +0 -0
  292. data/features/fixtures/rails5/app/test/helpers/.keep +0 -0
  293. data/features/fixtures/rails5/app/test/integration/.keep +0 -0
  294. data/features/fixtures/rails5/app/test/mailers/.keep +0 -0
  295. data/features/fixtures/rails5/app/test/models/.keep +0 -0
  296. data/features/fixtures/rails5/app/test/test_helper.rb +10 -0
  297. data/features/fixtures/rails5/app/tmp/.keep +0 -0
  298. data/features/fixtures/resque/.dockerignore +1 -0
  299. data/features/fixtures/resque/Dockerfile +13 -0
  300. data/features/fixtures/resque/Gemfile +6 -0
  301. data/features/fixtures/resque/Rakefile +4 -0
  302. data/features/fixtures/resque/app.rb +12 -0
  303. data/features/fixtures/sidekiq/.dockerignore +2 -0
  304. data/features/fixtures/sidekiq/Dockerfile +17 -0
  305. data/features/fixtures/sidekiq/app/Gemfile +4 -0
  306. data/features/fixtures/sidekiq/app/app.rb +35 -0
  307. data/features/fixtures/sidekiq/app/initializers/HandledError.rb +3 -0
  308. data/features/fixtures/sidekiq/app/initializers/UnhandledError.rb +3 -0
  309. data/features/fixtures/sidekiq/payloads/handled_metadata_ca_false.json +11 -0
  310. data/features/fixtures/sidekiq/payloads/handled_metadata_ca_true.json +12 -0
  311. data/features/fixtures/sidekiq/payloads/unhandled_metadata_ca_false.json +11 -0
  312. data/features/fixtures/sidekiq/payloads/unhandled_metadata_ca_true.json +12 -0
  313. data/features/fixtures/sinatra1/.dockerignore +1 -0
  314. data/features/fixtures/sinatra1/Dockerfile +12 -0
  315. data/features/fixtures/sinatra1/Gemfile +4 -0
  316. data/features/fixtures/sinatra1/app.rb +9 -0
  317. data/features/fixtures/sinatra2/.dockerignore +1 -0
  318. data/features/fixtures/sinatra2/Dockerfile +12 -0
  319. data/features/fixtures/sinatra2/Gemfile +4 -0
  320. data/features/fixtures/sinatra2/app.rb +9 -0
  321. data/features/plain_features/add_tab.feature +124 -0
  322. data/features/plain_features/api_key.feature +26 -0
  323. data/features/plain_features/app_type.feature +29 -0
  324. data/features/plain_features/app_version.feature +29 -0
  325. data/features/plain_features/auto_notify.feature +25 -0
  326. data/features/plain_features/delivery.feature +70 -0
  327. data/features/plain_features/exception_data.feature +122 -0
  328. data/features/plain_features/filters.feature +50 -0
  329. data/features/plain_features/handled_errors.feature +86 -0
  330. data/features/plain_features/ignore_classes.feature +31 -0
  331. data/features/plain_features/ignore_report.feature +32 -0
  332. data/features/plain_features/proxies.feature +70 -0
  333. data/features/plain_features/release_stages.feature +53 -0
  334. data/features/plain_features/report_api_key.feature +42 -0
  335. data/features/plain_features/report_severity.feature +44 -0
  336. data/features/plain_features/report_stack_frames.feature +84 -0
  337. data/features/plain_features/report_user.feature +120 -0
  338. data/features/plain_features/unhandled_errors.feature +106 -0
  339. data/features/rails_features/api_key.feature +59 -0
  340. data/features/rails_features/app_type.feature +67 -0
  341. data/features/rails_features/app_version.feature +84 -0
  342. data/features/rails_features/auto_capture_sessions.feature +61 -0
  343. data/features/rails_features/auto_notify.feature +114 -0
  344. data/features/rails_features/before_notify.feature +106 -0
  345. data/features/rails_features/handled.feature +103 -0
  346. data/features/rails_features/ignore_classes.feature +51 -0
  347. data/features/rails_features/meta_data_filters.feature +39 -0
  348. data/features/rails_features/project_root.feature +97 -0
  349. data/features/rails_features/release_stage.feature +86 -0
  350. data/features/rails_features/send_code.feature +58 -0
  351. data/features/rails_features/send_environment.feature +38 -0
  352. data/features/rails_features/unhandled.feature +40 -0
  353. data/features/rails_features/user_info.feature +88 -0
  354. data/features/sidekiq.feature +96 -0
  355. data/features/steps/ruby_notifier_steps.rb +77 -0
  356. data/features/support/env.rb +29 -0
  357. data/lib/bugsnag.rb +26 -0
  358. data/lib/bugsnag/helpers.rb +69 -7
  359. data/lib/bugsnag/integrations/delayed_job.rb +2 -2
  360. data/lib/bugsnag/integrations/railtie.rb +0 -17
  361. data/lib/bugsnag/stacktrace.rb +1 -0
  362. data/spec/bugsnag_spec.rb +56 -0
  363. data/spec/configuration_spec.rb +1 -0
  364. data/spec/fixtures/apps/rails-initializer-config/Gemfile +1 -0
  365. data/spec/fixtures/apps/rails-invalid-initializer-config/Gemfile +1 -0
  366. data/spec/fixtures/apps/rails-no-config/Gemfile +1 -0
  367. data/spec/helper_spec.rb +77 -91
  368. data/spec/report_spec.rb +9 -11
  369. metadata +352 -3
@@ -6,8 +6,9 @@ require 'json'
6
6
  module Bugsnag
7
7
  module Helpers
8
8
  MAX_STRING_LENGTH = 3072
9
- MAX_PAYLOAD_LENGTH = 256000
10
- MAX_ARRAY_LENGTH = 40
9
+ MAX_PAYLOAD_LENGTH = 512000
10
+ MAX_ARRAY_LENGTH = 80
11
+ MAX_TRIM_STACK_FRAMES = 30
11
12
  RAW_DATA_TYPES = [Numeric, TrueClass, FalseClass]
12
13
 
13
14
  ##
@@ -15,13 +16,25 @@ module Bugsnag
15
16
  # accepted by Bugsnag
16
17
  def self.trim_if_needed(value)
17
18
  value = "" if value.nil?
19
+
20
+ # Sanitize object
18
21
  sanitized_value = Bugsnag::Cleaner.clean_object_encoding(value)
19
22
  return sanitized_value unless payload_too_long?(sanitized_value)
20
- reduced_value = trim_strings_in_value(sanitized_value)
23
+
24
+ # Trim metadata
25
+ reduced_value = trim_metadata(sanitized_value)
21
26
  return reduced_value unless payload_too_long?(reduced_value)
22
- reduced_value = truncate_arrays_in_value(reduced_value)
27
+
28
+ # Trim code from stacktrace
29
+ reduced_value = trim_stacktrace_code(reduced_value)
23
30
  return reduced_value unless payload_too_long?(reduced_value)
24
- remove_metadata_from_events(reduced_value)
31
+
32
+ # Remove metadata
33
+ reduced_value = remove_metadata_from_events(reduced_value)
34
+ return reduced_value unless payload_too_long?(reduced_value)
35
+
36
+ # Remove oldest functions in stacktrace
37
+ trim_stacktrace_functions(reduced_value)
25
38
  end
26
39
 
27
40
  ##
@@ -60,6 +73,48 @@ module Bugsnag
60
73
 
61
74
  TRUNCATION_INFO = '[TRUNCATED]'
62
75
 
76
+ ##
77
+ # Remove all code from stacktraces
78
+ def self.trim_stacktrace_code(payload)
79
+ extract_exception(payload) do |exception|
80
+ exception[:stacktrace].each do |frame|
81
+ frame.delete(:code)
82
+ end
83
+ end
84
+ payload
85
+ end
86
+
87
+ ##
88
+ # Truncate stacktraces
89
+ def self.trim_stacktrace_functions(payload)
90
+ extract_exception(payload) do |exception|
91
+ stack = exception[:stacktrace]
92
+ exception[:stacktrace] = stack.take(MAX_TRIM_STACK_FRAMES)
93
+ end
94
+ payload
95
+ end
96
+
97
+ ##
98
+ # Wrapper for trimming stacktraces
99
+ def self.extract_exception(payload)
100
+ valid_payload = payload.is_a?(Hash) && payload[:events].respond_to?(:map)
101
+ return unless valid_payload && block_given?
102
+ payload[:events].each do |event|
103
+ event[:exceptions].each { |exception| yield exception }
104
+ end
105
+ end
106
+
107
+ ##
108
+ # Take the metadata from the events and trim it down
109
+ def self.trim_metadata(payload)
110
+ return payload unless payload.is_a?(Hash) and payload[:events].respond_to?(:map)
111
+ payload[:events].map do |event|
112
+ event[:metaData] = truncate_arrays_in_value(event[:metaData])
113
+ event[:metaData] = trim_strings_in_value(event[:metaData])
114
+ end
115
+ payload
116
+ end
117
+
63
118
  ##
64
119
  # Check if a value is a raw type which should not be trimmed, truncated
65
120
  # or converted to a string
@@ -67,6 +122,7 @@ module Bugsnag
67
122
  RAW_DATA_TYPES.detect {|klass| value.is_a?(klass)} != nil
68
123
  end
69
124
 
125
+ ##
70
126
  # Shorten array until it fits within the payload size limit when serialized
71
127
  def self.truncate_array(array)
72
128
  return [] unless array.respond_to?(:slice)
@@ -75,6 +131,7 @@ module Bugsnag
75
131
  end
76
132
  end
77
133
 
134
+ ##
78
135
  # Trim all strings to be less than the maximum allowed string length
79
136
  def self.trim_strings_in_value(value)
80
137
  return value if is_json_raw_type?(value)
@@ -88,13 +145,18 @@ module Bugsnag
88
145
  end
89
146
  end
90
147
 
148
+ ##
91
149
  # Validate that the serialized JSON string value is below maximum payload
92
150
  # length
93
151
  def self.payload_too_long?(value)
152
+ get_payload_length(value) >= MAX_PAYLOAD_LENGTH
153
+ end
154
+
155
+ def self.get_payload_length(value)
94
156
  if value.is_a?(String)
95
- value.length >= MAX_PAYLOAD_LENGTH
157
+ value.length
96
158
  else
97
- ::JSON.dump(value).length >= MAX_PAYLOAD_LENGTH
159
+ ::JSON.dump(value).length
98
160
  end
99
161
  end
100
162
 
@@ -30,9 +30,9 @@ unless defined? Delayed::Plugins::Bugsnag
30
30
  overrides[:job][:queue] = queue
31
31
  end
32
32
  if job.respond_to?(:attempts)
33
- max_attempts = job.respond_to?(:max_attempts) ? job.max_attempts : Delayed::Worker.max_attempts
33
+ max_attempts = (job.respond_to?(:max_attempts) && job.max_attempts) || Delayed::Worker.max_attempts
34
34
  overrides[:job][:attempts] = "#{job.attempts + 1} / #{max_attempts}"
35
- # +1 as "attempts" is really previous attempts AFAICT, certainly it starts at 0.
35
+ # +1 as "attempts" is zero-based and does not include the current failed attempt
36
36
  end
37
37
  if payload = job.payload_object
38
38
  p = {
@@ -17,23 +17,6 @@ module Bugsnag
17
17
  load "bugsnag/tasks/bugsnag.rake"
18
18
  end
19
19
 
20
- # send notifications if a command fails in a 'rails runner' call
21
- if self.respond_to? :runner
22
- runner do
23
- at_exit do
24
- if $!
25
- Bugsnag.notify($!, true) do |report|
26
- report.severity = "error"
27
- report.severity_reason = {
28
- :type => Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
29
- :attributes => FRAMEWORK_ATTRIBUTES
30
- }
31
- end
32
- end
33
- end
34
- end
35
- end
36
-
37
20
  config.before_initialize do
38
21
  # Configure bugsnag rails defaults
39
22
  # Skipping API key validation as the key may be set later in an
@@ -16,6 +16,7 @@ module Bugsnag
16
16
  @configuration = configuration
17
17
 
18
18
  backtrace = caller if !backtrace || backtrace.empty?
19
+
19
20
  @processed_backtrace = backtrace.map do |trace|
20
21
  if trace.match(BACKTRACE_LINE_REGEX)
21
22
  file, line_str, method = [$1, $2, $3]
@@ -17,6 +17,62 @@ describe Bugsnag do
17
17
  end
18
18
  end
19
19
 
20
+ describe "add_exit_handler" do
21
+
22
+ before do
23
+ Bugsnag.instance_variable_set(:@exit_handler_added, false)
24
+ end
25
+
26
+ it "automatically adds an exit handler" do
27
+ expect(Bugsnag).to receive(:register_at_exit)
28
+ Bugsnag.configure do |conf|
29
+ conf.api_key = "TEST KEY"
30
+ end
31
+ end
32
+
33
+ it "calls at_exit when register_at_exit is called" do
34
+ expect(Bugsnag).to receive(:at_exit)
35
+ Bugsnag.register_at_exit
36
+ end
37
+
38
+ it "doesn't call at_exit on subsequent calls" do
39
+ expect(Bugsnag).to receive(:at_exit).once
40
+ Bugsnag.register_at_exit
41
+ Bugsnag.register_at_exit
42
+ end
43
+
44
+ context 'with aliased at_exit' do
45
+ before do
46
+ module Kernel
47
+ alias_method :old_at_exit, :at_exit
48
+ def at_exit
49
+ begin
50
+ raise BugsnagTestException.new("Oh no")
51
+ rescue
52
+ yield
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ it "sends an exception when at_exit is called" do
59
+ report_mock = double('report')
60
+ expect(report_mock).to receive(:severity=).with('error')
61
+ expect(report_mock).to receive(:severity_reason=).with({
62
+ :type => Bugsnag::Report::UNHANDLED_EXCEPTION
63
+ })
64
+ expect(Bugsnag).to receive(:notify).with(kind_of(BugsnagTestException), true).and_yield(report_mock)
65
+ Bugsnag.register_at_exit
66
+ end
67
+
68
+ after do
69
+ module Kernel
70
+ alias_method :at_exit, :old_at_exit
71
+ end
72
+ end
73
+ end
74
+ end
75
+
20
76
  describe 'loading integrations' do
21
77
  before do
22
78
  module Kernel
@@ -221,4 +221,5 @@ describe Bugsnag::Configuration do
221
221
  it "should have exit exception classes ignored by default" do
222
222
  expect(subject.ignore_classes).to eq(Set.new([SystemExit, Interrupt]))
223
223
  end
224
+
224
225
  end
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'railties', '4.2.10', require: %w(action_controller rails)
4
+ gem 'nokogiri', '1.6.8'
4
5
  gem 'bugsnag', path: '../../../..'
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'railties', '4.2.10', require: %w(action_controller rails)
4
+ gem 'nokogiri', '1.6.8'
4
5
  gem 'bugsnag', path: '../../../..'
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'railties', '4.2.10', require: %w(action_controller rails)
4
+ gem 'nokogiri', '1.6.8'
4
5
  gem 'bugsnag', path: '../../../..'
@@ -72,103 +72,89 @@ describe Bugsnag::Helpers do
72
72
 
73
73
  context "payload length is greater than allowed" do
74
74
 
75
- context "value is a String" do
76
- it "trims length" do
77
- value = Bugsnag::Helpers.trim_if_needed(SecureRandom.hex(500_000/2))
78
- expect(value.length).to be <= Bugsnag::Helpers::MAX_STRING_LENGTH
79
- end
80
- end
81
-
82
- context "value is an Array" do
83
- it "trims nested string contents" do
84
- value = [[30.times.map {|i| SecureRandom.hex(8192) }]]
85
- json = ::JSON.dump(Bugsnag::Helpers.trim_if_needed(value))
86
- expect(json.length).to be < Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
87
- end
88
-
89
- it "trims string contents" do
90
- value = 30.times.map {|i| SecureRandom.hex(8192) }
91
- json = ::JSON.dump(Bugsnag::Helpers.trim_if_needed(value))
92
- expect(json.length).to be < Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
93
- end
75
+ it "trims metadata strings" do
76
+ payload = {
77
+ :events => [{
78
+ :metaData => 50000.times.map {|i| "should truncate" }.join(""),
79
+ :preserved => "Foo"
80
+ }]
81
+ }
82
+ expect(::JSON.dump(payload).length).to be > Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
83
+ trimmed = Bugsnag::Helpers.trim_if_needed(payload)
84
+ expect(::JSON.dump(trimmed).length).to be <= Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
85
+ expect(trimmed[:events][0][:metaData].length).to be <= Bugsnag::Helpers::MAX_STRING_LENGTH
86
+ expect(trimmed[:events][0][:preserved]).to eq("Foo")
94
87
  end
95
88
 
96
- context "value is a Set" do
97
- it "trims string contents" do
98
- value = Set.new(30.times.map {|i| SecureRandom.hex(8192) })
99
- json = ::JSON.dump(Bugsnag::Helpers.trim_if_needed(value))
100
- expect(json.length).to be < Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
101
- end
89
+ it "truncates metadata arrays" do
90
+ payload = {
91
+ :events => [{
92
+ :metaData => 50000.times.map {|i| "should truncate" },
93
+ :preserved => "Foo"
94
+ }]
95
+ }
96
+ expect(::JSON.dump(payload).length).to be > Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
97
+ trimmed = Bugsnag::Helpers.trim_if_needed(payload)
98
+ expect(::JSON.dump(trimmed).length).to be <= Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
99
+ expect(trimmed[:events][0][:metaData].length).to be <= Bugsnag::Helpers::MAX_ARRAY_LENGTH
100
+ expect(trimmed[:events][0][:preserved]).to eq("Foo")
102
101
  end
103
102
 
104
- context "value can be converted to a String" do
105
- it "converts to a string and trims" do
106
- value = Set.new(30_000.times.map {|i| Bugsnag::Helpers })
107
- json = ::JSON.dump(Bugsnag::Helpers.trim_if_needed(value))
108
- expect(json.length).to be < Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
109
- end
103
+ it "trims stacktrace code" do
104
+ payload = {
105
+ :events => [{
106
+ :exceptions => [{
107
+ :stacktrace => [
108
+ {
109
+ :lineNumber => 1,
110
+ :file => '/trace1',
111
+ :code => 50.times.map {|i| SecureRandom.hex(3072) }
112
+ },
113
+ {
114
+ :lineNumber => 2,
115
+ :file => '/trace2',
116
+ :code => 50.times.map {|i| SecureRandom.hex(3072) }
117
+ }
118
+ ]
119
+ }]
120
+ }]
121
+ }
122
+ expect(::JSON.dump(payload).length).to be > Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
123
+ trimmed = Bugsnag::Helpers.trim_if_needed(payload)
124
+ expect(::JSON.dump(trimmed).length).to be <= Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
125
+ trace = trimmed[:events][0][:exceptions][0][:stacktrace]
126
+ expect(trace.length).to eq(2)
127
+ expect(trace[0][:lineNumber]).to eq(1)
128
+ expect(trace[0][:file]).to eq('/trace1')
129
+ expect(trace[0][:code]).to be_nil
130
+ expect(trace[1][:lineNumber]).to eq(2)
131
+ expect(trace[1][:file]).to eq('/trace2')
132
+ expect(trace[1][:code]).to be_nil
110
133
  end
111
134
 
112
- context "value is a Hash" do
113
-
114
- before(:each) do
115
- @metadata = {
116
- :short_string => "this should not be truncated",
117
- :long_string => 10000.times.map {|i| "should truncate" }.join(""),
118
- :long_string_ary => 30.times.map {|i| SecureRandom.hex(8192) }
119
- }
120
-
121
- @trimmed_metadata = Bugsnag::Helpers.trim_if_needed @metadata
122
- end
123
-
124
- it "does not trim short values" do
125
- expect(@trimmed_metadata[:short_string]).to eq @metadata[:short_string]
126
- end
127
-
128
- it "trims long string values" do
129
- expect(@trimmed_metadata[:long_string].length).to eq(Bugsnag::Helpers::MAX_STRING_LENGTH)
130
- expect(@trimmed_metadata[:long_string].match(/\[TRUNCATED\]$/)).to_not be_nil
131
- end
132
-
133
- it "trims nested long string values" do
134
- @trimmed_metadata[:long_string_ary].each do |str|
135
- expect(str.match(/\[TRUNCATED\]$/)).to_not be_nil
136
- expect(str.length).to eq(Bugsnag::Helpers::MAX_STRING_LENGTH)
137
- end
138
- end
139
-
140
- it "does not change the argument value" do
141
- expect(@metadata[:long_string].length).to be > Bugsnag::Helpers::MAX_STRING_LENGTH
142
- expect(@metadata[:long_string].match(/\[TRUNCATED\]$/)).to be_nil
143
- expect(@metadata[:short_string].length).to eq(28)
144
- expect(@metadata[:short_string]).to eq("this should not be truncated")
145
- expect(@trimmed_metadata[:long_string_ary].length).to eq(30)
146
- end
147
- end
148
-
149
- context "and trimmed strings are not enough" do
150
- it "truncates long arrays" do
151
- value = [100.times.map {|i| SecureRandom.hex(8192) }, "a"]
152
- trimmed_value = Bugsnag::Helpers.trim_if_needed(value)
153
- expect(trimmed_value.length).to eq 2
154
- expect(trimmed_value.first.length).to eq Bugsnag::Helpers::MAX_ARRAY_LENGTH
155
- trimmed_value.first.each do |str|
156
- expect(str.match(/\[TRUNCATED\]$/)).to_not be_nil
157
- expect(str.length).to eq(Bugsnag::Helpers::MAX_STRING_LENGTH)
158
- end
159
-
160
- expect(::JSON.dump(trimmed_value).length).to be < Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
161
- end
162
-
163
- it "removes metadata from events" do
164
- metadata = Hash[*20000.times.map {|i| [i,i+1]}.flatten]
165
- frames = 100.times.map {|i| SecureRandom.hex(4096) }
166
- value = {key:"abc", events:[{metaData: metadata, frames: frames, cake: "carrot"}]}
167
- trimmed_value = Bugsnag::Helpers.trim_if_needed(value)
168
- expect(::JSON.dump(trimmed_value).length).to be < Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
169
- expect(trimmed_value[:key]).to eq value[:key]
170
- expect(trimmed_value[:events].first.keys.to_set).to eq [:frames, :cake].to_set
171
- expect(trimmed_value[:events].first[:metaData]).to be_nil
135
+ it "trims stacktrace entries" do
136
+ payload = {
137
+ :events => [{
138
+ :exceptions => [{
139
+ :stacktrace => 18000.times.map do |index|
140
+ {
141
+ :lineNumber => index,
142
+ :file => "/path/to/item_#{index}.rb",
143
+ :code => { "#{index}" => "puts 'code'" }
144
+ }
145
+ end
146
+ }]
147
+ }]
148
+ }
149
+ expect(::JSON.dump(payload).length).to be > Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
150
+ trimmed = Bugsnag::Helpers.trim_if_needed(payload)
151
+ expect(::JSON.dump(trimmed).length).to be <= Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
152
+ trace = trimmed[:events][0][:exceptions][0][:stacktrace]
153
+ expect(trace.length).to eq(30)
154
+ 30.times.map do |index|
155
+ expect(trace[index][:lineNumber]).to eq(index)
156
+ expect(trace[index][:file]).to eq("/path/to/item_#{index}.rb")
157
+ expect(trace[index][:code]).to be_nil
172
158
  end
173
159
  end
174
160
  end
@@ -367,8 +367,8 @@ describe Bugsnag::Report do
367
367
  Bugsnag.notify(BugsnagTestException.new("It crashed")) do |report|
368
368
  report.meta_data.merge!({
369
369
  some_tab: {
370
- giant: SecureRandom.hex(500_000/2),
371
- mega: SecureRandom.hex(500_000/2)
370
+ giant: SecureRandom.hex(1_000_000/2),
371
+ mega: SecureRandom.hex(1_000_000/2)
372
372
  }
373
373
  })
374
374
  end
@@ -381,7 +381,7 @@ describe Bugsnag::Report do
381
381
  end
382
382
 
383
383
  it "truncates large messages before sending" do
384
- Bugsnag.notify(BugsnagTestException.new(SecureRandom.hex(500_000))) do |report|
384
+ Bugsnag.notify(BugsnagTestException.new(SecureRandom.hex(250_000))) do |report|
385
385
  report.meta_data.merge!({
386
386
  some_tab: {
387
387
  giant: SecureRandom.hex(500_000/2),
@@ -391,23 +391,21 @@ describe Bugsnag::Report do
391
391
  end
392
392
 
393
393
  expect(Bugsnag).to have_sent_notification{ |payload, headers|
394
- # Truncated body should be no bigger than
395
- # 2 truncated hashes (4096*2) + rest of payload (20000)
396
- expect(::JSON.dump(payload).length).to be < 4096*2 + 20000
394
+ expect(::JSON.dump(payload).length).to be < Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
397
395
  }
398
396
  end
399
397
 
400
398
  it "truncate large stacktraces before sending" do
401
399
  ex = BugsnagTestException.new("It crashed")
402
400
  stacktrace = []
403
- 5000.times {|i| stacktrace.push("/Some/path/rspec/example.rb:113:in `instance_eval'")}
401
+ 20000.times {|i| stacktrace.push("/Some/path/rspec/example.rb:113:in `instance_eval'")}
404
402
  ex.set_backtrace(stacktrace)
405
403
  Bugsnag.notify(ex)
406
404
 
407
405
  expect(Bugsnag).to have_sent_notification{ |payload, headers|
408
406
  # Truncated body should be no bigger than
409
407
  # 400 stacktrace lines * approx 60 chars per line + rest of payload (20000)
410
- expect(::JSON.dump(payload).length).to be < 400*60 + 20000
408
+ expect(::JSON.dump(payload).length).to be < Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
411
409
  }
412
410
  end
413
411
 
@@ -1054,10 +1052,10 @@ describe Bugsnag::Report do
1054
1052
  expect(exception["message"]).to eq("'nil' was notified as an exception")
1055
1053
 
1056
1054
  stacktrace = exception["stacktrace"][0]
1057
- expect(stacktrace["lineNumber"]).to eq(1049)
1055
+ expect(stacktrace["lineNumber"]).to eq(1047)
1058
1056
  expect(stacktrace["file"]).to end_with("spec/report_spec.rb")
1059
- expect(stacktrace["code"]["1048"]).to eq(" it 'uses an appropriate message if nil is notified' do")
1060
- expect(stacktrace["code"]["1049"]).to eq(" Bugsnag.notify(nil)")
1057
+ expect(stacktrace["code"]["1046"]).to eq(" it 'uses an appropriate message if nil is notified' do")
1058
+ expect(stacktrace["code"]["1047"]).to eq(" Bugsnag.notify(nil)")
1061
1059
  }
1062
1060
  end
1063
1061