appsignal 4.0.6-java → 4.0.8-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/Rakefile +9 -9
  4. data/appsignal.gemspec +22 -1
  5. data/ext/agent.rb +27 -27
  6. data/lib/appsignal/check_in.rb +1 -1
  7. data/lib/appsignal/config.rb +1 -3
  8. data/lib/appsignal/integrations/resque.rb +1 -6
  9. data/lib/appsignal/utils/hash_sanitizer.rb +4 -0
  10. data/lib/appsignal/version.rb +1 -1
  11. data/lib/appsignal.rb +10 -8
  12. metadata +2 -192
  13. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -31
  14. data/.github/ISSUE_TEMPLATE/chore.md +0 -14
  15. data/.github/workflows/ci.yml +0 -3285
  16. data/.github/workflows/create_release_from_tag.yml +0 -62
  17. data/.gitignore +0 -35
  18. data/.gitmodules +0 -3
  19. data/.rspec +0 -4
  20. data/.yardopts +0 -8
  21. data/benchmark.rake +0 -139
  22. data/gemfiles/capistrano2.gemfile +0 -6
  23. data/gemfiles/capistrano3.gemfile +0 -7
  24. data/gemfiles/dry-monitor.gemfile +0 -5
  25. data/gemfiles/grape.gemfile +0 -5
  26. data/gemfiles/hanami-2.0.gemfile +0 -7
  27. data/gemfiles/hanami-2.1.gemfile +0 -7
  28. data/gemfiles/http5.gemfile +0 -5
  29. data/gemfiles/no_dependencies.gemfile +0 -10
  30. data/gemfiles/padrino.gemfile +0 -7
  31. data/gemfiles/psych-3.gemfile +0 -5
  32. data/gemfiles/psych-4.gemfile +0 -5
  33. data/gemfiles/que-1.gemfile +0 -5
  34. data/gemfiles/que-2.gemfile +0 -5
  35. data/gemfiles/rails-6.0.gemfile +0 -10
  36. data/gemfiles/rails-6.1.gemfile +0 -11
  37. data/gemfiles/rails-7.0.gemfile +0 -11
  38. data/gemfiles/rails-7.1.gemfile +0 -11
  39. data/gemfiles/rails-7.2.gemfile +0 -11
  40. data/gemfiles/redis-4.gemfile +0 -5
  41. data/gemfiles/redis-5.gemfile +0 -6
  42. data/gemfiles/resque-2.gemfile +0 -6
  43. data/gemfiles/sequel.gemfile +0 -10
  44. data/gemfiles/sinatra.gemfile +0 -5
  45. data/gemfiles/webmachine1.gemfile +0 -7
  46. data/gemfiles/webmachine2.gemfile +0 -6
  47. data/mono.yml +0 -16
  48. data/spec/.rubocop.yml +0 -7
  49. data/spec/lib/appsignal/auth_check_spec.rb +0 -84
  50. data/spec/lib/appsignal/capistrano2_spec.rb +0 -227
  51. data/spec/lib/appsignal/capistrano3_spec.rb +0 -284
  52. data/spec/lib/appsignal/check_in/cron_spec.rb +0 -210
  53. data/spec/lib/appsignal/check_in/scheduler_spec.rb +0 -557
  54. data/spec/lib/appsignal/cli/demo_spec.rb +0 -46
  55. data/spec/lib/appsignal/cli/diagnose/paths_spec.rb +0 -16
  56. data/spec/lib/appsignal/cli/diagnose/utils_spec.rb +0 -86
  57. data/spec/lib/appsignal/cli/diagnose_spec.rb +0 -1553
  58. data/spec/lib/appsignal/cli/helpers_spec.rb +0 -179
  59. data/spec/lib/appsignal/cli/install_spec.rb +0 -848
  60. data/spec/lib/appsignal/cli_spec.rb +0 -56
  61. data/spec/lib/appsignal/config_spec.rb +0 -1380
  62. data/spec/lib/appsignal/demo_spec.rb +0 -83
  63. data/spec/lib/appsignal/environment_spec.rb +0 -190
  64. data/spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb +0 -60
  65. data/spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb +0 -21
  66. data/spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb +0 -21
  67. data/spec/lib/appsignal/event_formatter/elastic_search/search_formatter_spec.rb +0 -52
  68. data/spec/lib/appsignal/event_formatter/faraday/request_formatter_spec.rb +0 -21
  69. data/spec/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter_spec.rb +0 -84
  70. data/spec/lib/appsignal/event_formatter/rom/sql_formatter_spec.rb +0 -22
  71. data/spec/lib/appsignal/event_formatter/sequel/sql_formatter_spec.rb +0 -30
  72. data/spec/lib/appsignal/event_formatter/view_component/render_formatter_spec.rb +0 -41
  73. data/spec/lib/appsignal/event_formatter_spec.rb +0 -193
  74. data/spec/lib/appsignal/extension/jruby_spec.rb +0 -46
  75. data/spec/lib/appsignal/extension_install_failure_spec.rb +0 -20
  76. data/spec/lib/appsignal/extension_spec.rb +0 -178
  77. data/spec/lib/appsignal/garbage_collection_spec.rb +0 -98
  78. data/spec/lib/appsignal/hooks/action_cable_spec.rb +0 -345
  79. data/spec/lib/appsignal/hooks/action_mailer_spec.rb +0 -55
  80. data/spec/lib/appsignal/hooks/active_support_notifications/finish_with_state_shared_examples.rb +0 -23
  81. data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +0 -99
  82. data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +0 -47
  83. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +0 -47
  84. data/spec/lib/appsignal/hooks/activejob_spec.rb +0 -650
  85. data/spec/lib/appsignal/hooks/at_exit_spec.rb +0 -105
  86. data/spec/lib/appsignal/hooks/celluloid_spec.rb +0 -40
  87. data/spec/lib/appsignal/hooks/data_mapper_spec.rb +0 -40
  88. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +0 -38
  89. data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +0 -83
  90. data/spec/lib/appsignal/hooks/excon_spec.rb +0 -67
  91. data/spec/lib/appsignal/hooks/gvl_spec.rb +0 -145
  92. data/spec/lib/appsignal/hooks/http_spec.rb +0 -37
  93. data/spec/lib/appsignal/hooks/mongo_ruby_driver_spec.rb +0 -46
  94. data/spec/lib/appsignal/hooks/mri_spec.rb +0 -23
  95. data/spec/lib/appsignal/hooks/net_http_spec.rb +0 -18
  96. data/spec/lib/appsignal/hooks/passenger_spec.rb +0 -30
  97. data/spec/lib/appsignal/hooks/puma_spec.rb +0 -80
  98. data/spec/lib/appsignal/hooks/que_spec.rb +0 -19
  99. data/spec/lib/appsignal/hooks/rake_spec.rb +0 -144
  100. data/spec/lib/appsignal/hooks/redis_client_spec.rb +0 -218
  101. data/spec/lib/appsignal/hooks/redis_spec.rb +0 -124
  102. data/spec/lib/appsignal/hooks/resque_spec.rb +0 -27
  103. data/spec/lib/appsignal/hooks/sequel_spec.rb +0 -44
  104. data/spec/lib/appsignal/hooks/shoryuken_spec.rb +0 -29
  105. data/spec/lib/appsignal/hooks/sidekiq_spec.rb +0 -115
  106. data/spec/lib/appsignal/hooks/unicorn_spec.rb +0 -63
  107. data/spec/lib/appsignal/hooks/webmachine_spec.rb +0 -24
  108. data/spec/lib/appsignal/hooks_spec.rb +0 -124
  109. data/spec/lib/appsignal/integrations/data_mapper_spec.rb +0 -74
  110. data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +0 -454
  111. data/spec/lib/appsignal/integrations/http_spec.rb +0 -111
  112. data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +0 -154
  113. data/spec/lib/appsignal/integrations/net_http_spec.rb +0 -33
  114. data/spec/lib/appsignal/integrations/object_spec.rb +0 -347
  115. data/spec/lib/appsignal/integrations/puma_spec.rb +0 -150
  116. data/spec/lib/appsignal/integrations/que_spec.rb +0 -187
  117. data/spec/lib/appsignal/integrations/railtie_spec.rb +0 -457
  118. data/spec/lib/appsignal/integrations/resque_spec.rb +0 -155
  119. data/spec/lib/appsignal/integrations/shoryuken_spec.rb +0 -165
  120. data/spec/lib/appsignal/integrations/sidekiq_spec.rb +0 -640
  121. data/spec/lib/appsignal/integrations/webmachine_spec.rb +0 -136
  122. data/spec/lib/appsignal/loaders/grape_spec.rb +0 -12
  123. data/spec/lib/appsignal/loaders/hanami_spec.rb +0 -92
  124. data/spec/lib/appsignal/loaders/padrino_spec.rb +0 -273
  125. data/spec/lib/appsignal/loaders/sinatra_spec.rb +0 -44
  126. data/spec/lib/appsignal/loaders_spec.rb +0 -144
  127. data/spec/lib/appsignal/logger_spec.rb +0 -205
  128. data/spec/lib/appsignal/marker_spec.rb +0 -51
  129. data/spec/lib/appsignal/probes/gvl_spec.rb +0 -164
  130. data/spec/lib/appsignal/probes/mri_spec.rb +0 -162
  131. data/spec/lib/appsignal/probes/sidekiq_spec.rb +0 -333
  132. data/spec/lib/appsignal/probes_spec.rb +0 -414
  133. data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +0 -370
  134. data/spec/lib/appsignal/rack/body_wrapper_spec.rb +0 -319
  135. data/spec/lib/appsignal/rack/event_handler_spec.rb +0 -441
  136. data/spec/lib/appsignal/rack/grape_middleware_spec.rb +0 -201
  137. data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +0 -36
  138. data/spec/lib/appsignal/rack/instrumentation_middleware_spec.rb +0 -38
  139. data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +0 -126
  140. data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +0 -217
  141. data/spec/lib/appsignal/rack_spec.rb +0 -243
  142. data/spec/lib/appsignal/sample_data_spec.rb +0 -238
  143. data/spec/lib/appsignal/span_spec.rb +0 -141
  144. data/spec/lib/appsignal/system_spec.rb +0 -126
  145. data/spec/lib/appsignal/transaction_spec.rb +0 -2115
  146. data/spec/lib/appsignal/transmitter_spec.rb +0 -198
  147. data/spec/lib/appsignal/utils/data_spec.rb +0 -166
  148. data/spec/lib/appsignal/utils/hash_sanitizer_spec.rb +0 -182
  149. data/spec/lib/appsignal/utils/integration_logger_spec.rb +0 -21
  150. data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +0 -153
  151. data/spec/lib/appsignal/utils/json_spec.rb +0 -44
  152. data/spec/lib/appsignal/utils/query_params_sanitizer_spec.rb +0 -192
  153. data/spec/lib/appsignal_spec.rb +0 -1919
  154. data/spec/lib/puma/appsignal_spec.rb +0 -334
  155. data/spec/spec_helper.rb +0 -179
  156. data/spec/support/fixtures/generated_config.yml +0 -24
  157. data/spec/support/fixtures/projects/broken/config/appsignal.yml +0 -1
  158. data/spec/support/fixtures/projects/valid/config/appsignal.yml +0 -57
  159. data/spec/support/fixtures/projects/valid/log/.gitkeep +0 -0
  160. data/spec/support/fixtures/projects/valid_with_rails_app/config/application.rb +0 -16
  161. data/spec/support/fixtures/projects/valid_with_rails_app/config/appsignal.yml +0 -56
  162. data/spec/support/fixtures/projects/valid_with_rails_app/config/environment.rb +0 -10
  163. data/spec/support/fixtures/projects/valid_with_rails_app/log/.gitkeep +0 -0
  164. data/spec/support/fixtures/uploaded_file.txt +0 -0
  165. data/spec/support/hanami/hanami_app.rb +0 -29
  166. data/spec/support/helpers/action_mailer_helpers.rb +0 -25
  167. data/spec/support/helpers/activejob_helpers.rb +0 -27
  168. data/spec/support/helpers/api_request_helper.rb +0 -60
  169. data/spec/support/helpers/cli_helpers.rb +0 -40
  170. data/spec/support/helpers/config_helpers.rb +0 -66
  171. data/spec/support/helpers/dependency_helper.rb +0 -155
  172. data/spec/support/helpers/directory_helper.rb +0 -27
  173. data/spec/support/helpers/env_helpers.rb +0 -41
  174. data/spec/support/helpers/environment_metdata_helper.rb +0 -16
  175. data/spec/support/helpers/example_exception.rb +0 -13
  176. data/spec/support/helpers/example_standard_error.rb +0 -13
  177. data/spec/support/helpers/loader_helper.rb +0 -21
  178. data/spec/support/helpers/log_helpers.rb +0 -36
  179. data/spec/support/helpers/rails_helper.rb +0 -28
  180. data/spec/support/helpers/std_streams_helper.rb +0 -94
  181. data/spec/support/helpers/system_helpers.rb +0 -8
  182. data/spec/support/helpers/take_at_most_helper.rb +0 -21
  183. data/spec/support/helpers/time_helpers.rb +0 -11
  184. data/spec/support/helpers/transaction_helpers.rb +0 -122
  185. data/spec/support/helpers/wait_for_helper.rb +0 -39
  186. data/spec/support/matchers/contains_log.rb +0 -26
  187. data/spec/support/matchers/have_colorized_text.rb +0 -28
  188. data/spec/support/matchers/transaction.rb +0 -200
  189. data/spec/support/mocks/appsignal_mock.rb +0 -18
  190. data/spec/support/mocks/dummy_app.rb +0 -20
  191. data/spec/support/mocks/fake_gc_profiler.rb +0 -19
  192. data/spec/support/mocks/fake_gvl_tools.rb +0 -28
  193. data/spec/support/mocks/hash_like.rb +0 -10
  194. data/spec/support/mocks/mock_probe.rb +0 -13
  195. data/spec/support/mocks/puma_mock.rb +0 -43
  196. data/spec/support/shared_examples/instrument.rb +0 -48
  197. data/spec/support/stubs/appsignal/loaders/loader_stub.rb +0 -7
  198. data/spec/support/stubs/delayed_job.rb +0 -0
  199. data/spec/support/stubs/sidekiq/api.rb +0 -4
  200. data/spec/support/testing.rb +0 -203
  201. data/support/bundler_wrapper +0 -12
  202. data/support/install_deps +0 -33
