bugsnag 6.7.3 → 6.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +3 -0
- data/.rubocop_todo.yml +3 -1
- data/.travis.yml +40 -0
- data/CHANGELOG.md +22 -0
- data/Gemfile +9 -4
- data/VERSION +1 -1
- data/features/fixtures/delayed_job/.dockerignore +1 -0
- data/features/fixtures/delayed_job/Dockerfile +12 -0
- data/features/fixtures/delayed_job/Gemfile +4 -0
- data/features/fixtures/docker-compose.yml +247 -0
- data/features/fixtures/plain/.dockerignore +2 -0
- data/features/fixtures/plain/Dockerfile +12 -0
- data/features/fixtures/plain/app/Gemfile +3 -0
- data/features/fixtures/plain/app/app.rb +40 -0
- data/features/fixtures/plain/app/configuration/api_key.rb +9 -0
- data/features/fixtures/plain/app/configuration/proxy.rb +14 -0
- data/features/fixtures/plain/app/configuration/send_handled.rb +7 -0
- data/features/fixtures/plain/app/configuration/send_unhandled.rb +9 -0
- data/features/fixtures/plain/app/delivery/fork_threadpool.rb +25 -0
- data/features/fixtures/plain/app/delivery/synchronous.rb +14 -0
- data/features/fixtures/plain/app/delivery/threadpool.rb +14 -0
- data/features/fixtures/plain/app/exception_data/crash.rb +34 -0
- data/features/fixtures/plain/app/exception_data/handled_context.rb +10 -0
- data/features/fixtures/plain/app/exception_data/handled_hash.rb +10 -0
- data/features/fixtures/plain/app/exception_data/handled_meta_data.rb +10 -0
- data/features/fixtures/plain/app/exception_data/handled_user_id.rb +10 -0
- data/features/fixtures/plain/app/exception_data/unhandled_context.rb +7 -0
- data/features/fixtures/plain/app/exception_data/unhandled_hash.rb +7 -0
- data/features/fixtures/plain/app/exception_data/unhandled_meta_data.rb +7 -0
- data/features/fixtures/plain/app/exception_data/unhandled_user_id.rb +7 -0
- data/features/fixtures/plain/app/filters/additional_filters.rb +11 -0
- data/features/fixtures/plain/app/filters/default_filters.rb +15 -0
- data/features/fixtures/plain/app/handled/block_metadata.rb +15 -0
- data/features/fixtures/plain/app/handled/ignore_exception.rb +12 -0
- data/features/fixtures/plain/app/handled/notify_exception.rb +9 -0
- data/features/fixtures/plain/app/handled/notify_string.rb +9 -0
- data/features/fixtures/plain/app/ignore_classes/handled.rb +8 -0
- data/features/fixtures/plain/app/ignore_classes/ignore_error.rb +8 -0
- data/features/fixtures/plain/app/ignore_classes/unhandled.rb +4 -0
- data/features/fixtures/plain/app/report_modification/add_tab.rb +16 -0
- data/features/fixtures/plain/app/report_modification/add_tab_existing.rb +22 -0
- data/features/fixtures/plain/app/report_modification/add_tab_override.rb +19 -0
- data/features/fixtures/plain/app/report_modification/ignore_report.rb +9 -0
- data/features/fixtures/plain/app/report_modification/initiators/handled_before_notify.rb +10 -0
- data/features/fixtures/plain/app/report_modification/initiators/handled_block.rb +8 -0
- data/features/fixtures/plain/app/report_modification/initiators/unhandled_before_notify.rb +11 -0
- data/features/fixtures/plain/app/report_modification/modify_api_key.rb +9 -0
- data/features/fixtures/plain/app/report_modification/modify_severity.rb +9 -0
- data/features/fixtures/plain/app/report_modification/remove_user_details.rb +14 -0
- data/features/fixtures/plain/app/report_modification/set_custom_user_details.rb +16 -0
- data/features/fixtures/plain/app/report_modification/set_user_details.rb +13 -0
- data/features/fixtures/plain/app/stack_frame_modification/initiators/handled_before_notify.rb +25 -0
- data/features/fixtures/plain/app/stack_frame_modification/initiators/handled_block.rb +24 -0
- data/features/fixtures/plain/app/stack_frame_modification/initiators/unhandled_before_notify.rb +26 -0
- data/features/fixtures/plain/app/stack_frame_modification/mark_frames_in_project.rb +13 -0
- data/features/fixtures/plain/app/stack_frame_modification/remove_stack_frame.rb +9 -0
- data/features/fixtures/plain/app/unhandled/Interrupt.rb +6 -0
- data/features/fixtures/plain/app/unhandled/bad_syntax.rb +1 -0
- data/features/fixtures/plain/app/unhandled/custom_error.rb +9 -0
- data/features/fixtures/plain/app/unhandled/load_error.rb +6 -0
- data/features/fixtures/plain/app/unhandled/local_jump_error.rb +10 -0
- data/features/fixtures/plain/app/unhandled/name_error.rb +6 -0
- data/features/fixtures/plain/app/unhandled/no_method_error.rb +6 -0
- data/features/fixtures/plain/app/unhandled/runtime_error.rb +6 -0
- data/features/fixtures/plain/app/unhandled/syntax_error.rb +6 -0
- data/features/fixtures/plain/app/unhandled/system_call_error.rb +6 -0
- data/features/fixtures/plain/app/unhandled/system_exit.rb +6 -0
- data/features/fixtures/plain/json/delivery_fork.json +4 -0
- data/features/fixtures/plain/json/delivery_synchronous.json +4 -0
- data/features/fixtures/plain/json/delivery_threadpool.json +4 -0
- data/features/fixtures/plain/json/filters_default_metadata_filters.json +9 -0
- data/features/fixtures/rack1/.dockerignore +1 -0
- data/features/fixtures/rack1/Dockerfile +12 -0
- data/features/fixtures/rack1/Gemfile +4 -0
- data/features/fixtures/rack1/app.rb +8 -0
- data/features/fixtures/rack2/.dockerignore +1 -0
- data/features/fixtures/rack2/Dockerfile +12 -0
- data/features/fixtures/rack2/Gemfile +4 -0
- data/features/fixtures/rack2/app.rb +8 -0
- data/features/fixtures/rails3/.dockerignore +1 -0
- data/features/fixtures/rails3/Dockerfile +16 -0
- data/features/fixtures/rails3/app/.gitignore +15 -0
- data/features/fixtures/rails3/app/Gemfile +13 -0
- data/features/fixtures/rails3/app/Rakefile +7 -0
- data/features/fixtures/rails3/app/app/assets/images/rails.png +0 -0
- data/features/fixtures/rails3/app/app/assets/javascripts/application.js +15 -0
- data/features/fixtures/rails3/app/app/assets/stylesheets/application.css +13 -0
- data/features/fixtures/rails3/app/app/controllers/api_key_controller.rb +20 -0
- data/features/fixtures/rails3/app/app/controllers/app_type_controller.rb +20 -0
- data/features/fixtures/rails3/app/app/controllers/app_version_controller.rb +25 -0
- data/features/fixtures/rails3/app/app/controllers/application_controller.rb +7 -0
- data/features/fixtures/rails3/app/app/controllers/auto_notify_controller.rb +31 -0
- data/features/fixtures/rails3/app/app/controllers/before_notify_controller.rb +44 -0
- data/features/fixtures/rails3/app/app/controllers/handled_controller.rb +26 -0
- data/features/fixtures/rails3/app/app/controllers/ignore_classes_controller.rb +23 -0
- data/features/fixtures/rails3/app/app/controllers/metadata_filters_controller.rb +16 -0
- data/features/fixtures/rails3/app/app/controllers/project_root_controller.rb +25 -0
- data/features/fixtures/rails3/app/app/controllers/release_stage_controller.rb +20 -0
- data/features/fixtures/rails3/app/app/controllers/send_code_controller.rb +20 -0
- data/features/fixtures/rails3/app/app/controllers/send_environment_controller.rb +12 -0
- data/features/fixtures/rails3/app/app/controllers/session_tracking_controller.rb +20 -0
- data/features/fixtures/rails3/app/app/controllers/unhandled_controller.rb +11 -0
- data/features/fixtures/rails3/app/app/controllers/warden_controller.rb +30 -0
- data/features/fixtures/rails3/app/app/helpers/application_helper.rb +2 -0
- data/features/fixtures/rails3/app/app/mailers/.gitkeep +0 -0
- data/features/fixtures/rails3/app/app/models/.gitkeep +0 -0
- data/features/fixtures/rails3/app/app/models/user.rb +6 -0
- data/features/fixtures/rails3/app/app/views/layouts/application.html.erb +14 -0
- data/features/fixtures/rails3/app/config.ru +4 -0
- data/features/fixtures/rails3/app/config/application.rb +67 -0
- data/features/fixtures/rails3/app/config/boot.rb +6 -0
- data/features/fixtures/rails3/app/config/database.yml +31 -0
- data/features/fixtures/rails3/app/config/environment.rb +5 -0
- data/features/fixtures/rails3/app/config/environments/development.rb +37 -0
- data/features/fixtures/rails3/app/config/environments/production.rb +67 -0
- data/features/fixtures/rails3/app/config/environments/rails_env.rb +37 -0
- data/features/fixtures/rails3/app/config/initializers/bugsnag.rb +14 -0
- data/features/fixtures/rails3/app/config/initializers/secret_token.rb +7 -0
- data/features/fixtures/rails3/app/config/initializers/session_store.rb +8 -0
- data/features/fixtures/rails3/app/config/initializers/warden.rb +3 -0
- data/features/fixtures/rails3/app/config/initializers/wrap_parameters.rb +14 -0
- data/features/fixtures/rails3/app/config/locales/en.yml +5 -0
- data/features/fixtures/rails3/app/config/routes.rb +18 -0
- data/features/fixtures/rails3/app/db/migrate/20180423142727_create_users.rb +45 -0
- data/features/fixtures/rails3/app/db/schema.rb +37 -0
- data/features/fixtures/rails3/app/db/seeds.rb +7 -0
- data/features/fixtures/rails3/app/lib/assets/.gitkeep +0 -0
- data/features/fixtures/rails3/app/lib/strategies/token_strategy.rb +12 -0
- data/features/fixtures/rails3/app/lib/tasks/.gitkeep +0 -0
- data/features/fixtures/rails3/app/log/.gitkeep +0 -0
- data/features/fixtures/rails3/app/public/404.html +26 -0
- data/features/fixtures/rails3/app/public/422.html +26 -0
- data/features/fixtures/rails3/app/public/500.html +25 -0
- data/features/fixtures/rails3/app/public/favicon.ico +0 -0
- data/features/fixtures/rails3/app/public/index.html +241 -0
- data/features/fixtures/rails3/app/public/robots.txt +5 -0
- data/features/fixtures/rails3/app/script/rails +6 -0
- data/features/fixtures/rails4/.dockerignore +1 -0
- data/features/fixtures/rails4/Dockerfile +18 -0
- data/features/fixtures/rails4/app/.gitignore +16 -0
- data/features/fixtures/rails4/app/Gemfile +42 -0
- data/features/fixtures/rails4/app/README.rdoc +28 -0
- data/features/fixtures/rails4/app/Rakefile +6 -0
- data/features/fixtures/rails4/app/app/assets/images/.keep +0 -0
- data/features/fixtures/rails4/app/app/assets/javascripts/application.js +16 -0
- data/features/fixtures/rails4/app/app/assets/stylesheets/application.css +13 -0
- data/features/fixtures/rails4/app/app/controllers/api_key_controller.rb +20 -0
- data/features/fixtures/rails4/app/app/controllers/app_type_controller.rb +20 -0
- data/features/fixtures/rails4/app/app/controllers/app_version_controller.rb +25 -0
- data/features/fixtures/rails4/app/app/controllers/application_controller.rb +7 -0
- data/features/fixtures/rails4/app/app/controllers/auto_notify_controller.rb +31 -0
- data/features/fixtures/rails4/app/app/controllers/before_notify_controller.rb +44 -0
- data/features/fixtures/rails4/app/app/controllers/concerns/.keep +0 -0
- data/features/fixtures/rails4/app/app/controllers/devise_controller.rb +32 -0
- data/features/fixtures/rails4/app/app/controllers/handled_controller.rb +26 -0
- data/features/fixtures/rails4/app/app/controllers/ignore_classes_controller.rb +23 -0
- data/features/fixtures/rails4/app/app/controllers/metadata_filters_controller.rb +16 -0
- data/features/fixtures/rails4/app/app/controllers/project_root_controller.rb +25 -0
- data/features/fixtures/rails4/app/app/controllers/release_stage_controller.rb +20 -0
- data/features/fixtures/rails4/app/app/controllers/send_code_controller.rb +20 -0
- data/features/fixtures/rails4/app/app/controllers/send_environment_controller.rb +12 -0
- data/features/fixtures/rails4/app/app/controllers/session_tracking_controller.rb +20 -0
- data/features/fixtures/rails4/app/app/controllers/unhandled_controller.rb +11 -0
- data/features/fixtures/rails4/app/app/helpers/application_helper.rb +2 -0
- data/features/fixtures/rails4/app/app/mailers/.keep +0 -0
- data/features/fixtures/rails4/app/app/models/.keep +0 -0
- data/features/fixtures/rails4/app/app/models/concerns/.keep +0 -0
- data/features/fixtures/rails4/app/app/models/user.rb +6 -0
- data/features/fixtures/rails4/app/app/views/layouts/application.html.erb +14 -0
- data/features/fixtures/rails4/app/config.ru +4 -0
- data/features/fixtures/rails4/app/config/application.rb +23 -0
- data/features/fixtures/rails4/app/config/boot.rb +4 -0
- data/features/fixtures/rails4/app/config/database.yml +31 -0
- data/features/fixtures/rails4/app/config/environment.rb +5 -0
- data/features/fixtures/rails4/app/config/environments/development.rb +31 -0
- data/features/fixtures/rails4/app/config/environments/production.rb +81 -0
- data/features/fixtures/rails4/app/config/environments/rails_env.rb +30 -0
- data/features/fixtures/rails4/app/config/environments/test.rb +31 -0
- data/features/fixtures/rails4/app/config/initializers/backtrace_silencers.rb +7 -0
- data/features/fixtures/rails4/app/config/initializers/bugsnag.rb +14 -0
- data/features/fixtures/rails4/app/config/initializers/devise.rb +283 -0
- data/features/fixtures/rails4/app/config/initializers/filter_parameter_logging.rb +5 -0
- data/features/fixtures/rails4/app/config/initializers/inflections.rb +16 -0
- data/features/fixtures/rails4/app/config/initializers/mime_types.rb +5 -0
- data/features/fixtures/rails4/app/config/initializers/secret_token.rb +12 -0
- data/features/fixtures/rails4/app/config/initializers/session_store.rb +3 -0
- data/features/fixtures/rails4/app/config/initializers/wrap_parameters.rb +14 -0
- data/features/fixtures/rails4/app/config/locales/devise.en.yml +64 -0
- data/features/fixtures/rails4/app/config/locales/en.yml +23 -0
- data/features/fixtures/rails4/app/config/routes.rb +19 -0
- data/features/fixtures/rails4/app/db/migrate/20180420160315_devise_create_users.rb +47 -0
- data/features/fixtures/rails4/app/db/seeds.rb +7 -0
- data/features/fixtures/rails4/app/lib/assets/.keep +0 -0
- data/features/fixtures/rails4/app/lib/tasks/.keep +0 -0
- data/features/fixtures/rails4/app/log/.keep +0 -0
- data/features/fixtures/rails4/app/public/404.html +58 -0
- data/features/fixtures/rails4/app/public/422.html +58 -0
- data/features/fixtures/rails4/app/public/500.html +57 -0
- data/features/fixtures/rails4/app/public/favicon.ico +0 -0
- data/features/fixtures/rails4/app/public/robots.txt +5 -0
- data/features/fixtures/rails4/app/test/controllers/.keep +0 -0
- data/features/fixtures/rails4/app/test/fixtures/.keep +0 -0
- data/features/fixtures/rails4/app/test/helpers/.keep +0 -0
- data/features/fixtures/rails4/app/test/integration/.keep +0 -0
- data/features/fixtures/rails4/app/test/mailers/.keep +0 -0
- data/features/fixtures/rails4/app/test/models/.keep +0 -0
- data/features/fixtures/rails4/app/test/test_helper.rb +15 -0
- data/features/fixtures/rails5/.dockerignore +1 -0
- data/features/fixtures/rails5/Dockerfile +18 -0
- data/features/fixtures/rails5/app/.gitignore +21 -0
- data/features/fixtures/rails5/app/Gemfile +47 -0
- data/features/fixtures/rails5/app/README.md +24 -0
- data/features/fixtures/rails5/app/Rakefile +6 -0
- data/features/fixtures/rails5/app/app/assets/config/manifest.js +3 -0
- data/features/fixtures/rails5/app/app/assets/images/.keep +0 -0
- data/features/fixtures/rails5/app/app/assets/javascripts/application.js +16 -0
- data/features/fixtures/rails5/app/app/assets/javascripts/cable.js +13 -0
- data/features/fixtures/rails5/app/app/assets/javascripts/channels/.keep +0 -0
- data/features/fixtures/rails5/app/app/assets/stylesheets/application.css +15 -0
- data/features/fixtures/rails5/app/app/channels/application_cable/channel.rb +4 -0
- data/features/fixtures/rails5/app/app/channels/application_cable/connection.rb +4 -0
- data/features/fixtures/rails5/app/app/controllers/api_key_controller.rb +16 -0
- data/features/fixtures/rails5/app/app/controllers/app_type_controller.rb +16 -0
- data/features/fixtures/rails5/app/app/controllers/app_version_controller.rb +21 -0
- data/features/fixtures/rails5/app/app/controllers/application_controller.rb +7 -0
- data/features/fixtures/rails5/app/app/controllers/auto_notify_controller.rb +27 -0
- data/features/fixtures/rails5/app/app/controllers/before_notify_controller.rb +40 -0
- data/features/fixtures/rails5/app/app/controllers/clearance_controller.rb +33 -0
- data/features/fixtures/rails5/app/app/controllers/concerns/.keep +0 -0
- data/features/fixtures/rails5/app/app/controllers/handled_controller.rb +22 -0
- data/features/fixtures/rails5/app/app/controllers/ignore_classes_controller.rb +19 -0
- data/features/fixtures/rails5/app/app/controllers/metadata_filters_controller.rb +12 -0
- data/features/fixtures/rails5/app/app/controllers/project_root_controller.rb +21 -0
- data/features/fixtures/rails5/app/app/controllers/release_stage_controller.rb +16 -0
- data/features/fixtures/rails5/app/app/controllers/send_code_controller.rb +16 -0
- data/features/fixtures/rails5/app/app/controllers/send_environment_controller.rb +8 -0
- data/features/fixtures/rails5/app/app/controllers/session_tracking_controller.rb +16 -0
- data/features/fixtures/rails5/app/app/controllers/unhandled_controller.rb +7 -0
- data/features/fixtures/rails5/app/app/helpers/application_helper.rb +2 -0
- data/features/fixtures/rails5/app/app/jobs/application_job.rb +2 -0
- data/features/fixtures/rails5/app/app/mailers/application_mailer.rb +4 -0
- data/features/fixtures/rails5/app/app/models/application_record.rb +3 -0
- data/features/fixtures/rails5/app/app/models/concerns/.keep +0 -0
- data/features/fixtures/rails5/app/app/models/user.rb +3 -0
- data/features/fixtures/rails5/app/app/views/layouts/application.html.erb +14 -0
- data/features/fixtures/rails5/app/app/views/layouts/mailer.html.erb +13 -0
- data/features/fixtures/rails5/app/app/views/layouts/mailer.text.erb +1 -0
- data/features/fixtures/rails5/app/config.ru +5 -0
- data/features/fixtures/rails5/app/config/application.rb +15 -0
- data/features/fixtures/rails5/app/config/boot.rb +3 -0
- data/features/fixtures/rails5/app/config/cable.yml +9 -0
- data/features/fixtures/rails5/app/config/database.yml +29 -0
- data/features/fixtures/rails5/app/config/environment.rb +5 -0
- data/features/fixtures/rails5/app/config/environments/development.rb +55 -0
- data/features/fixtures/rails5/app/config/environments/production.rb +87 -0
- data/features/fixtures/rails5/app/config/environments/rails_env.rb +55 -0
- data/features/fixtures/rails5/app/config/environments/test.rb +55 -0
- data/features/fixtures/rails5/app/config/initializers/assets.rb +11 -0
- data/features/fixtures/rails5/app/config/initializers/backtrace_silencers.rb +7 -0
- data/features/fixtures/rails5/app/config/initializers/bugsnag.rb +14 -0
- data/features/fixtures/rails5/app/config/initializers/clearance.rb +5 -0
- data/features/fixtures/rails5/app/config/initializers/cookies_serializer.rb +5 -0
- data/features/fixtures/rails5/app/config/initializers/filter_parameter_logging.rb +5 -0
- data/features/fixtures/rails5/app/config/initializers/inflections.rb +16 -0
- data/features/fixtures/rails5/app/config/initializers/mime_types.rb +4 -0
- data/features/fixtures/rails5/app/config/initializers/new_framework_defaults.rb +24 -0
- data/features/fixtures/rails5/app/config/initializers/session_store.rb +3 -0
- data/features/fixtures/rails5/app/config/initializers/wrap_parameters.rb +14 -0
- data/features/fixtures/rails5/app/config/locales/devise.en.yml +64 -0
- data/features/fixtures/rails5/app/config/locales/en.yml +23 -0
- data/features/fixtures/rails5/app/config/puma.rb +47 -0
- data/features/fixtures/rails5/app/config/routes.rb +52 -0
- data/features/fixtures/rails5/app/config/secrets.yml +25 -0
- data/features/fixtures/rails5/app/config/spring.rb +6 -0
- data/features/fixtures/rails5/app/db/migrate/20180426095545_create_users.rb +17 -0
- data/features/fixtures/rails5/app/db/schema.rb +29 -0
- data/features/fixtures/rails5/app/db/seeds.rb +7 -0
- data/features/fixtures/rails5/app/lib/assets/.keep +0 -0
- data/features/fixtures/rails5/app/lib/tasks/.keep +0 -0
- data/features/fixtures/rails5/app/log/.keep +0 -0
- data/features/fixtures/rails5/app/public/404.html +67 -0
- data/features/fixtures/rails5/app/public/422.html +67 -0
- data/features/fixtures/rails5/app/public/500.html +66 -0
- data/features/fixtures/rails5/app/public/apple-touch-icon-precomposed.png +0 -0
- data/features/fixtures/rails5/app/public/apple-touch-icon.png +0 -0
- data/features/fixtures/rails5/app/public/favicon.ico +0 -0
- data/features/fixtures/rails5/app/public/robots.txt +5 -0
- data/features/fixtures/rails5/app/test/controllers/.keep +0 -0
- data/features/fixtures/rails5/app/test/fixtures/.keep +0 -0
- data/features/fixtures/rails5/app/test/fixtures/files/.keep +0 -0
- data/features/fixtures/rails5/app/test/helpers/.keep +0 -0
- data/features/fixtures/rails5/app/test/integration/.keep +0 -0
- data/features/fixtures/rails5/app/test/mailers/.keep +0 -0
- data/features/fixtures/rails5/app/test/models/.keep +0 -0
- data/features/fixtures/rails5/app/test/test_helper.rb +10 -0
- data/features/fixtures/rails5/app/tmp/.keep +0 -0
- data/features/fixtures/resque/.dockerignore +1 -0
- data/features/fixtures/resque/Dockerfile +13 -0
- data/features/fixtures/resque/Gemfile +6 -0
- data/features/fixtures/resque/Rakefile +4 -0
- data/features/fixtures/resque/app.rb +12 -0
- data/features/fixtures/sidekiq/.dockerignore +2 -0
- data/features/fixtures/sidekiq/Dockerfile +17 -0
- data/features/fixtures/sidekiq/app/Gemfile +4 -0
- data/features/fixtures/sidekiq/app/app.rb +35 -0
- data/features/fixtures/sidekiq/app/initializers/HandledError.rb +3 -0
- data/features/fixtures/sidekiq/app/initializers/UnhandledError.rb +3 -0
- data/features/fixtures/sidekiq/payloads/handled_metadata_ca_false.json +11 -0
- data/features/fixtures/sidekiq/payloads/handled_metadata_ca_true.json +12 -0
- data/features/fixtures/sidekiq/payloads/unhandled_metadata_ca_false.json +11 -0
- data/features/fixtures/sidekiq/payloads/unhandled_metadata_ca_true.json +12 -0
- data/features/fixtures/sinatra1/.dockerignore +1 -0
- data/features/fixtures/sinatra1/Dockerfile +12 -0
- data/features/fixtures/sinatra1/Gemfile +4 -0
- data/features/fixtures/sinatra1/app.rb +9 -0
- data/features/fixtures/sinatra2/.dockerignore +1 -0
- data/features/fixtures/sinatra2/Dockerfile +12 -0
- data/features/fixtures/sinatra2/Gemfile +4 -0
- data/features/fixtures/sinatra2/app.rb +9 -0
- data/features/plain_features/add_tab.feature +124 -0
- data/features/plain_features/api_key.feature +26 -0
- data/features/plain_features/app_type.feature +29 -0
- data/features/plain_features/app_version.feature +29 -0
- data/features/plain_features/auto_notify.feature +25 -0
- data/features/plain_features/delivery.feature +70 -0
- data/features/plain_features/exception_data.feature +122 -0
- data/features/plain_features/filters.feature +50 -0
- data/features/plain_features/handled_errors.feature +86 -0
- data/features/plain_features/ignore_classes.feature +31 -0
- data/features/plain_features/ignore_report.feature +32 -0
- data/features/plain_features/proxies.feature +70 -0
- data/features/plain_features/release_stages.feature +53 -0
- data/features/plain_features/report_api_key.feature +42 -0
- data/features/plain_features/report_severity.feature +44 -0
- data/features/plain_features/report_stack_frames.feature +84 -0
- data/features/plain_features/report_user.feature +120 -0
- data/features/plain_features/unhandled_errors.feature +106 -0
- data/features/rails_features/api_key.feature +59 -0
- data/features/rails_features/app_type.feature +67 -0
- data/features/rails_features/app_version.feature +84 -0
- data/features/rails_features/auto_capture_sessions.feature +61 -0
- data/features/rails_features/auto_notify.feature +114 -0
- data/features/rails_features/before_notify.feature +106 -0
- data/features/rails_features/handled.feature +103 -0
- data/features/rails_features/ignore_classes.feature +51 -0
- data/features/rails_features/meta_data_filters.feature +39 -0
- data/features/rails_features/project_root.feature +97 -0
- data/features/rails_features/release_stage.feature +86 -0
- data/features/rails_features/send_code.feature +58 -0
- data/features/rails_features/send_environment.feature +38 -0
- data/features/rails_features/unhandled.feature +40 -0
- data/features/rails_features/user_info.feature +88 -0
- data/features/sidekiq.feature +96 -0
- data/features/steps/ruby_notifier_steps.rb +77 -0
- data/features/support/env.rb +29 -0
- data/lib/bugsnag.rb +26 -0
- data/lib/bugsnag/helpers.rb +69 -7
- data/lib/bugsnag/integrations/delayed_job.rb +2 -2
- data/lib/bugsnag/integrations/railtie.rb +0 -17
- data/lib/bugsnag/stacktrace.rb +1 -0
- data/spec/bugsnag_spec.rb +56 -0
- data/spec/configuration_spec.rb +1 -0
- data/spec/fixtures/apps/rails-initializer-config/Gemfile +1 -0
- data/spec/fixtures/apps/rails-invalid-initializer-config/Gemfile +1 -0
- data/spec/fixtures/apps/rails-no-config/Gemfile +1 -0
- data/spec/helper_spec.rb +77 -91
- data/spec/report_spec.rb +9 -11
- metadata +352 -3
data/lib/bugsnag/helpers.rb
CHANGED
@@ -6,8 +6,9 @@ require 'json'
|
|
6
6
|
module Bugsnag
|
7
7
|
module Helpers
|
8
8
|
MAX_STRING_LENGTH = 3072
|
9
|
-
MAX_PAYLOAD_LENGTH =
|
10
|
-
MAX_ARRAY_LENGTH =
|
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
|
-
|
23
|
+
|
24
|
+
# Trim metadata
|
25
|
+
reduced_value = trim_metadata(sanitized_value)
|
21
26
|
return reduced_value unless payload_too_long?(reduced_value)
|
22
|
-
|
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
|
-
|
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
|
157
|
+
value.length
|
96
158
|
else
|
97
|
-
::JSON.dump(value).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)
|
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
|
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
|
data/lib/bugsnag/stacktrace.rb
CHANGED
data/spec/bugsnag_spec.rb
CHANGED
@@ -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
|
data/spec/configuration_spec.rb
CHANGED
data/spec/helper_spec.rb
CHANGED
@@ -72,103 +72,89 @@ describe Bugsnag::Helpers do
|
|
72
72
|
|
73
73
|
context "payload length is greater than allowed" do
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
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
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
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
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
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
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
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
|
data/spec/report_spec.rb
CHANGED
@@ -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(
|
371
|
-
mega: SecureRandom.hex(
|
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(
|
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
|
-
|
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
|
-
|
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 <
|
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(
|
1055
|
+
expect(stacktrace["lineNumber"]).to eq(1047)
|
1058
1056
|
expect(stacktrace["file"]).to end_with("spec/report_spec.rb")
|
1059
|
-
expect(stacktrace["code"]["
|
1060
|
-
expect(stacktrace["code"]["
|
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
|
|