bugsnag 6.12.1 → 6.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/.buildkite/pipeline.yml +470 -0
  3. data/.rubocop.yml +55 -0
  4. data/.rubocop_todo.yml +530 -160
  5. data/CHANGELOG.md +73 -0
  6. data/CONTRIBUTING.md +1 -9
  7. data/Gemfile +14 -7
  8. data/TESTING.md +81 -0
  9. data/VERSION +1 -1
  10. data/docker-compose.yml +46 -0
  11. data/dockerfiles/Dockerfile.jruby-unit-tests +13 -0
  12. data/dockerfiles/Dockerfile.ruby-maze-runner +26 -0
  13. data/dockerfiles/Dockerfile.ruby-unit-tests +12 -0
  14. data/features/delayed_job.feature +6 -22
  15. data/features/fixtures/delayed_job/Dockerfile +2 -4
  16. data/features/fixtures/delayed_job/app/Gemfile +1 -1
  17. data/features/fixtures/delayed_job/app/Rakefile +18 -0
  18. data/features/fixtures/docker-compose.yml +32 -40
  19. data/features/fixtures/expected_breadcrumbs/active_job.json +9 -0
  20. data/features/fixtures/expected_breadcrumbs/mongo_failed.json +15 -0
  21. data/features/fixtures/expected_breadcrumbs/mongo_filtered_request.json +15 -0
  22. data/features/fixtures/expected_breadcrumbs/mongo_filtered_result.json +15 -0
  23. data/features/fixtures/expected_breadcrumbs/mongo_success.json +14 -0
  24. data/features/fixtures/expected_breadcrumbs/request.json +13 -0
  25. data/features/fixtures/expected_breadcrumbs/sql_with_bindings.json +12 -0
  26. data/features/fixtures/expected_breadcrumbs/sql_without_bindings.json +11 -0
  27. data/features/fixtures/plain/Dockerfile +2 -2
  28. data/features/fixtures/plain/app/app.rb +1 -3
  29. data/features/fixtures/plain/app/delivery/fork_threadpool.rb +3 -1
  30. data/features/fixtures/plain/app/report_modification/initiators/handled_on_error.rb +10 -0
  31. data/features/fixtures/plain/app/report_modification/initiators/unhandled_on_error.rb +11 -0
  32. data/features/fixtures/plain/app/stack_frame_modification/initiators/handled_on_error.rb +29 -0
  33. data/features/fixtures/plain/app/stack_frame_modification/initiators/unhandled_on_error.rb +26 -0
  34. data/features/fixtures/plain/app/unhandled/{Interrupt.rb → interrupt.rb} +0 -0
  35. data/features/fixtures/rack1/Dockerfile +2 -2
  36. data/features/fixtures/rack2/Dockerfile +2 -2
  37. data/features/fixtures/rails3/Dockerfile +2 -2
  38. data/features/fixtures/rails3/app/Gemfile +4 -0
  39. data/features/fixtures/rails3/app/config/initializers/bugsnag.rb +11 -2
  40. data/features/fixtures/rails4/Dockerfile +2 -5
  41. data/features/fixtures/rails4/app/config/initializers/bugsnag.rb +10 -1
  42. data/features/fixtures/rails5/Dockerfile +2 -2
  43. data/features/fixtures/rails5/app/Gemfile +3 -2
  44. data/features/fixtures/rails5/app/config/initializers/bugsnag.rb +10 -1
  45. data/features/fixtures/rails6/Dockerfile +2 -2
  46. data/features/fixtures/rails6/app/Gemfile +3 -2
  47. data/features/fixtures/rails6/app/app/controllers/mongo_controller.rb +22 -0
  48. data/features/fixtures/rails6/app/app/models/mongo_model.rb +6 -0
  49. data/features/fixtures/rails6/app/config/environments/development.rb +2 -0
  50. data/features/fixtures/rails6/app/config/environments/production.rb +1 -0
  51. data/features/fixtures/rails6/app/config/environments/rails_env.rb +1 -0
  52. data/features/fixtures/rails6/app/config/environments/test.rb +1 -0
  53. data/features/fixtures/rails6/app/config/initializers/bugsnag.rb +10 -1
  54. data/features/fixtures/rails6/app/config/mongoid.yml +23 -0
  55. data/features/fixtures/rails6/app/config/routes.rb +4 -0
  56. data/features/fixtures/resque/Dockerfile +2 -2
  57. data/features/fixtures/sidekiq/Dockerfile +5 -7
  58. data/features/fixtures/sidekiq/app/Gemfile +2 -1
  59. data/features/fixtures/sidekiq/app/Rakefile.rb +14 -0
  60. data/features/fixtures/sinatra1/Dockerfile +2 -2
  61. data/features/fixtures/sinatra2/Dockerfile +2 -2
  62. data/features/plain_features/add_tab.feature +30 -97
  63. data/features/plain_features/app_type.feature +6 -25
  64. data/features/plain_features/app_version.feature +6 -25
  65. data/features/plain_features/auto_notify.feature +4 -20
  66. data/features/plain_features/delivery.feature +12 -60
  67. data/features/plain_features/exception_data.feature +24 -94
  68. data/features/plain_features/filters.feature +9 -43
  69. data/features/plain_features/handled_errors.feature +16 -78
  70. data/features/plain_features/ignore_classes.feature +5 -23
  71. data/features/plain_features/ignore_report.feature +8 -24
  72. data/features/plain_features/proxies.feature +13 -56
  73. data/features/plain_features/release_stages.feature +9 -40
  74. data/features/plain_features/report_api_key.feature +11 -35
  75. data/features/plain_features/report_severity.feature +10 -35
  76. data/features/plain_features/report_stack_frames.feature +29 -93
  77. data/features/plain_features/report_user.feature +29 -96
  78. data/features/plain_features/unhandled_errors.feature +17 -88
  79. data/features/rails_features/api_key.feature +12 -58
  80. data/features/rails_features/app_type.feature +13 -58
  81. data/features/rails_features/app_version.feature +19 -80
  82. data/features/rails_features/auto_capture_sessions.feature +31 -112
  83. data/features/rails_features/auto_notify.feature +28 -105
  84. data/features/rails_features/before_notify.feature +18 -83
  85. data/features/rails_features/breadcrumbs.feature +40 -137
  86. data/features/rails_features/handled.feature +18 -82
  87. data/features/rails_features/ignore_classes.feature +12 -51
  88. data/features/rails_features/meta_data_filters.feature +9 -33
  89. data/features/rails_features/mongo_breadcrumbs.feature +22 -96
  90. data/features/rails_features/on_error.feature +29 -0
  91. data/features/rails_features/project_root.feature +19 -84
  92. data/features/rails_features/release_stage.feature +20 -82
  93. data/features/rails_features/send_code.feature +13 -55
  94. data/features/rails_features/send_environment.feature +7 -33
  95. data/features/rails_features/unhandled.feature +6 -31
  96. data/features/rails_features/user_info.feature +27 -65
  97. data/features/sidekiq.feature +12 -79
  98. data/features/steps/ruby_notifier_steps.rb +59 -15
  99. data/features/support/env.rb +12 -45
  100. data/lib/bugsnag.rb +109 -21
  101. data/lib/bugsnag/breadcrumbs/breadcrumbs.rb +0 -2
  102. data/lib/bugsnag/breadcrumbs/validator.rb +0 -6
  103. data/lib/bugsnag/cleaner.rb +129 -60
  104. data/lib/bugsnag/code_extractor.rb +137 -0
  105. data/lib/bugsnag/configuration.rb +58 -1
  106. data/lib/bugsnag/helpers.rb +2 -4
  107. data/lib/bugsnag/integrations/que.rb +7 -4
  108. data/lib/bugsnag/middleware/discard_error_class.rb +30 -0
  109. data/lib/bugsnag/middleware/exception_meta_data.rb +15 -9
  110. data/lib/bugsnag/middleware/ignore_error_class.rb +2 -0
  111. data/lib/bugsnag/middleware/rack_request.rb +2 -4
  112. data/lib/bugsnag/middleware_stack.rb +38 -3
  113. data/lib/bugsnag/on_error_callbacks.rb +33 -0
  114. data/lib/bugsnag/report.rb +4 -14
  115. data/lib/bugsnag/session_tracker.rb +3 -3
  116. data/lib/bugsnag/stacktrace.rb +28 -75
  117. data/spec/breadcrumbs/breadcrumb_spec.rb +1 -1
  118. data/spec/breadcrumbs/validator_spec.rb +1 -26
  119. data/spec/bugsnag_spec.rb +2 -2
  120. data/spec/cleaner_spec.rb +202 -10
  121. data/spec/code_extractor_spec.rb +129 -0
  122. data/spec/configuration_spec.rb +16 -1
  123. data/spec/fixtures/apps/rails-initializer-config/Gemfile +5 -1
  124. data/spec/fixtures/apps/rails-invalid-initializer-config/Gemfile +5 -1
  125. data/spec/fixtures/apps/rails-no-config/Gemfile +5 -1
  126. data/spec/fixtures/crashes/file1.rb +29 -0
  127. data/spec/fixtures/crashes/file2.rb +25 -0
  128. data/spec/fixtures/crashes/file_with_long_lines.rb +7 -0
  129. data/spec/fixtures/crashes/functions.rb +29 -0
  130. data/spec/fixtures/crashes/short_file.rb +2 -0
  131. data/spec/helper_spec.rb +0 -31
  132. data/spec/integrations/logger_spec.rb +1 -1
  133. data/spec/integrations/rack_spec.rb +8 -6
  134. data/spec/integrations/rake_spec.rb +1 -1
  135. data/spec/on_error_spec.rb +332 -0
  136. data/spec/report_spec.rb +331 -30
  137. data/spec/spec_helper.rb +14 -1
  138. data/spec/stacktrace_spec.rb +427 -74
  139. metadata +36 -7
  140. data/.travis.yml +0 -117
  141. data/features/plain_features/api_key.feature +0 -25
