bugsnag 6.11.1 → 6.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -0
  3. data/CONTRIBUTING.md +6 -1
  4. data/Gemfile +18 -11
  5. data/README.md +3 -3
  6. data/UPGRADING.md +22 -0
  7. data/VERSION +1 -1
  8. data/features/fixtures/docker-compose.yml +37 -0
  9. data/features/fixtures/rails3/app/Gemfile +1 -1
  10. data/features/fixtures/rails4/app/Gemfile +1 -1
  11. data/features/fixtures/rails5/app/Gemfile +1 -1
  12. data/features/fixtures/rails6/.dockerignore +1 -0
  13. data/features/fixtures/rails6/Dockerfile +26 -0
  14. data/features/fixtures/rails6/app/.browserslistrc +1 -0
  15. data/features/fixtures/rails6/app/.gitignore +35 -0
  16. data/features/fixtures/rails6/app/.ruby-version +1 -0
  17. data/features/fixtures/rails6/app/Gemfile +57 -0
  18. data/features/fixtures/rails6/app/README.md +24 -0
  19. data/features/fixtures/rails6/app/Rakefile +6 -0
  20. data/features/fixtures/rails6/app/app/assets/config/manifest.js +2 -0
  21. data/features/fixtures/rails6/app/app/assets/images/.keep +0 -0
  22. data/features/fixtures/rails6/app/app/assets/stylesheets/application.css +15 -0
  23. data/features/fixtures/rails6/app/app/channels/application_cable/channel.rb +4 -0
  24. data/features/fixtures/rails6/app/app/channels/application_cable/connection.rb +4 -0
  25. data/features/fixtures/rails6/app/app/controllers/api_key_controller.rb +16 -0
  26. data/features/fixtures/rails6/app/app/controllers/app_type_controller.rb +16 -0
  27. data/features/fixtures/rails6/app/app/controllers/app_version_controller.rb +21 -0
  28. data/features/fixtures/rails6/app/app/controllers/application_controller.rb +7 -0
  29. data/features/fixtures/rails6/app/app/controllers/auto_notify_controller.rb +27 -0
  30. data/features/fixtures/rails6/app/app/controllers/before_notify_controller.rb +40 -0
  31. data/features/fixtures/rails6/app/app/controllers/breadcrumbs_controller.rb +24 -0
  32. data/features/fixtures/rails6/app/app/controllers/clearance_controller.rb +33 -0
  33. data/features/fixtures/rails6/app/app/controllers/concerns/.keep +0 -0
  34. data/features/fixtures/rails6/app/app/controllers/handled_controller.rb +22 -0
  35. data/features/fixtures/rails6/app/app/controllers/ignore_classes_controller.rb +19 -0
  36. data/features/fixtures/rails6/app/app/controllers/metadata_filters_controller.rb +12 -0
  37. data/features/fixtures/rails6/app/app/controllers/project_root_controller.rb +21 -0
  38. data/features/fixtures/rails6/app/app/controllers/release_stage_controller.rb +16 -0
  39. data/features/fixtures/rails6/app/app/controllers/send_code_controller.rb +16 -0
  40. data/features/fixtures/rails6/app/app/controllers/send_environment_controller.rb +8 -0
  41. data/features/fixtures/rails6/app/app/controllers/session_tracking_controller.rb +20 -0
  42. data/features/fixtures/rails6/app/app/controllers/unhandled_controller.rb +7 -0
  43. data/features/fixtures/rails6/app/app/helpers/application_helper.rb +2 -0
  44. data/features/fixtures/rails6/app/app/javascript/channels/consumer.js +6 -0
  45. data/features/fixtures/rails6/app/app/javascript/channels/index.js +5 -0
  46. data/features/fixtures/rails6/app/app/javascript/packs/application.js +9 -0
  47. data/features/fixtures/rails6/app/app/jobs/application_job.rb +7 -0
  48. data/features/fixtures/rails6/app/app/jobs/notify_job.rb +5 -0
  49. data/features/fixtures/rails6/app/app/mailers/application_mailer.rb +4 -0
  50. data/features/fixtures/rails6/app/app/models/application_record.rb +3 -0
  51. data/features/fixtures/rails6/app/app/models/concerns/.keep +0 -0
  52. data/features/fixtures/rails6/app/app/models/user.rb +3 -0
  53. data/features/fixtures/rails6/app/app/views/layouts/application.html.erb +15 -0
  54. data/features/fixtures/rails6/app/app/views/layouts/mailer.html.erb +13 -0
  55. data/features/fixtures/rails6/app/app/views/layouts/mailer.text.erb +1 -0
  56. data/features/fixtures/rails6/app/babel.config.js +70 -0
  57. data/features/fixtures/rails6/app/config.ru +5 -0
  58. data/features/fixtures/rails6/app/config/application.rb +19 -0
  59. data/features/fixtures/rails6/app/config/boot.rb +4 -0
  60. data/features/fixtures/rails6/app/config/cable.yml +13 -0
  61. data/features/fixtures/rails6/app/config/credentials.yml.enc +1 -0
  62. data/features/fixtures/rails6/app/config/database.yml +29 -0
  63. data/features/fixtures/rails6/app/config/environment.rb +5 -0
  64. data/features/fixtures/rails6/app/config/environments/development.rb +62 -0
  65. data/features/fixtures/rails6/app/config/environments/production.rb +112 -0
  66. data/features/fixtures/rails6/app/config/environments/rails_env.rb +55 -0
  67. data/features/fixtures/rails6/app/config/environments/test.rb +47 -0
  68. data/features/fixtures/rails6/app/config/initializers/application_controller_renderer.rb +8 -0
  69. data/features/fixtures/rails6/app/config/initializers/assets.rb +14 -0
  70. data/features/fixtures/rails6/app/config/initializers/backtrace_silencers.rb +7 -0
  71. data/features/fixtures/rails6/app/config/initializers/bugsnag.rb +20 -0
  72. data/features/fixtures/rails6/app/config/initializers/content_security_policy.rb +27 -0
  73. data/features/fixtures/rails6/app/config/initializers/cookies_serializer.rb +5 -0
  74. data/features/fixtures/rails6/app/config/initializers/filter_parameter_logging.rb +5 -0
  75. data/features/fixtures/rails6/app/config/initializers/inflections.rb +16 -0
  76. data/features/fixtures/rails6/app/config/initializers/mime_types.rb +4 -0
  77. data/features/fixtures/rails6/app/config/initializers/wrap_parameters.rb +14 -0
  78. data/features/fixtures/rails6/app/config/locales/en.yml +33 -0
  79. data/features/fixtures/rails6/app/config/puma.rb +35 -0
  80. data/features/fixtures/rails6/app/config/routes.rb +58 -0
  81. data/features/fixtures/rails6/app/config/secrets.yml +25 -0
  82. data/features/fixtures/rails6/app/config/spring.rb +6 -0
  83. data/features/fixtures/rails6/app/config/storage.yml +34 -0
  84. data/features/fixtures/rails6/app/config/webpack/development.js +5 -0
  85. data/features/fixtures/rails6/app/config/webpack/environment.js +3 -0
  86. data/features/fixtures/rails6/app/config/webpack/production.js +5 -0
  87. data/features/fixtures/rails6/app/config/webpack/rails_env.js +5 -0
  88. data/features/fixtures/rails6/app/config/webpack/test.js +5 -0
  89. data/features/fixtures/rails6/app/config/webpacker.yml +121 -0
  90. data/features/fixtures/rails6/app/db/migrate/20180426095545_create_users.rb +17 -0
  91. data/features/fixtures/rails6/app/db/schema.rb +29 -0
  92. data/features/fixtures/rails6/app/db/seeds.rb +7 -0
  93. data/features/fixtures/rails6/app/lib/assets/.keep +0 -0
  94. data/features/fixtures/rails6/app/lib/tasks/.keep +0 -0
  95. data/features/fixtures/rails6/app/log/.keep +0 -0
  96. data/features/fixtures/rails6/app/package.json +15 -0
  97. data/features/fixtures/rails6/app/postcss.config.js +12 -0
  98. data/features/fixtures/rails6/app/public/404.html +67 -0
  99. data/features/fixtures/rails6/app/public/422.html +67 -0
  100. data/features/fixtures/rails6/app/public/500.html +66 -0
  101. data/features/fixtures/rails6/app/public/apple-touch-icon-precomposed.png +0 -0
  102. data/features/fixtures/rails6/app/public/apple-touch-icon.png +0 -0
  103. data/features/fixtures/rails6/app/public/favicon.ico +0 -0
  104. data/features/fixtures/rails6/app/public/robots.txt +1 -0
  105. data/features/fixtures/rails6/app/storage/.keep +0 -0
  106. data/features/fixtures/rails6/app/test/application_system_test_case.rb +5 -0
  107. data/features/fixtures/rails6/app/test/channels/application_cable/connection_test.rb +11 -0
  108. data/features/fixtures/rails6/app/test/controllers/.keep +0 -0
  109. data/features/fixtures/rails6/app/test/fixtures/.keep +0 -0
  110. data/features/fixtures/rails6/app/test/fixtures/files/.keep +0 -0
  111. data/features/fixtures/rails6/app/test/helpers/.keep +0 -0
  112. data/features/fixtures/rails6/app/test/integration/.keep +0 -0
  113. data/features/fixtures/rails6/app/test/mailers/.keep +0 -0
  114. data/features/fixtures/rails6/app/test/models/.keep +0 -0
  115. data/features/fixtures/rails6/app/test/system/.keep +0 -0
  116. data/features/fixtures/rails6/app/test/test_helper.rb +13 -0
  117. data/features/fixtures/rails6/app/tmp/.keep +0 -0
  118. data/features/fixtures/rails6/app/yarn.lock +6082 -0
  119. data/features/rails_features/api_key.feature +3 -1
  120. data/features/rails_features/app_type.feature +3 -1
  121. data/features/rails_features/app_version.feature +4 -1
  122. data/features/rails_features/auto_capture_sessions.feature +5 -1
  123. data/features/rails_features/auto_notify.feature +5 -1
  124. data/features/rails_features/before_notify.feature +3 -0
  125. data/features/rails_features/breadcrumbs.feature +5 -0
  126. data/features/rails_features/handled.feature +3 -0
  127. data/features/rails_features/ignore_classes.feature +3 -1
  128. data/features/rails_features/meta_data_filters.feature +1 -0
  129. data/features/rails_features/project_root.feature +3 -0
  130. data/features/rails_features/release_stage.feature +4 -1
  131. data/features/rails_features/send_code.feature +2 -0
  132. data/features/rails_features/send_environment.feature +2 -1
  133. data/features/rails_features/unhandled.feature +2 -1
  134. data/features/rails_features/user_info.feature +3 -1
  135. data/lib/bugsnag/breadcrumbs/validator.rb +2 -2
  136. data/lib/bugsnag/configuration.rb +4 -0
  137. data/lib/bugsnag/integrations/que.rb +16 -11
  138. data/lib/bugsnag/integrations/rack.rb +4 -1
  139. data/lib/bugsnag/integrations/railtie.rb +1 -0
  140. data/lib/bugsnag/integrations/rake.rb +58 -26
  141. data/lib/bugsnag/integrations/resque.rb +6 -1
  142. data/lib/bugsnag/integrations/sidekiq.rb +1 -0
  143. data/lib/bugsnag/middleware/rails3_request.rb +0 -7
  144. data/lib/bugsnag/report.rb +4 -1
  145. data/lib/bugsnag/session_tracker.rb +2 -1
  146. data/spec/breadcrumbs/validator_spec.rb +1 -0
  147. data/spec/configuration_spec.rb +31 -0
  148. data/spec/fixtures/tasks/Rakefile +12 -0
  149. data/spec/integrations/logger_spec.rb +4 -8
  150. data/spec/integrations/que_spec.rb +35 -1
  151. data/spec/integrations/rack_spec.rb +23 -1
  152. data/spec/integrations/rake_spec.rb +11 -12
  153. data/spec/integrations/resque_spec.rb +8 -1
  154. data/spec/integrations/sidekiq_spec.rb +2 -0
  155. data/spec/report_spec.rb +13 -1
  156. data/spec/session_tracker_spec.rb +1 -0
  157. metadata +110 -3