@@ -1,454 +0,0 @@
1
- describe "Appsignal::Integrations::DelayedJobHook" do
2
- before(:context) do
3
- module Delayed
4
- class Plugin
5
- def self.callbacks
6
- end
7
- end
8
-
9
- class Worker
10
- def self.plugins
11
- @plugins ||= []
12
- end
13
- end
14
- end
15
- require "appsignal/integrations/delayed_job_plugin"
16
- end
17
- after(:context) { Object.send(:remove_const, :Delayed) }
18
- let(:options) { {} }
19
- before { start_agent(:options => options) }
20
-
21
- # We haven't found a way to test the hooks, we'll have to do that manually
22
-
23
- describe ".invoke_with_instrumentation" do
24
- let(:plugin) { Appsignal::Integrations::DelayedJobPlugin }
25
- let(:time) { Time.parse("01-01-2001 10:01:00UTC") }
26
- let(:created_at) { time - 3600 }
27
- let(:run_at) { time - 3600 }
28
- let(:payload_object) { double(:args => args) }
29
- let(:job_data) do
30
- {
31
- :id => 123,
32
- :name => "TestClass#perform",
33
- :priority => 1,
34
- :attempts => 1,
35
- :queue => "default",
36
- :created_at => created_at,
37
- :run_at => run_at,
38
- :payload_object => payload_object
39
- }
40
- end
41
- let(:args) { ["argument"] }
42
- let(:job) { double(job_data) }
43
- let(:invoked_block) { proc {} }
44
-
45
- def perform
46
- Timecop.freeze(time) do
47
- keep_transactions do
48
- plugin.invoke_with_instrumentation(job, invoked_block)
49
- end
50
- end
51
- end
52
-
53
- context "with a normal call" do
54
- it "wraps it in a transaction" do
55
- perform
56
-
57
- transaction = last_transaction
58
- expect(transaction).to have_namespace("background_job")
59
- expect(transaction).to have_action("TestClass#perform")
60
- expect(transaction).to_not have_error
61
- expect(transaction).to include_event(:name => "perform_job.delayed_job")
62
- expect(transaction).to include_tags(
63
- "priority" => 1,
64
- "attempts" => 1,
65
- "queue" => "default",
66
- "id" => "123"
67
- )
68
- expect(transaction).to include_params(["argument"])
69
- end
70
-
71
- context "with more complex params" do
72
- let(:args) do
73
- {
74
- :foo => "Foo",
75
- :bar => "Bar"
76
- }
77
- end
78
-
79
- it "adds the more complex arguments" do
80
- perform
81
-
82
- expect(last_transaction).to include_params("foo" => "Foo", "bar" => "Bar")
83
- end
84
-
85
- context "with parameter filtering" do
86
- let(:options) { { :filter_parameters => ["foo"] } }
87
-
88
- it "filters selected arguments" do
89
- perform
90
-
91
- expect(last_transaction).to include_params("foo" => "[FILTERED]", "bar" => "Bar")
92
- end
93
- end
94
- end
95
-
96
- context "with run_at in the future" do
97
- let(:run_at) { Time.parse("2017-01-01 10:01:00UTC") }
98
-
99
- it "reports queue_start with run_at time" do
100
- perform
101
-
102
- expect(last_transaction).to have_queue_start(run_at.to_i * 1000)
103
- end
104
- end
105
-
106
- context "with class method job" do
107
- let(:job_data) do
108
- { :name => "CustomClassMethod.perform", :payload_object => payload_object }
109
- end
110
-
111
- it "wraps it in a transaction using the class method job name" do
112
- perform
113
- expect(last_transaction).to have_action("CustomClassMethod.perform")
114
- end
115
- end
116
-
117
- context "with custom name call" do
118
- before { perform }
119
-
120
- context "with appsignal_name defined" do
121
- context "with payload_object being an object" do
122
- context "with value" do
123
- let(:payload_object) { double(:appsignal_name => "CustomClass#perform") }
124
-
125
- it "wraps it in a transaction using the custom name" do
126
- expect(last_transaction).to have_action("CustomClass#perform")
127
- end
128
- end
129
-
130
- context "with non-String value" do
131
- let(:payload_object) { double(:appsignal_name => Object.new) }
132
-
133
- it "wraps it in a transaction using the original job name" do
134
- expect(last_transaction).to have_action("TestClass#perform")
135
- end
136
- end
137
-
138
- context "with class method name as job" do
139
- let(:payload_object) { double(:appsignal_name => "CustomClassMethod.perform") }
140
-
141
- it "wraps it in a transaction using the custom name" do
142
- perform
143
- expect(last_transaction).to have_action("CustomClassMethod.perform")
144
- end
145
- end
146
- end
147
-
148
- context "with payload_object being a Hash" do
149
- context "with value" do
150
- let(:payload_object) { double(:appsignal_name => "CustomClassHash#perform") }
151
-
152
- it "wraps it in a transaction using the custom name" do
153
- expect(last_transaction).to have_action("CustomClassHash#perform")
154
- end
155
- end
156
-
157
- context "with non-String value" do
158
- let(:payload_object) { double(:appsignal_name => Object.new) }
159
-
160
- it "wraps it in a transaction using the original job name" do
161
- expect(last_transaction).to have_action("TestClass#perform")
162
- end
163
- end
164
-
165
- context "with class method name as job" do
166
- let(:payload_object) { { :appsignal_name => "CustomClassMethod.perform" } }
167
-
168
- it "wraps it in a transaction using the custom name" do
169
- perform
170
- expect(last_transaction).to have_action("CustomClassMethod.perform")
171
- end
172
- end
173
- end
174
-
175
- context "with payload_object acting like a Hash and returning a non-String value" do
176
- class ClassActingAsHash
177
- def self.[](_key)
178
- Object.new
179
- end
180
-
181
- def self.appsignal_name
182
- "ClassActingAsHash#perform"
183
- end
184
- end
185
- let(:payload_object) { ClassActingAsHash }
186
-
187
- # We check for hash values before object values
188
- # this means ClassActingAsHash returns `Object.new` instead
189
- # of `self.appsignal_name`. Since this isn't a valid `String`
190
- # we return the default job name as action name.
191
- it "wraps it in a transaction using the original job name" do
192
- expect(last_transaction).to have_action("TestClass#perform")
193
- end
194
- end
195
- end
196
- end
197
-
198
- context "with only job class name" do
199
- let(:job_data) do
200
- { :name => "Banana", :payload_object => payload_object }
201
- end
202
-
203
- it "appends #perform to the class name" do
204
- perform
205
- expect(last_transaction).to have_action("Banana#perform")
206
- end
207
- end
208
-
209
- if active_job_present?
210
- require "active_job"
211
-
212
- context "when wrapped by ActiveJob" do
213
- let(:payload_object) do
214
- ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper.new(
215
- "arguments" => args,
216
- "job_class" => "TestClass",
217
- "job_id" => 123,
218
- "locale" => :en,
219
- "queue_name" => "default"
220
- )
221
- end
222
- let(:job) do
223
- double(
224
- :id => 123,
225
- :name => "ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper",
226
- :priority => 1,
227
- :attempts => 1,
228
- :queue => "default",
229
- :created_at => created_at,
230
- :run_at => run_at,
231
- :payload_object => payload_object
232
- )
233
- end
234
- let(:args) { ["activejob_argument"] }
235
-
236
- it "wraps it in a transaction with the correct params" do
237
- perform
238
-
239
- transaction = last_transaction
240
- expect(transaction).to have_namespace("background_job")
241
- expect(transaction).to have_action("TestClass#perform")
242
- expect(transaction).to_not have_error
243
- expect(transaction).to include_event("name" => "perform_job.delayed_job")
244
- expect(transaction).to include_tags(
245
- "priority" => 1,
246
- "attempts" => 1,
247
- "queue" => "default",
248
- "id" => "123"
249
- )
250
- expect(transaction).to include_params(["activejob_argument"])
251
- end
252
-
253
- context "with more complex params" do
254
- let(:args) do
255
- {
256
- :foo => "Foo",
257
- :bar => "Bar"
258
- }
259
- end
260
-
261
- it "adds the more complex arguments" do
262
- perform
263
- transaction = last_transaction
264
- expect(transaction).to have_action("TestClass#perform")
265
- expect(transaction).to include_params(
266
- "foo" => "Foo",
267
- "bar" => "Bar"
268
- )
269
- end
270
-
271
- context "with parameter filtering" do
272
- let(:options) { { :filter_parameters => ["foo"] } }
273
-
274
- it "filters selected arguments" do
275
- perform
276
- transaction = last_transaction
277
- expect(transaction).to have_action("TestClass#perform")
278
- expect(transaction).to include_params(
279
- "foo" => "[FILTERED]",
280
- "bar" => "Bar"
281
- )
282
- end
283
- end
284
- end
285
-
286
- context "with run_at in the future" do
287
- let(:run_at) { Time.parse("2017-01-01 10:01:00UTC") }
288
-
289
- it "reports queue_start with run_at time" do
290
- perform
291
-
292
- expect(last_transaction).to have_queue_start(run_at.to_i * 1000)
293
- end
294
- end
295
- end
296
- end
297
- end
298
-
299
- context "with an erroring call" do
300
- let(:error) { ExampleException.new("uh oh") }
301
- before do
302
- expect(invoked_block).to receive(:call).and_raise(error)
303
- end
304
-
305
- it "adds the error to the transaction" do
306
- expect do
307
- perform
308
- end.to raise_error(error)
309
-
310
- transaction = last_transaction
311
- expect(transaction).to have_namespace("background_job")
312
- expect(transaction).to have_action("TestClass#perform")
313
- expect(transaction).to have_error("ExampleException", "uh oh")
314
- end
315
- end
316
- end
317
-
318
- describe ".extract_value" do
319
- let(:plugin) { Appsignal::Integrations::DelayedJobPlugin }
320
-
321
- context "for a hash" do
322
- let(:hash) { { :key => "value", :bool_false => false } }
323
-
324
- context "when the key exists" do
325
- subject { plugin.extract_value(hash, :key) }
326
-
327
- it { is_expected.to eq "value" }
328
-
329
- context "when the value is false" do
330
- subject { plugin.extract_value(hash, :bool_false) }
331
-
332
- it { is_expected.to be false }
333
- end
334
- end
335
-
336
- context "when the key does not exist" do
337
- subject { plugin.extract_value(hash, :nonexistent_key) }
338
-
339
- it { is_expected.to be_nil }
340
-
341
- context "with a default value" do
342
- subject { plugin.extract_value(hash, :nonexistent_key, 1) }
343
-
344
- it { is_expected.to eq 1 }
345
- end
346
- end
347
- end
348
-
349
- context "for a struct" do
350
- before :context do
351
- TestStruct = Struct.new(:key)
352
- end
353
- let(:struct) { TestStruct.new("value") }
354
-
355
- context "when the key exists" do
356
- subject { plugin.extract_value(struct, :key) }
357
-
358
- it { is_expected.to eq "value" }
359
- end
360
-
361
- context "when the key does not exist" do
362
- subject { plugin.extract_value(struct, :nonexistent_key) }
363
-
364
- it { is_expected.to be_nil }
365
-
366
- context "with a default value" do
367
- subject { plugin.extract_value(struct, :nonexistent_key, 1) }
368
-
369
- it { is_expected.to eq 1 }
370
- end
371
- end
372
- end
373
-
374
- context "for a struct with a method" do
375
- before :context do
376
- class TestStructClass < Struct.new(:id) # rubocop:disable Style/StructInheritance
377
- def appsignal_name
378
- "TestStruct#perform"
379
- end
380
-
381
- def bool_false
382
- false
383
- end
384
- end
385
- end
386
- let(:struct) { TestStructClass.new("id") }
387
-
388
- context "when the Struct responds to a method" do
389
- subject { plugin.extract_value(struct, :appsignal_name) }
390
-
391
- it "returns the method value" do
392
- is_expected.to eq "TestStruct#perform"
393
- end
394
-
395
- context "when the value is false" do
396
- subject { plugin.extract_value(struct, :bool_false) }
397
-
398
- it "returns the method value" do
399
- is_expected.to be false
400
- end
401
- end
402
- end
403
-
404
- context "when the key does not exist" do
405
- subject { plugin.extract_value(struct, :nonexistent_key) }
406
-
407
- context "without a method with the same name" do
408
- it "returns nil" do
409
- is_expected.to be_nil
410
- end
411
- end
412
-
413
- context "with a default value" do
414
- let(:default_value) { :my_default_value }
415
- subject { plugin.extract_value(struct, :nonexistent_key, default_value) }
416
-
417
- it "returns the default value" do
418
- is_expected.to eq default_value
419
- end
420
- end
421
- end
422
- end
423
-
424
- context "for an object" do
425
- let(:object) { double(:existing_method => "value") }
426
-
427
- context "when the method exists" do
428
- subject { plugin.extract_value(object, :existing_method) }
429
-
430
- it { is_expected.to eq "value" }
431
- end
432
-
433
- context "when the method does not exist" do
434
- subject { plugin.extract_value(object, :nonexistent_method) }
435
-
436
- it { is_expected.to be_nil }
437
-
438
- context "and there is a default value" do
439
- subject { plugin.extract_value(object, :nonexistent_method, 1) }
440
-
441
- it { is_expected.to eq 1 }
442
- end
443
- end
444
- end
445
-
446
- context "when we need to call to_s on the value" do
447
- let(:object) { double(:existing_method => 1) }
448
-
449
- subject { plugin.extract_value(object, :existing_method, nil, true) }
450
-
451
- it { is_expected.to eq "1" }
452
- end
453
- end
454
- end
@@ -1,111 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- if DependencyHelper.http_present?
4
- require "appsignal/integrations/http"
5
-
6
- describe Appsignal::Integrations::HttpIntegration do
7
- let(:transaction) { http_request_transaction }
8
-
9
- around do |example|
10
- keep_transactions { example.run }
11
- end
12
- before do
13
- start_agent
14
- set_current_transaction(transaction)
15
- end
16
-
17
- it "instruments a HTTP request" do
18
- stub_request(:get, "http://www.google.com")
19
-
20
- HTTP.get("http://www.google.com")
21
-
22
- expect(transaction).to have_namespace(Appsignal::Transaction::HTTP_REQUEST)
23
- expect(transaction).to include_event(
24
- "body" => "",
25
- "body_format" => Appsignal::EventFormatter::DEFAULT,
26
- "name" => "request.http_rb",
27
- "title" => "GET http://www.google.com"
28
- )
29
- end
30
-
31
- it "instruments a HTTPS request" do
32
- stub_request(:get, "https://www.google.com")
33
-
34
- HTTP.get("https://www.google.com")
35
-
36
- expect(transaction).to have_namespace(Appsignal::Transaction::HTTP_REQUEST)
37
- expect(transaction).to include_event(
38
- "body" => "",
39
- "body_format" => Appsignal::EventFormatter::DEFAULT,
40
- "name" => "request.http_rb",
41
- "title" => "GET https://www.google.com"
42
- )
43
- end
44
-
45
- context "with request parameters" do
46
- it "does not include the query parameters in the title" do
47
- stub_request(:get, "https://www.google.com?q=Appsignal")
48
-
49
- HTTP.get("https://www.google.com", :params => { :q => "Appsignal" })
50
-
51
- expect(transaction).to include_event(
52
- "body" => "",
53
- "title" => "GET https://www.google.com"
54
- )
55
- end
56
-
57
- it "does not include the request body in the title" do
58
- stub_request(:post, "https://www.google.com")
59
- .with(:body => { :q => "Appsignal" }.to_json)
60
-
61
- HTTP.post("https://www.google.com", :json => { :q => "Appsignal" })
62
-
63
- expect(transaction).to include_event(
64
- "body" => "",
65
- "title" => "POST https://www.google.com"
66
- )
67
- end
68
- end
69
-
70
- context "with various URI objects" do
71
- it "parses an object responding to #to_s" do
72
- request_uri = Struct.new(:uri) do
73
- def to_s
74
- uri.to_s
75
- end
76
- end
77
-
78
- stub_request(:get, "http://www.google.com")
79
-
80
- HTTP.get(request_uri.new("http://www.google.com"))
81
-
82
- expect(transaction).to include_event(
83
- "name" => "request.http_rb",
84
- "title" => "GET http://www.google.com"
85
- )
86
- end
87
-
88
- it "parses an URI object" do
89
- stub_request(:get, "http://www.google.com")
90
-
91
- HTTP.get(URI("http://www.google.com"))
92
-
93
- expect(transaction).to include_event(
94
- "name" => "request.http_rb",
95
- "title" => "GET http://www.google.com"
96
- )
97
- end
98
-
99
- it "parses a String object" do
100
- stub_request(:get, "http://www.google.com")
101
-
102
- HTTP.get("http://www.google.com")
103
-
104
- expect(transaction).to include_event(
105
- "name" => "request.http_rb",
106
- "title" => "GET http://www.google.com"
107
- )
108
- end
109
- end
110
- end
111
- end