@@ -1,20 +1,11 @@
1
1
  Feature: Rails handled errors
2
2
 
3
- Background:
4
- Given I set environment variable "BUGSNAG_API_KEY" to "a35a2a72bd230ac0aa0f52715bbdc6aa"
5
- And I set environment variable "APP_PATH" to "/usr/src"
6
- And I configure the bugsnag endpoint
7
-
8
- Scenario Outline: Unhandled RuntimeError
9
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
10
- And I start the service "rails<rails_version>"
11
- And I wait for the app to respond on port "6128<rails_version>"
12
- When I navigate to the route "/handled/unthrown" on port "6128<rails_version>"
13
- Then I should receive a request
14
- And the request is a valid for the error reporting API
15
- And the request used the "Ruby Bugsnag Notifier" notifier
16
- And the request contained the api key "a35a2a72bd230ac0aa0f52715bbdc6aa"
17
- And the payload field "events" is an array with 1 element
3
+ @rails3 @rails4 @rails5 @rails6
4
+ Scenario: Unhandled RuntimeError
5
+ Given I start the rails service
6
+ When I navigate to the route "/handled/unthrown" on the rails app
7
+ And I wait to receive a request
8
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
18
9
  And the event "unhandled" is false
19
10
  And the exception "errorClass" equals "RuntimeError"