@@ -43,7 +43,10 @@ module Bugsnag
43
43
  :type => Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
44
44
  :attributes => FRAMEWORK_ATTRIBUTES
45
45
  }
46
- report.meta_data.merge!({:context => "#{payload['class']}@#{queue}", :payload => payload})
46
+
47
+ context = "#{payload['class']}@#{queue}"
48
+ report.meta_data.merge!({:context => context, :payload => payload})
49
+ report.context = context
47
50
  end
48
51
  end
49
52
  end
@@ -59,10 +62,12 @@ if Resque::Worker.new(:bugsnag_fork_check).fork_per_job?
59
62
  Resque.after_fork do
60
63
  Bugsnag.configuration.app_type = "resque"
61
64
  Bugsnag.configuration.default_delivery_method = :synchronous
65
+ Bugsnag.configuration.runtime_versions["resque"] = ::Resque::VERSION
62
66
  end
63
67
  else
64
68
  Resque.before_first_fork do
65
69
  Bugsnag.configuration.app_type = "resque"
66
70
  Bugsnag.configuration.default_delivery_method = :synchronous
71
+ Bugsnag.configuration.runtime_versions["resque"] = ::Resque::VERSION
67
72
  end
68
73
  end
@@ -15,6 +15,7 @@ module Bugsnag
15
15
  Bugsnag.configuration.internal_middleware.use(Bugsnag::Middleware::Sidekiq)
16
16
  Bugsnag.configuration.app_type = "sidekiq"
17
17
  Bugsnag.configuration.default_delivery_method = :synchronous
18
+ Bugsnag.configuration.runtime_versions["sidekiq"] = ::Sidekiq::VERSION
18
19
  end
19
20
 
20
21
  def call(worker, msg, queue)
@@ -32,13 +32,6 @@ module Bugsnag::Middleware
32
32
  })
33
33
 
34
34
  report.user["id"] = client_ip
35
-
36
- # Add the rails version
37
- if report.configuration.send_environment
38
- report.add_tab(:environment, {
39
- :railsVersion => Rails::VERSION::STRING
40
- })
41
- end
42
35
  end
43
36
 
44
37
  @bugsnag.call(report)
@@ -29,6 +29,7 @@ module Bugsnag
29
29
  attr_accessor :delivery_method
30
30
  attr_accessor :exceptions
31
31
  attr_accessor :hostname
32
+ attr_accessor :runtime_versions
32
33
  attr_accessor :grouping_hash
33
34
  attr_accessor :meta_data
34
35
  attr_accessor :raw_exceptions
@@ -55,6 +56,7 @@ module Bugsnag
55
56
  self.breadcrumbs = []
56
57
  self.delivery_method = configuration.delivery_method