20
11
  And the exception "message" starts with "handled unthrown error"
@@ -23,32 +14,12 @@ Scenario Outline: Unhandled RuntimeError
23
14
  And the event "severity" equals "warning"
24
15
  And the event "severityReason.type" equals "handledException"
25
16
 
26
- Examples:
27
- | ruby_version | rails_version |
28
- | 2.0 | 3 |
29
- | 2.1 | 3 |
30
- | 2.2 | 3 |
31
- | 2.2 | 4 |
32
- | 2.2 | 5 |
33
- | 2.3 | 3 |
34
- | 2.3 | 4 |
35
- | 2.3 | 5 |
36
- | 2.4 | 3 |
37
- | 2.4 | 5 |
38
- | 2.5 | 3 |
39
- | 2.5 | 5 |
40
- | 2.5 | 6 |
41
-
42
- Scenario Outline: Thrown handled NameError
43
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
44
- And I start the service "rails<rails_version>"
45
- And I wait for the app to respond on port "6128<rails_version>"
46
- When I navigate to the route "/handled/thrown" on port "6128<rails_version>"
47
- Then I should receive a request
48
- And the request is a valid for the error reporting API
49
- And the request used the "Ruby Bugsnag Notifier" notifier
50
- And the request contained the api key "a35a2a72bd230ac0aa0f52715bbdc6aa"
51
- And the payload field "events" is an array with 1 element
17
+ @rails3 @rails4 @rails5 @rails6
18
+ Scenario: Thrown handled NameError
19
+ Given I start the rails service
20
+ When I navigate to the route "/handled/thrown" on the rails app
21
+ And I wait to receive a request
22
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
52
23
  And the exception "errorClass" equals "NameError"
53
24
  And the exception "message" starts with "undefined local variable or method `generate_unhandled_error' for #<HandledController"
54
25
  And the event "unhandled" is false
@@ -57,50 +28,15 @@ Scenario Outline: Thrown handled NameError
57
28
  And the event "severity" equals "warning"
58
29
  And the event "severityReason.type" equals "handledException"