57
58
  self.hostname = configuration.hostname
59
+ self.runtime_versions = configuration.runtime_versions.dup
58
60
  self.meta_data = {}
59
61
  self.release_stage = configuration.release_stage
60
62
  self.severity = auto_notify ? "error" : "warning"
@@ -97,7 +99,8 @@ module Bugsnag
97
99
  },
98
100
  context: context,
99
101
  device: {
100
- hostname: hostname
102
+ hostname: hostname,
103
+ runtimeVersions: runtime_versions
101
104
  },
102
105
  exceptions: exceptions,
103
106
  groupingHash: grouping_hash,
@@ -118,7 +118,8 @@ module Bugsnag
118
118
  :version => Bugsnag::Report::NOTIFIER_VERSION
119
119
  },
120
120
  :device => {
121
- :hostname => Bugsnag.configuration.hostname
121
+ :hostname => Bugsnag.configuration.hostname,
122
+ :runtimeVersions => Bugsnag.configuration.runtime_versions
122
123
  },
123
124
  :app => {
124
125
  :version => Bugsnag.configuration.app_version,
@@ -64,6 +64,7 @@ RSpec.describe Bugsnag::Breadcrumbs::Validator do
64
64
 
65
65
  meta_data = {
66
66
  :string => "This is a string",
67
+ :symbol => :this_is_a_symbol,
67
68
  :integer => 12345,
68
69
  :float => 12345.6789,
69
70
  :false => false,
@@ -161,6 +161,37 @@ describe Bugsnag::Configuration do
161
161
  end
162
162
  end
163
163
 
164
+ describe "#hostname" do
165
+ it "has a default value" do
166
+ expect(subject.hostname.length).to be > 0
167
+ end
168
+
169
+ it "has a value set by Socket" do
170
+ expect(subject.hostname).to eq(Socket.gethostname)
171
+ end
172
+
173
+ it "has a value set by DYNO environment variable" do
174
+ ENV['DYNO'] = 'localhost'
175
+ expect(subject.hostname).to eq("localhost")
176
+ end
177
+
178
+ after do
179
+ ENV['DYNO'] = nil
180
+ end
181
+ end
182
+
183
+ describe "#runtime_versions" do
184
+ it "has a default value" do
185
+ expect(subject.runtime_versions.length).to be > 0
186
+ expect(subject.runtime_versions["ruby"]).to eq(RUBY_VERSION)
187
+ end
188
+
189
+ it "has a settable value" do
190
+ subject.runtime_versions["ruby"] = '9.9.9'
191
+ expect(subject.runtime_versions["ruby"]).to eq('9.9.9')
192
+ end
193
+ end
194
+
164
195
  describe "logger" do
165
196
  class TestLogger
166
197
  attr_accessor :logs
@@ -1,3 +1,15 @@
1
+ if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.0')
2
+ # Mixing Module#prepend with alias_method can sometimes lead to infinite
3
+ # mutual recursion, so this is to test that it doesn't happen.
4
+ mod = Module.new do
5
+ def execute(args = nil)
6
+ puts 'In module prepended to Rake::Task'
7
+ super
8
+ end
9
+ end
10
+ Rake::Task.send(:prepend, mod)
11
+ end
12
+
1
13
  require "bugsnag/integrations/rake"
2
14
 
3
15
  namespace :test do
@@ -83,18 +83,14 @@ describe 'Configuration.logger' do
83
83
  key_warning = /\[Bugsnag\] .* No valid API key has been set, notifications will not be sent/
84
84
 
85
85
  def run_app(name)
86
- out_reader, out_writer = IO.pipe
86
+ output = ''
87
87
  Dir.chdir(File.join(File.dirname(__FILE__), "../fixtures/apps/scripts")) do
88
88
  Bundler.with_clean_env do
89
- pid = Process.spawn(@env, "bundle exec ruby #{name}.rb",
90
- out: out_writer.fileno,
91
- err: out_writer.fileno)
92
- Process.waitpid(pid, 0)
89
+ IO.popen([@env, 'bundle', 'exec', 'ruby', "#{name}.rb", err: [:child, :out]]) do |io|
90
+ output << io.read
91
+ end
93
92
  end
94
93
  end
95
- out_writer.close
96
- output = ""
97
- output << out_reader.gets until out_reader.eof?
98
94
  output
99
95
  end
100
96
 
@@ -6,6 +6,16 @@ describe 'Bugsnag::Que', :order => :defined do
6
6
  unless defined?(::Que)
7
7
  @mocked_que = true
8
8
  class ::Que
9
+ Version = '9.9.9'
10
+ class << self
11
+ attr_accessor :error_notifier
12
+ end
13
+ end
14
+ module Kernel
15
+ alias_method :old_require, :require
16
+ def require(path)
17
+ old_require(path) unless /^que/.match(path)
18
+ end
9
19
  end
10
20
  end
11
21
  end
@@ -25,7 +35,6 @@ describe 'Bugsnag::Que', :order => :defined do
25
35
  expect(report).to receive(:add_tab).with(:job, {
26
36
  :error_count => 1,
27
37
  :job_class => 'ActiveJob::QueueAdapters::QueAdapter::JobWrapper',
28
- :args => [{"queue_name" => "foo", "arguments" => "bar"}],
29
38
  :job_id => "ID",
30
39
  :wrapper_job_class => 'ActiveJob::QueueAdapters::QueAdapter::JobWrapper',
31
40
  :wrapper_job_id => "ID",
@@ -45,6 +54,8 @@ describe 'Bugsnag::Que', :order => :defined do
45
54
  allow(Bugsnag).to receive(:configuration).and_return(config)
46
55
  expect(config).to receive(:app_type)
47
56
  expect(config).to receive(:app_type=).with('que')
57
+ runtime = {}
58
+ expect(config).to receive(:runtime_versions).and_return(runtime)
48
59
  allow(config).to receive(:clear_request_data)
49
60
  expect(Que).to receive(:error_notifier=) do |handler|
50
61
  handler.call(error, job)
@@ -52,9 +63,32 @@ describe 'Bugsnag::Que', :order => :defined do
52
63
 
53
64
  #Kick off
54
65
  load './lib/bugsnag/integrations/que.rb'
66
+
67
+ expect(runtime).to eq("que" => "9.9.9")
68
+ end
69
+
70
+ context 'when the job is nil' do
71
+ it 'notifies Bugsnag' do
72
+ load './lib/bugsnag/integrations/que.rb'
73
+ error = RuntimeError.new('nil job')
74
+ report = Bugsnag::Report.new(error, Bugsnag::Configuration.new)
75
+ expect(Bugsnag).to receive(:notify).with(error, true).and_yield(report)
76
+
77
+ Que.error_notifier.call(error, nil)
78
+
79
+ expect(report.meta_data['custom'].fetch('job')).to eq(nil)
80
+ expect(report.severity).to eq('error')
81
+ expect(report.severity_reason).to eq({
82
+ :type => Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
83
+ :attributes => {:framework => 'Que'},
84
+ })
85
+ end
55
86
  end
56
87
 
57
88
  after do
58
89
  Object.send(:remove_const, :Que) if @mocked_que
90
+ module Kernel
91
+ alias_method :require, :old_require
92
+ end
59
93
  end
60
94
  end
@@ -18,6 +18,19 @@ describe Bugsnag::Rack do
18
18
  app = lambda { |env| raise exception }
19
19
  rack_stack = Bugsnag::Rack.new(app)
20
20
 
21
+ before do
22
+ unless defined?(::Rack)
23
+ @mocked_rack = true
24
+ class Rack
25
+ def self.release
26
+ '9.9.9'
27
+ end
28
+ class Request
29
+ end
30
+ end
31
+ end
32
+ end
33
+
21
34
  it "re-raises the exception" do
22
35
  expect { rack_stack.call(rack_env) }.to raise_error(BugsnagTestException)
23
36
  end
@@ -47,6 +60,13 @@ describe Bugsnag::Rack do
47
60
  }
48
61
  end
49
62
 
63
+ it "applies the rack version" do
64
+ app = lambda { |env| raise BugsnagTestException.new("It crashed") }
65
+ rack_stack = Bugsnag::Rack.new(app)
66
+
67
+ expect(Bugsnag.configuration.runtime_versions["rack"]).to eq '9.9.9'
68
+ end
69
+
50
70
  it "does not deliver an exception if auto_notify is disabled" do
51
71
  Bugsnag.configure do |config|
52
72
  config.auto_notify = false
@@ -63,6 +83,9 @@ describe Bugsnag::Rack do
63
83
  unless defined?(::Rack)
64
84
  @mocked_rack = true
65
85
  class Rack
86
+ def self.release
87
+ '9.9.9'
88
+ end
66
89
  class Request
67
90
  end
68
91
  end
@@ -196,7 +219,6 @@ describe Bugsnag::Rack do
196
219
  end
197
220
 
198
221
  it "don't mess with middlewares list on each req" do
199
- stub_const('Rack', nil)
200
222
  app = lambda { |env| ['200', {}, ['']] }
201
223
 
202
224
  Bugsnag::Rack.new(app)
@@ -55,18 +55,17 @@ describe "Bugsnag Rake integration" do
55
55
  let(:request) { JSON.parse(queue.pop) }
56
56
 
57
57
  it 'should run the rake middleware when rake tasks crash' do
58
- #Skips this test in ruby 1.9.3 with travis
59
- unless ENV['TRAVIS'] && RUBY_VERSION == "1.9.3"
60
- ENV['BUGSNAG_TEST_SERVER_PORT'] = server.config[:Port].to_s
61
- task_fixtures_path = File.join(File.dirname(__FILE__), '../fixtures', 'tasks')
62
- Dir.chdir(task_fixtures_path) do
63
- system("bundle exec rake test:crash > /dev/null 2>&1")
64
- end
65
-
66
- result = request()
67
- expect(result["events"][0]["metaData"]["rake_task"]).not_to be_nil
68
- expect(result["events"][0]["metaData"]["rake_task"]["name"]).to eq("test:crash")
58
+ ENV['BUGSNAG_TEST_SERVER_PORT'] = server.config[:Port].to_s
59
+ task_fixtures_path = File.join(File.dirname(__FILE__), '../fixtures', 'tasks')
60
+ Dir.chdir(task_fixtures_path) do
61
+ system("bundle exec rake test:crash > /dev/null 2>&1")
69
62
  end
63
+
64
+ result = request()
65
+ expect(result["events"][0]["metaData"]["rake_task"]).not_to be_nil
66
+ expect(result["events"][0]["metaData"]["rake_task"]["name"]).to eq("test:crash")
67
+ expect(result["events"][0]["app"]["type"]).to eq("rake")
68
+ expect(result["events"][0]["device"]["runtimeVersions"]["rake"]).to match(/\A\d+\.\d+\.\d+/)
70
69
  end
71
70
  end
72
- end
71
+ end
@@ -6,6 +6,7 @@ describe 'Bugsnag::Resque', :order => :defined do
6
6
  unless defined?(::Resque)
7
7
  @mocked_resque = true
8
8
  class ::Resque
9
+ VERSION = '9.9.9'
9
10
  class Worker
10
11
  end
11
12
  class Failure
@@ -44,10 +45,14 @@ describe 'Bugsnag::Resque', :order => :defined do
44
45
  expect(fork_check).to receive(:fork_per_job?).and_return(true)
45
46
  expect(::Resque).to receive(:after_fork).and_yield
46
47
  expect(Bugsnag.configuration).to receive(:app_type=).with("resque")
48
+ runtime = {}
49
+ expect(Bugsnag.configuration).to receive(:runtime_versions).and_return(runtime)
47
50
  expect(Bugsnag.configuration).to receive(:default_delivery_method=).with(:synchronous)
48
51
 
49
52
  #Kick off
50
53
  require './lib/bugsnag/integrations/resque'
54
+
55
+ expect(runtime).to eq("resque" => "9.9.9")
51
56
  end
52
57
 
53
58
  it "can configure" do
@@ -71,14 +76,16 @@ describe 'Bugsnag::Resque', :order => :defined do
71
76
  :type => Bugsnag::Report::UNHANDLED_EXCEPTION_MIDDLEWARE,
72
77
  :attributes => Bugsnag::Resque::FRAMEWORK_ATTRIBUTES
73
78
  })
79
+ expected_context = "class@queue"
74
80
  meta_data = double('meta_data')
75
81
  expect(report).to receive(:meta_data).and_return(meta_data)
76
82
  expect(meta_data).to receive(:merge!).with({
77
- :context => "class@queue",
83
+ :context => expected_context,
78
84
  :payload => {
79
85
  "class" => "class"
80
86
  }
81
87
  })
88
+ expect(report).to receive(:context=).with(expected_context)
82
89
  expect(Bugsnag).to receive(:notify).with(exception, true).and_yield(report)
83
90
  resque.save
84
91
  end
@@ -29,6 +29,8 @@ describe Bugsnag::Sidekiq do
29
29
  expect(event["metaData"]["sidekiq"]["msg"]["args"]).to eq([-0])
30
30
  expect(event["metaData"]["sidekiq"]["msg"]["queue"]).to eq("default")
31
31
  expect(event["severity"]).to eq("error")
32
+ expect(event["app"]["type"]).to eq("sidekiq")
33
+ expect(event["device"]["runtimeVersions"]["sidekiq"]).to eq('2.0.0')
32
34
  }