59
30
 
60
- Examples:
61
- | ruby_version | rails_version |
62
- | 2.0 | 3 |
63
- | 2.1 | 3 |
64
- | 2.2 | 3 |
65
- | 2.2 | 4 |
66
- | 2.2 | 5 |
67
- | 2.3 | 3 |
68
- | 2.3 | 4 |
69
- | 2.3 | 5 |
70
- | 2.4 | 3 |
71
- | 2.4 | 5 |
72
- | 2.5 | 3 |
73
- | 2.5 | 5 |
74
- | 2.5 | 6 |
75
-
76
- Scenario Outline: Manual string notify
77
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
78
- And I start the service "rails<rails_version>"
79
- And I wait for the app to respond on port "6128<rails_version>"
80
- When I navigate to the route "/handled/string_notify" on port "6128<rails_version>"
81
- Then I should receive a request
82
- And the request is a valid for the error reporting API
83
- And the request used the "Ruby Bugsnag Notifier" notifier
84
- And the request contained the api key "a35a2a72bd230ac0aa0f52715bbdc6aa"
85
- And the payload field "events" is an array with 1 element
31
+ @rails3 @rails4 @rails5 @rails6
32
+ Scenario: Manual string notify
33
+ Given I start the rails service
34
+ When I navigate to the route "/handled/string_notify" on the rails app
35
+ And I wait to receive a request
36
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
86
37
  And the exception "errorClass" equals "RuntimeError"
87
38
  And the exception "message" starts with "handled string"
88
39
  And the event "unhandled" is false
89
40
  And the event "metaData.request.url" ends with "/handled/string_notify"
90
41
  And the event "app.type" equals "rails"
91
42
 
92
- Examples:
93
- | ruby_version | rails_version |
94
- | 2.0 | 3 |
95
- | 2.1 | 3 |
96
- | 2.2 | 3 |
97
- | 2.2 | 4 |
98
- | 2.2 | 5 |
99
- | 2.3 | 3 |
100
- | 2.3 | 4 |
101
- | 2.3 | 5 |
102
- | 2.4 | 3 |
103
- | 2.4 | 5 |
104
- | 2.5 | 3 |
105
- | 2.5 | 5 |
106
- | 2.5 | 6 |
@@ -1,53 +1,14 @@
1
1
  Feature: Ignore classes
2
2
 
3
- Background:
4
- Given I set environment variable "BUGSNAG_API_KEY" to "a35a2a72bd230ac0aa0f52715bbdc6aa"
5
- And I set environment variable "APP_PATH" to "/usr/src"
6
- And I configure the bugsnag endpoint
7
-
8
- Scenario Outline: Ignore_classes can be set to a different value in initializer
9
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
10
- And I set environment variable "BUGSNAG_IGNORE_CLASS" to "IgnoredError"
11
- And I start the service "rails<rails_version>"
12
- And I wait for the app to respond on port "6128<rails_version>"
13
- When I navigate to the route "/ignore_classes/initializer" on port "6128<rails_version>"
14
- Then I should receive 0 requests
15
-
16
- Examples:
17
- | ruby_version | rails_version |
18
- | 2.0 | 3 |
19
- | 2.1 | 3 |
20
- | 2.2 | 3 |
21
- | 2.2 | 4 |
22
- | 2.2 | 5 |
23
- | 2.3 | 3 |
24
- | 2.3 | 4 |
25
- | 2.3 | 5 |
26
- | 2.4 | 3 |
27
- | 2.4 | 5 |
28
- | 2.5 | 3 |
29
- | 2.5 | 5 |
30
- | 2.5 | 6 |
31
-
32
- Scenario Outline: Ignore_classes can be set to a different value after initializer
33
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
34
- And I start the service "rails<rails_version>"
35
- And I wait for the app to respond on port "6128<rails_version>"
36
- When I navigate to the route "/ignore_classes/after?ignore=IgnoredError" on port "6128<rails_version>"
37
- Then I should receive 0 requests
38
-
39
- Examples:
40
- | ruby_version | rails_version |
41
- | 2.0 | 3 |
42
- | 2.1 | 3 |
43
- | 2.2 | 3 |
44
- | 2.2 | 4 |
45
- | 2.2 | 5 |
46
- | 2.3 | 3 |
47
- | 2.3 | 4 |
48
- | 2.3 | 5 |
49
- | 2.4 | 3 |
50
- | 2.4 | 5 |
51
- | 2.5 | 3 |
52
- | 2.5 | 5 |
53
- | 2.5 | 6 |
3
+ @rails3 @rails4 @rails5 @rails6
4
+ Scenario: Ignore_classes can be set to a different value in initializer
5
+ Given I set environment variable "BUGSNAG_IGNORE_CLASS" to "IgnoredError"
6
+ And I start the rails service
7
+ When I navigate to the route "/ignore_classes/initializer" on the rails app
8
+ Then I should receive no requests
9
+
10
+ @rails3 @rails4 @rails5 @rails6
11
+ Scenario: Ignore_classes can be set to a different value after initializer
12
+ Given I start the rails service
13
+ When I navigate to the route "/ignore_classes/after?ignore=IgnoredError" on the rails app
14
+ Then I should receive no requests
@@ -1,40 +1,16 @@
1
1
  Feature: Metadata filters
2
2
 
3
- Background:
4
- Given I set environment variable "BUGSNAG_API_KEY" to "a35a2a72bd230ac0aa0f52715bbdc6aa"
5
- And I set environment variable "APP_PATH" to "/usr/src"
6
- And I configure the bugsnag endpoint
7
-
8
- Scenario Outline: Meta_data_filters should include Rails.configuration.filter_parameters
9
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
10
- And I start the service "rails<rails_version>"
11
- And I wait for the app to respond on port "6128<rails_version>"
12
- When I navigate to the route "/metadata_filters/filter" on port "6128<rails_version>"
13
- Then I should receive a request
14
- And the request is a valid for the error reporting API
15
- And the request used the "Ruby Bugsnag Notifier" notifier
16
- And the request contained the api key "a35a2a72bd230ac0aa0f52715bbdc6aa"
17
- And the payload field "events" is an array with 1 element
3
+ @rails3 @rails4 @rails5 @rails6
4
+ Scenario: Meta_data_filters should include Rails.configuration.filter_parameters
5
+ Given I start the rails service
6
+ When I navigate to the route "/metadata_filters/filter?filtered_parameter=foo&other_parameter=bar" on the rails app
7
+ And I wait to receive a request
8
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
18
9
  And the event "unhandled" is false
19
10
  And the exception "errorClass" equals "RuntimeError"
20
11
  And the exception "message" starts with "handled string"
21
12
  And the event "app.type" equals "rails"
22
- And the event "metaData.request.url" ends with "/metadata_filters/filter"
13
+ And the event "metaData.request.url" ends with "/metadata_filters/filter?filtered_parameter=[FILTERED]&other_parameter=bar"
23
14
  And the event "metaData.my_specific_filter" equals "[FILTERED]"
24
-
25
-
26
- Examples:
27
- | ruby_version | rails_version |
28
- | 2.0 | 3 |
29
- | 2.1 | 3 |
30
- | 2.2 | 3 |
31
- | 2.2 | 4 |
32
- | 2.2 | 5 |
33
- | 2.3 | 3 |
34
- | 2.3 | 4 |
35
- | 2.3 | 5 |
36
- | 2.4 | 3 |
37
- | 2.4 | 5 |
38
- | 2.5 | 3 |
39
- | 2.5 | 5 |
40
- | 2.5 | 6 |
15
+ And the event "metaData.request.params.filtered_parameter" equals "[FILTERED]"
16
+ And the event "metaData.request.params.other_parameter" equals "bar"
@@ -1,100 +1,26 @@
1
1
  Feature: Mongo automatic breadcrumbs
2
2
 
3
- Background:
4
- Given I set environment variable "BUGSNAG_API_KEY" to "a35a2a72bd230ac0aa0f52715bbdc6aa"
5
- And I set environment variable "APP_PATH" to "/usr/src"
6
- And I configure the bugsnag endpoint
3
+ @rails4 @rails5 @rails6
4
+ Scenario: Successful breadcrumbs
5
+ Given I start the rails service
6
+ When I navigate to the route "/mongo/success_crash" on the rails app
7
+ And I wait to receive a request
8
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
9
+ And the event contains a breadcrumb matching the JSON fixture in "features/fixtures/expected_breadcrumbs/mongo_success.json"
7
10
 