33
35
  end
34
36
  end
@@ -1252,7 +1252,7 @@ describe Bugsnag::Report do
1252
1252
 
1253
1253
  if defined?(JRUBY_VERSION)
1254
1254
 
1255
- it "should work with java.lang.Throwables" do
1255
+ it "works with java.lang.Throwables" do
1256
1256
  begin
1257
1257
  JRubyException.raise!
1258
1258
  rescue
@@ -1267,4 +1267,16 @@ describe Bugsnag::Report do
1267
1267
  }
1268
1268
  end
1269
1269
  end
1270
+
1271
+ it 'includes device data when notify is called' do
1272
+ Bugsnag.configuration.hostname = 'test-host'
1273
+ Bugsnag.configuration.runtime_versions["ruby"] = '9.9.9'
1274
+ Bugsnag.notify(BugsnagTestException.new("It crashed"))
1275
+
1276
+ expect(Bugsnag).to have_sent_notification{ |payload, headers|
1277
+ event = payload["events"][0]
1278
+ expect(event["device"]["hostname"]).to eq('test-host')
1279
+ expect(event["device"]["runtimeVersions"]["ruby"]).to eq('9.9.9')
1280
+ }
1281
+ end
1270
1282
  end
@@ -129,6 +129,7 @@ describe Bugsnag::SessionTracker do
129
129
  device = payload["device"]