8
- Scenario Outline: Successful breadcrumbs
9
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
10
- And I start the service "rails<rails_version>"
11
- And I wait for the app to respond on port "6128<rails_version>"
12
- When I navigate to the route "/mongo/success_crash" on port "6128<rails_version>"
13
- Then I should receive a request
14
- And the request is a valid for the error reporting API
15
- And the request used the "Ruby Bugsnag Notifier" notifier
16
- And the request contained the api key "a35a2a72bd230ac0aa0f52715bbdc6aa"
17
- And the event has a "process" breadcrumb named "Mongo query succeeded"
18
- And the event "breadcrumbs.1.timestamp" is a timestamp
19
- And the event "breadcrumbs.1.metaData.event_name" equals "mongo.succeeded"
20
- And the event "breadcrumbs.1.metaData.command_name" equals "insert"
21
- And the event "breadcrumbs.1.metaData.database_name" equals "rails<rails_version>_development"
22
- And the event "breadcrumbs.1.metaData.operation_id" is not null
23
- And the event "breadcrumbs.1.metaData.request_id" is not null
24
- And the event "breadcrumbs.1.metaData.duration" is not null
25
- And the event "breadcrumbs.1.metaData.collection" equals "mongo_models"
11
+ @rails4 @rails5 @rails6
12
+ Scenario: Breadcrumb with filter parameters
13
+ Given I start the rails service
14
+ When I navigate to the route "/mongo/get_crash" on the rails app
15
+ And I wait to receive a request
16
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
17
+ And the event contains a breadcrumb matching the JSON fixture in "features/fixtures/expected_breadcrumbs/mongo_filtered_request.json"
18
+ And the event contains a breadcrumb matching the JSON fixture in "features/fixtures/expected_breadcrumbs/mongo_filtered_result.json"
26
19
 
27
- Examples:
28
- | ruby_version | rails_version |
29
- | 2.2 | 4 |
30
- | 2.2 | 5 |
31
- | 2.3 | 4 |
32
- | 2.3 | 5 |
33
- | 2.4 | 5 |
34
- | 2.5 | 5 |
35
-
36
- Scenario Outline: Breadcrumb with filter parameters
37
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
38
- And I start the service "rails<rails_version>"
39
- And I wait for the app to respond on port "6128<rails_version>"
40
- When I navigate to the route "/mongo/get_crash" on port "6128<rails_version>"
41
- Then I should receive a request
42
- And the request is a valid for the error reporting API
43
- And the request used the "Ruby Bugsnag Notifier" notifier
44
- And the request contained the api key "a35a2a72bd230ac0aa0f52715bbdc6aa"
45
- And the event has a "process" breadcrumb named "Mongo query succeeded"
46
- And the event "breadcrumbs.1.timestamp" is a timestamp
47
- And the event "breadcrumbs.1.metaData.event_name" equals "mongo.succeeded"
48
- And the event "breadcrumbs.1.metaData.command_name" equals "find"
49
- And the event "breadcrumbs.1.metaData.database_name" equals "rails<rails_version>_development"
50
- And the event "breadcrumbs.1.metaData.operation_id" is not null
51
- And the event "breadcrumbs.1.metaData.request_id" is not null
52
- And the event "breadcrumbs.1.metaData.duration" is not null
53
- And the event "breadcrumbs.1.metaData.collection" equals "mongo_models"
54
- And the event "breadcrumbs.1.metaData.filter" equals "{"string_field":"?"}"
55
- And the event "breadcrumbs.2.timestamp" is a timestamp
56
- And the event "breadcrumbs.2.metaData.event_name" equals "mongo.succeeded"
57
- And the event "breadcrumbs.2.metaData.command_name" equals "find"
58
- And the event "breadcrumbs.2.metaData.database_name" equals "rails<rails_version>_development"
59
- And the event "breadcrumbs.2.metaData.operation_id" is not null
60
- And the event "breadcrumbs.2.metaData.request_id" is not null
61
- And the event "breadcrumbs.2.metaData.duration" is not null
62
- And the event "breadcrumbs.2.metaData.collection" equals "mongo_models"
63
- And the event "breadcrumbs.2.metaData.filter" equals "{"$or":[{"string_field":"?"},{"numeric_field":"?"}]}"
64
-
65
- Examples:
66
- | ruby_version | rails_version |
67
- | 2.2 | 4 |
68
- | 2.2 | 5 |
69
- | 2.3 | 4 |
70
- | 2.3 | 5 |
71
- | 2.4 | 5 |
72
- | 2.5 | 5 |
73
-
74
- Scenario Outline: Failure breadcrumbs
75
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
76
- And I start the service "rails<rails_version>"
77
- And I wait for the app to respond on port "6128<rails_version>"
78
- When I navigate to the route "/mongo/failure_crash" on port "6128<rails_version>"
79
- Then I should receive a request
80
- And the request is a valid for the error reporting API
81
- And the request used the "Ruby Bugsnag Notifier" notifier
82
- And the request contained the api key "a35a2a72bd230ac0aa0f52715bbdc6aa"
83
- And the event has a "process" breadcrumb named "Mongo query failed"
84
- And the event "breadcrumbs.1.timestamp" is a timestamp
85
- And the event "breadcrumbs.1.metaData.event_name" equals "mongo.failed"
86
- And the event "breadcrumbs.1.metaData.command_name" equals "bogus"
87
- And the event "breadcrumbs.1.metaData.database_name" equals "rails<rails_version>_development"
88
- And the event "breadcrumbs.1.metaData.operation_id" is not null
89
- And the event "breadcrumbs.1.metaData.request_id" is not null
90
- And the event "breadcrumbs.1.metaData.duration" is not null
91
- And the event "breadcrumbs.1.metaData.collection" equals 1
92
-
93
- Examples:
94
- | ruby_version | rails_version |
95
- | 2.2 | 4 |
96
- | 2.2 | 5 |
97
- | 2.3 | 4 |
98
- | 2.3 | 5 |
99
- | 2.4 | 5 |
100
- | 2.5 | 5 |
20
+ @rails4 @rails5 @rails6
21
+ Scenario: Failure breadcrumbs
22
+ Given I start the rails service
23
+ When I navigate to the route "/mongo/failure_crash" on the rails app
24
+ And I wait to receive a request
25
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
26
+ And the event contains a breadcrumb matching the JSON fixture in "features/fixtures/expected_breadcrumbs/mongo_failed.json"
@@ -0,0 +1,29 @@
1
+ Feature: On error callbacks
2
+
3
+ @rails3 @rails4 @rails5 @rails6
4
+ Scenario: Rails on_error works on handled errors
5
+ Given I set environment variable "ADD_ON_ERROR" to "true"
6
+ And I start the rails service
7
+ When I navigate to the route "/handled/unthrown" on the rails app
8
+ And I wait to receive a request
9
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
10
+ And the exception "errorClass" equals "RuntimeError"
11
+ And the exception "message" starts with "handled unthrown error"
12
+ And the event "unhandled" is false
13
+ And the event "app.type" equals "rails"
14
+ And the event "metaData.request.url" ends with "/handled/unthrown"
15
+ And the event "metaData.on_error.source" equals "on_error handled"
16
+
17
+ @rails3 @rails4 @rails5 @rails6
18
+ Scenario: Rails on_error works on unhandled errors
19
+ Given I set environment variable "ADD_ON_ERROR" to "true"
20
+ And I start the rails service
21
+ When I navigate to the route "/unhandled/error" on the rails app
22
+ And I wait to receive a request
23
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
24
+ And the exception "errorClass" equals "NameError"
25
+ And the exception "message" starts with "undefined local variable or method `generate_unhandled_error' for #<UnhandledController"
26
+ And the event "unhandled" is true
27
+ And the event "app.type" equals "rails"
28
+ And the event "metaData.request.url" ends with "/unhandled/error"
29
+ And the event "metaData.on_error.source" equals "on_error unhandled"
@@ -1,100 +1,35 @@
1
1
  Feature: Project root configuration
2
2
 
3
- Background:
4
- Given I set environment variable "BUGSNAG_API_KEY" to "a35a2a72bd230ac0aa0f52715bbdc6aa"
5
- And I set environment variable "APP_PATH" to "/usr/src"
6
- And I configure the bugsnag endpoint
7
-
8
- Scenario Outline: Project_root should default to Rails.root
9
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
10
- And I start the service "rails<rails_version>"
11
- And I wait for the app to respond on port "6128<rails_version>"
12
- When I navigate to the route "/project_root/default" on port "6128<rails_version>"
13
- Then I should receive a request
14
- And the request is a valid for the error reporting API
15
- And the request used the "Ruby Bugsnag Notifier" notifier
16
- And the request contained the api key "a35a2a72bd230ac0aa0f52715bbdc6aa"
17
- And the payload field "events" is an array with 1 element
3
+ @rails3 @rails4 @rails5 @rails6
4
+ Scenario: Project_root should default to Rails.root
5
+ Given I start the rails service
6
+ When I navigate to the route "/project_root/default" on the rails app
7
+ And I wait to receive a request
8
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
18
9
  And the exception "errorClass" equals "RuntimeError"
19
10
  And the exception "message" starts with "handled string"
20
11
  And the event "metaData.request.url" ends with "/project_root/default"