130
130
  expect(device.include?("hostname")).to be true
131
131
  expect(device["hostname"]).to eq(Bugsnag.configuration.hostname)
132
+ expect(device["runtimeVersions"]["ruby"]).to eq(Bugsnag.configuration.runtime_versions["ruby"])
132
133
  end
133
134
 
134
135
  it 'uses middleware to attach session to notification' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bugsnag
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.11.1
4
+ version: 6.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-22 00:00:00.000000000 Z
11
+ date: 2019-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -425,6 +425,113 @@ files:
425
425
  - features/fixtures/rails5/app/test/models/.keep
426
426
  - features/fixtures/rails5/app/test/test_helper.rb
427
427
  - features/fixtures/rails5/app/tmp/.keep
428
+ - features/fixtures/rails6/.dockerignore
429
+ - features/fixtures/rails6/Dockerfile
430
+ - features/fixtures/rails6/app/.browserslistrc
431
+ - features/fixtures/rails6/app/.gitignore
432
+ - features/fixtures/rails6/app/.ruby-version
433
+ - features/fixtures/rails6/app/Gemfile
434
+ - features/fixtures/rails6/app/README.md
435
+ - features/fixtures/rails6/app/Rakefile
436
+ - features/fixtures/rails6/app/app/assets/config/manifest.js
437
+ - features/fixtures/rails6/app/app/assets/images/.keep
438
+ - features/fixtures/rails6/app/app/assets/stylesheets/application.css
439
+ - features/fixtures/rails6/app/app/channels/application_cable/channel.rb
440
+ - features/fixtures/rails6/app/app/channels/application_cable/connection.rb
441
+ - features/fixtures/rails6/app/app/controllers/api_key_controller.rb
442
+ - features/fixtures/rails6/app/app/controllers/app_type_controller.rb
443
+ - features/fixtures/rails6/app/app/controllers/app_version_controller.rb
444
+ - features/fixtures/rails6/app/app/controllers/application_controller.rb
445
+ - features/fixtures/rails6/app/app/controllers/auto_notify_controller.rb
446
+ - features/fixtures/rails6/app/app/controllers/before_notify_controller.rb
447
+ - features/fixtures/rails6/app/app/controllers/breadcrumbs_controller.rb
448
+ - features/fixtures/rails6/app/app/controllers/clearance_controller.rb
449
+ - features/fixtures/rails6/app/app/controllers/concerns/.keep
450
+ - features/fixtures/rails6/app/app/controllers/handled_controller.rb
451
+ - features/fixtures/rails6/app/app/controllers/ignore_classes_controller.rb
452
+ - features/fixtures/rails6/app/app/controllers/metadata_filters_controller.rb
453
+ - features/fixtures/rails6/app/app/controllers/project_root_controller.rb
454
+ - features/fixtures/rails6/app/app/controllers/release_stage_controller.rb
455
+ - features/fixtures/rails6/app/app/controllers/send_code_controller.rb
456
+ - features/fixtures/rails6/app/app/controllers/send_environment_controller.rb
457
+ - features/fixtures/rails6/app/app/controllers/session_tracking_controller.rb
458
+ - features/fixtures/rails6/app/app/controllers/unhandled_controller.rb
459
+ - features/fixtures/rails6/app/app/helpers/application_helper.rb
460
+ - features/fixtures/rails6/app/app/javascript/channels/consumer.js
461
+ - features/fixtures/rails6/app/app/javascript/channels/index.js
462
+ - features/fixtures/rails6/app/app/javascript/packs/application.js
463
+ - features/fixtures/rails6/app/app/jobs/application_job.rb
464
+ - features/fixtures/rails6/app/app/jobs/notify_job.rb
465
+ - features/fixtures/rails6/app/app/mailers/application_mailer.rb
466
+ - features/fixtures/rails6/app/app/models/application_record.rb
467
+ - features/fixtures/rails6/app/app/models/concerns/.keep
468
+ - features/fixtures/rails6/app/app/models/user.rb
469
+ - features/fixtures/rails6/app/app/views/layouts/application.html.erb
470
+ - features/fixtures/rails6/app/app/views/layouts/mailer.html.erb
471
+ - features/fixtures/rails6/app/app/views/layouts/mailer.text.erb
472
+ - features/fixtures/rails6/app/babel.config.js
473
+ - features/fixtures/rails6/app/config.ru
474
+ - features/fixtures/rails6/app/config/application.rb
475
+ - features/fixtures/rails6/app/config/boot.rb
476
+ - features/fixtures/rails6/app/config/cable.yml
477
+ - features/fixtures/rails6/app/config/credentials.yml.enc
478
+ - features/fixtures/rails6/app/config/database.yml
479
+ - features/fixtures/rails6/app/config/environment.rb
480
+ - features/fixtures/rails6/app/config/environments/development.rb
481
+ - features/fixtures/rails6/app/config/environments/production.rb
482
+ - features/fixtures/rails6/app/config/environments/rails_env.rb
483
+ - features/fixtures/rails6/app/config/environments/test.rb
484
+ - features/fixtures/rails6/app/config/initializers/application_controller_renderer.rb
485
+ - features/fixtures/rails6/app/config/initializers/assets.rb
486
+ - features/fixtures/rails6/app/config/initializers/backtrace_silencers.rb
487
+ - features/fixtures/rails6/app/config/initializers/bugsnag.rb
488
+ - features/fixtures/rails6/app/config/initializers/content_security_policy.rb
489
+ - features/fixtures/rails6/app/config/initializers/cookies_serializer.rb
490
+ - features/fixtures/rails6/app/config/initializers/filter_parameter_logging.rb
491
+ - features/fixtures/rails6/app/config/initializers/inflections.rb
492
+ - features/fixtures/rails6/app/config/initializers/mime_types.rb
493
+ - features/fixtures/rails6/app/config/initializers/wrap_parameters.rb
494
+ - features/fixtures/rails6/app/config/locales/en.yml
495
+ - features/fixtures/rails6/app/config/puma.rb
496
+ - features/fixtures/rails6/app/config/routes.rb
497
+ - features/fixtures/rails6/app/config/secrets.yml
498
+ - features/fixtures/rails6/app/config/spring.rb
499
+ - features/fixtures/rails6/app/config/storage.yml
500
+ - features/fixtures/rails6/app/config/webpack/development.js
501
+ - features/fixtures/rails6/app/config/webpack/environment.js
502
+ - features/fixtures/rails6/app/config/webpack/production.js
503
+ - features/fixtures/rails6/app/config/webpack/rails_env.js
504
+ - features/fixtures/rails6/app/config/webpack/test.js
505
+ - features/fixtures/rails6/app/config/webpacker.yml
506
+ - features/fixtures/rails6/app/db/migrate/20180426095545_create_users.rb
507
+ - features/fixtures/rails6/app/db/schema.rb
508
+ - features/fixtures/rails6/app/db/seeds.rb
509
+ - features/fixtures/rails6/app/lib/assets/.keep
510
+ - features/fixtures/rails6/app/lib/tasks/.keep
511
+ - features/fixtures/rails6/app/log/.keep
512
+ - features/fixtures/rails6/app/package.json
513
+ - features/fixtures/rails6/app/postcss.config.js
514
+ - features/fixtures/rails6/app/public/404.html
515
+ - features/fixtures/rails6/app/public/422.html
516
+ - features/fixtures/rails6/app/public/500.html
517
+ - features/fixtures/rails6/app/public/apple-touch-icon-precomposed.png
518
+ - features/fixtures/rails6/app/public/apple-touch-icon.png
519
+ - features/fixtures/rails6/app/public/favicon.ico
520
+ - features/fixtures/rails6/app/public/robots.txt
521
+ - features/fixtures/rails6/app/storage/.keep
522
+ - features/fixtures/rails6/app/test/application_system_test_case.rb
523
+ - features/fixtures/rails6/app/test/channels/application_cable/connection_test.rb
524
+ - features/fixtures/rails6/app/test/controllers/.keep
525
+ - features/fixtures/rails6/app/test/fixtures/.keep
526
+ - features/fixtures/rails6/app/test/fixtures/files/.keep
527
+ - features/fixtures/rails6/app/test/helpers/.keep
528
+ - features/fixtures/rails6/app/test/integration/.keep
529
+ - features/fixtures/rails6/app/test/mailers/.keep
530
+ - features/fixtures/rails6/app/test/models/.keep
531
+ - features/fixtures/rails6/app/test/system/.keep
532
+ - features/fixtures/rails6/app/test/test_helper.rb
533
+ - features/fixtures/rails6/app/tmp/.keep
534
+ - features/fixtures/rails6/app/yarn.lock
428
535
  - features/fixtures/resque/.dockerignore
429
536
  - features/fixtures/resque/Dockerfile
430
537
  - features/fixtures/resque/Gemfile
@@ -600,7 +707,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
600
707
  version: '0'
601
708
  requirements: []
602
709
  rubyforge_project:
603
- rubygems_version: 2.7.6
710
+ rubygems_version: 2.7.6.2
604
711
  signing_key:
605
712
  specification_version: 4
606
713
  summary: Ruby notifier for bugsnag.com