21
12
  And the "file" of the top non-bugsnag stackframe equals "app/controllers/project_root_controller.rb"
22
13
 
23
- Examples:
24
- | ruby_version | rails_version |
25
- | 2.0 | 3 |
26
- | 2.1 | 3 |
27
- | 2.2 | 3 |
28
- | 2.2 | 4 |
29
- | 2.2 | 5 |
30
- | 2.3 | 3 |
31
- | 2.3 | 4 |
32
- | 2.3 | 5 |
33
- | 2.4 | 3 |
34
- | 2.4 | 5 |
35
- | 2.5 | 3 |
36
- | 2.5 | 5 |
37
- | 2.5 | 6 |
38
-
39
- Scenario Outline: Project_root can be set in an initializer
40
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
41
- And I set environment variable "BUGSNAG_PROJECT_ROOT" to "/foo/bar"
42
- And I start the service "rails<rails_version>"
43
- And I wait for the app to respond on port "6128<rails_version>"
44
- When I navigate to the route "/project_root/initializer" on port "6128<rails_version>"
45
- Then I should receive a request
46
- And the request is a valid for the error reporting API
47
- And the request used the "Ruby Bugsnag Notifier" notifier
48
- And the request contained the api key "a35a2a72bd230ac0aa0f52715bbdc6aa"
49
- And the payload field "events" is an array with 1 element
14
+ @rails3 @rails4 @rails5 @rails6
15
+ Scenario: Project_root can be set in an initializer
16
+ Given I set environment variable "BUGSNAG_PROJECT_ROOT" to "/foo/bar"
17
+ And I start the rails service
18
+ When I navigate to the route "/project_root/initializer" on the rails app
19
+ And I wait to receive a request
20
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
50
21
  And the exception "errorClass" equals "RuntimeError"
51
22
  And the exception "message" starts with "handled string"
52
23
  And the event "metaData.request.url" ends with "/project_root/initializer"
53
24
  And the "file" of the top non-bugsnag stackframe equals "/usr/src/app/controllers/project_root_controller.rb"
54
25
 
55
- Examples:
56
- | ruby_version | rails_version |
57
- | 2.0 | 3 |
58
- | 2.1 | 3 |
59
- | 2.2 | 3 |
60
- | 2.2 | 4 |
61
- | 2.2 | 5 |
62
- | 2.3 | 3 |
63
- | 2.3 | 4 |
64
- | 2.3 | 5 |
65
- | 2.4 | 3 |
66
- | 2.4 | 5 |
67
- | 2.5 | 3 |
68
- | 2.5 | 5 |
69
- | 2.5 | 6 |
70
-
71
- Scenario Outline: Project_root can be set after an initializer
72
- Given I set environment variable "RUBY_VERSION" to "<ruby_version>"
73
- And I start the service "rails<rails_version>"
74
- And I wait for the app to respond on port "6128<rails_version>"
75
- When I navigate to the route "/project_root/after" on port "6128<rails_version>"
76
- Then I should receive a request
77
- And the request is a valid for the error reporting API
78
- And the request used the "Ruby Bugsnag Notifier" notifier
79
- And the request contained the api key "a35a2a72bd230ac0aa0f52715bbdc6aa"
80
- And the payload field "events" is an array with 1 element
26
+ @rails3 @rails4 @rails5 @rails6
27
+ Scenario: Project_root can be set after an initializer
28
+ Given I start the rails service
29
+ When I navigate to the route "/project_root/after" on the rails app
30
+ And I wait to receive a request
31
+ Then the request is valid for the error reporting API version "4.0" for the "Ruby Bugsnag Notifier"
81
32
  And the exception "errorClass" equals "RuntimeError"
82
33
  And the exception "message" starts with "handled string"
83
34
  And the event "metaData.request.url" ends with "/project_root/after"
84
35
  And the "file" of the top non-bugsnag stackframe equals "/usr/src/app/controllers/project_root_controller.rb"
85
-
86
- Examples:
87
- | ruby_version | rails_version |
88
- | 2.0 | 3 |
89
- | 2.1 | 3 |
90
- | 2.2 | 3 |
91
- | 2.2 | 4 |
92
- | 2.2 | 5 |
93
- | 2.3 | 3 |
94
- | 2.3 | 4 |
95
- | 2.3 | 5 |
96
- | 2.4 | 3 |
97
- | 2.4 | 5 |
98
- | 2.5 | 3 |
99
- | 2.5 | 5 |
100
- | 2.5 | 6 |