appsignal 4.0.5 → 4.0.7

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 (203) 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/build_matrix.yml +2 -1
  6. data/ext/agent.rb +27 -27
  7. data/lib/appsignal/check_in/scheduler.rb +3 -4
  8. data/lib/appsignal/check_in.rb +1 -1
  9. data/lib/appsignal/config.rb +1 -3
  10. data/lib/appsignal/integrations/que.rb +8 -2
  11. data/lib/appsignal/integrations/resque.rb +1 -6
  12. data/lib/appsignal/utils/hash_sanitizer.rb +4 -0
  13. data/lib/appsignal/version.rb +1 -1
  14. metadata +2 -191
  15. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -31
  16. data/.github/ISSUE_TEMPLATE/chore.md +0 -14
  17. data/.github/workflows/ci.yml +0 -3150
  18. data/.github/workflows/create_release_from_tag.yml +0 -62
  19. data/.gitignore +0 -35
  20. data/.gitmodules +0 -3
  21. data/.rspec +0 -4
  22. data/.yardopts +0 -8
  23. data/benchmark.rake +0 -139
  24. data/gemfiles/capistrano2.gemfile +0 -6
  25. data/gemfiles/capistrano3.gemfile +0 -7
  26. data/gemfiles/dry-monitor.gemfile +0 -5
  27. data/gemfiles/grape.gemfile +0 -5
  28. data/gemfiles/hanami-2.0.gemfile +0 -7
  29. data/gemfiles/hanami-2.1.gemfile +0 -7
  30. data/gemfiles/http5.gemfile +0 -5
  31. data/gemfiles/no_dependencies.gemfile +0 -10
  32. data/gemfiles/padrino.gemfile +0 -7
  33. data/gemfiles/psych-3.gemfile +0 -5
  34. data/gemfiles/psych-4.gemfile +0 -5
  35. data/gemfiles/que.gemfile +0 -5
  36. data/gemfiles/rails-6.0.gemfile +0 -10
  37. data/gemfiles/rails-6.1.gemfile +0 -11
  38. data/gemfiles/rails-7.0.gemfile +0 -11
  39. data/gemfiles/rails-7.1.gemfile +0 -11
  40. data/gemfiles/rails-7.2.gemfile +0 -11
  41. data/gemfiles/redis-4.gemfile +0 -5
  42. data/gemfiles/redis-5.gemfile +0 -6
  43. data/gemfiles/resque-2.gemfile +0 -6
  44. data/gemfiles/sequel.gemfile +0 -10
  45. data/gemfiles/sinatra.gemfile +0 -5
  46. data/gemfiles/webmachine1.gemfile +0 -7
  47. data/gemfiles/webmachine2.gemfile +0 -6
  48. data/mono.yml +0 -16
  49. data/spec/.rubocop.yml +0 -7
  50. data/spec/lib/appsignal/auth_check_spec.rb +0 -84
  51. data/spec/lib/appsignal/capistrano2_spec.rb +0 -227
  52. data/spec/lib/appsignal/capistrano3_spec.rb +0 -284
  53. data/spec/lib/appsignal/check_in/cron_spec.rb +0 -202
  54. data/spec/lib/appsignal/check_in/scheduler_spec.rb +0 -443
  55. data/spec/lib/appsignal/cli/demo_spec.rb +0 -46
  56. data/spec/lib/appsignal/cli/diagnose/paths_spec.rb +0 -16
  57. data/spec/lib/appsignal/cli/diagnose/utils_spec.rb +0 -86
  58. data/spec/lib/appsignal/cli/diagnose_spec.rb +0 -1553
  59. data/spec/lib/appsignal/cli/helpers_spec.rb +0 -179
  60. data/spec/lib/appsignal/cli/install_spec.rb +0 -848
  61. data/spec/lib/appsignal/cli_spec.rb +0 -56
  62. data/spec/lib/appsignal/config_spec.rb +0 -1380
  63. data/spec/lib/appsignal/demo_spec.rb +0 -83
  64. data/spec/lib/appsignal/environment_spec.rb +0 -190
  65. data/spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb +0 -60
  66. data/spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb +0 -21
  67. data/spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb +0 -21
  68. data/spec/lib/appsignal/event_formatter/elastic_search/search_formatter_spec.rb +0 -52
  69. data/spec/lib/appsignal/event_formatter/faraday/request_formatter_spec.rb +0 -21
  70. data/spec/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter_spec.rb +0 -84
  71. data/spec/lib/appsignal/event_formatter/rom/sql_formatter_spec.rb +0 -22
  72. data/spec/lib/appsignal/event_formatter/sequel/sql_formatter_spec.rb +0 -30
  73. data/spec/lib/appsignal/event_formatter/view_component/render_formatter_spec.rb +0 -41
  74. data/spec/lib/appsignal/event_formatter_spec.rb +0 -193
  75. data/spec/lib/appsignal/extension/jruby_spec.rb +0 -46
  76. data/spec/lib/appsignal/extension_install_failure_spec.rb +0 -20
  77. data/spec/lib/appsignal/extension_spec.rb +0 -178
  78. data/spec/lib/appsignal/garbage_collection_spec.rb +0 -98
  79. data/spec/lib/appsignal/hooks/action_cable_spec.rb +0 -345
  80. data/spec/lib/appsignal/hooks/action_mailer_spec.rb +0 -55
  81. data/spec/lib/appsignal/hooks/active_support_notifications/finish_with_state_shared_examples.rb +0 -23
  82. data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +0 -99
  83. data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +0 -47
  84. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +0 -47
  85. data/spec/lib/appsignal/hooks/activejob_spec.rb +0 -650
  86. data/spec/lib/appsignal/hooks/at_exit_spec.rb +0 -105
  87. data/spec/lib/appsignal/hooks/celluloid_spec.rb +0 -40
  88. data/spec/lib/appsignal/hooks/data_mapper_spec.rb +0 -40
  89. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +0 -38
  90. data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +0 -83
  91. data/spec/lib/appsignal/hooks/excon_spec.rb +0 -67
  92. data/spec/lib/appsignal/hooks/gvl_spec.rb +0 -145
  93. data/spec/lib/appsignal/hooks/http_spec.rb +0 -37
  94. data/spec/lib/appsignal/hooks/mongo_ruby_driver_spec.rb +0 -46
  95. data/spec/lib/appsignal/hooks/mri_spec.rb +0 -23
  96. data/spec/lib/appsignal/hooks/net_http_spec.rb +0 -18
  97. data/spec/lib/appsignal/hooks/passenger_spec.rb +0 -30
  98. data/spec/lib/appsignal/hooks/puma_spec.rb +0 -80
  99. data/spec/lib/appsignal/hooks/que_spec.rb +0 -19
  100. data/spec/lib/appsignal/hooks/rake_spec.rb +0 -144
  101. data/spec/lib/appsignal/hooks/redis_client_spec.rb +0 -218
  102. data/spec/lib/appsignal/hooks/redis_spec.rb +0 -124
  103. data/spec/lib/appsignal/hooks/resque_spec.rb +0 -27
  104. data/spec/lib/appsignal/hooks/sequel_spec.rb +0 -44
  105. data/spec/lib/appsignal/hooks/shoryuken_spec.rb +0 -29
  106. data/spec/lib/appsignal/hooks/sidekiq_spec.rb +0 -115
  107. data/spec/lib/appsignal/hooks/unicorn_spec.rb +0 -63
  108. data/spec/lib/appsignal/hooks/webmachine_spec.rb +0 -24
  109. data/spec/lib/appsignal/hooks_spec.rb +0 -124
  110. data/spec/lib/appsignal/integrations/data_mapper_spec.rb +0 -74
  111. data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +0 -454
  112. data/spec/lib/appsignal/integrations/http_spec.rb +0 -111
  113. data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +0 -154
  114. data/spec/lib/appsignal/integrations/net_http_spec.rb +0 -33
  115. data/spec/lib/appsignal/integrations/object_spec.rb +0 -347
  116. data/spec/lib/appsignal/integrations/puma_spec.rb +0 -150
  117. data/spec/lib/appsignal/integrations/que_spec.rb +0 -152
  118. data/spec/lib/appsignal/integrations/railtie_spec.rb +0 -457
  119. data/spec/lib/appsignal/integrations/resque_spec.rb +0 -155
  120. data/spec/lib/appsignal/integrations/shoryuken_spec.rb +0 -165
  121. data/spec/lib/appsignal/integrations/sidekiq_spec.rb +0 -640
  122. data/spec/lib/appsignal/integrations/webmachine_spec.rb +0 -136
  123. data/spec/lib/appsignal/loaders/grape_spec.rb +0 -12
  124. data/spec/lib/appsignal/loaders/hanami_spec.rb +0 -92
  125. data/spec/lib/appsignal/loaders/padrino_spec.rb +0 -273
  126. data/spec/lib/appsignal/loaders/sinatra_spec.rb +0 -44
  127. data/spec/lib/appsignal/loaders_spec.rb +0 -144
  128. data/spec/lib/appsignal/logger_spec.rb +0 -205
  129. data/spec/lib/appsignal/marker_spec.rb +0 -51
  130. data/spec/lib/appsignal/probes/gvl_spec.rb +0 -164
  131. data/spec/lib/appsignal/probes/mri_spec.rb +0 -162
  132. data/spec/lib/appsignal/probes/sidekiq_spec.rb +0 -333
  133. data/spec/lib/appsignal/probes_spec.rb +0 -411
  134. data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +0 -370
  135. data/spec/lib/appsignal/rack/body_wrapper_spec.rb +0 -319
  136. data/spec/lib/appsignal/rack/event_handler_spec.rb +0 -441
  137. data/spec/lib/appsignal/rack/grape_middleware_spec.rb +0 -201
  138. data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +0 -36
  139. data/spec/lib/appsignal/rack/instrumentation_middleware_spec.rb +0 -38
  140. data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +0 -126
  141. data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +0 -217
  142. data/spec/lib/appsignal/rack_spec.rb +0 -243
  143. data/spec/lib/appsignal/sample_data_spec.rb +0 -238
  144. data/spec/lib/appsignal/span_spec.rb +0 -141
  145. data/spec/lib/appsignal/system_spec.rb +0 -126
  146. data/spec/lib/appsignal/transaction_spec.rb +0 -2111
  147. data/spec/lib/appsignal/transmitter_spec.rb +0 -198
  148. data/spec/lib/appsignal/utils/data_spec.rb +0 -166
  149. data/spec/lib/appsignal/utils/hash_sanitizer_spec.rb +0 -182
  150. data/spec/lib/appsignal/utils/integration_logger_spec.rb +0 -21
  151. data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +0 -153
  152. data/spec/lib/appsignal/utils/json_spec.rb +0 -44
  153. data/spec/lib/appsignal/utils/query_params_sanitizer_spec.rb +0 -192
  154. data/spec/lib/appsignal_spec.rb +0 -1919
  155. data/spec/lib/puma/appsignal_spec.rb +0 -334
  156. data/spec/spec_helper.rb +0 -173
  157. data/spec/support/fixtures/generated_config.yml +0 -24
  158. data/spec/support/fixtures/projects/broken/config/appsignal.yml +0 -1
  159. data/spec/support/fixtures/projects/valid/config/appsignal.yml +0 -57
  160. data/spec/support/fixtures/projects/valid/log/.gitkeep +0 -0
  161. data/spec/support/fixtures/projects/valid_with_rails_app/config/application.rb +0 -16
  162. data/spec/support/fixtures/projects/valid_with_rails_app/config/appsignal.yml +0 -56
  163. data/spec/support/fixtures/projects/valid_with_rails_app/config/environment.rb +0 -10
  164. data/spec/support/fixtures/projects/valid_with_rails_app/log/.gitkeep +0 -0
  165. data/spec/support/fixtures/uploaded_file.txt +0 -0
  166. data/spec/support/hanami/hanami_app.rb +0 -29
  167. data/spec/support/helpers/action_mailer_helpers.rb +0 -25
  168. data/spec/support/helpers/activejob_helpers.rb +0 -27
  169. data/spec/support/helpers/api_request_helper.rb +0 -20
  170. data/spec/support/helpers/cli_helpers.rb +0 -40
  171. data/spec/support/helpers/config_helpers.rb +0 -66
  172. data/spec/support/helpers/dependency_helper.rb +0 -150
  173. data/spec/support/helpers/directory_helper.rb +0 -27
  174. data/spec/support/helpers/env_helpers.rb +0 -41
  175. data/spec/support/helpers/environment_metdata_helper.rb +0 -16
  176. data/spec/support/helpers/example_exception.rb +0 -13
  177. data/spec/support/helpers/example_standard_error.rb +0 -13
  178. data/spec/support/helpers/loader_helper.rb +0 -21
  179. data/spec/support/helpers/log_helpers.rb +0 -36
  180. data/spec/support/helpers/rails_helper.rb +0 -28
  181. data/spec/support/helpers/std_streams_helper.rb +0 -94
  182. data/spec/support/helpers/system_helpers.rb +0 -8
  183. data/spec/support/helpers/take_at_most_helper.rb +0 -21
  184. data/spec/support/helpers/time_helpers.rb +0 -11
  185. data/spec/support/helpers/transaction_helpers.rb +0 -122
  186. data/spec/support/helpers/wait_for_helper.rb +0 -39
  187. data/spec/support/matchers/contains_log.rb +0 -26
  188. data/spec/support/matchers/have_colorized_text.rb +0 -28
  189. data/spec/support/matchers/transaction.rb +0 -200
  190. data/spec/support/mocks/appsignal_mock.rb +0 -18
  191. data/spec/support/mocks/dummy_app.rb +0 -20
  192. data/spec/support/mocks/fake_gc_profiler.rb +0 -19
  193. data/spec/support/mocks/fake_gvl_tools.rb +0 -28
  194. data/spec/support/mocks/hash_like.rb +0 -10
  195. data/spec/support/mocks/mock_probe.rb +0 -13
  196. data/spec/support/mocks/puma_mock.rb +0 -43
  197. data/spec/support/shared_examples/instrument.rb +0 -48
  198. data/spec/support/stubs/appsignal/loaders/loader_stub.rb +0 -7
  199. data/spec/support/stubs/delayed_job.rb +0 -0
  200. data/spec/support/stubs/sidekiq/api.rb +0 -4
  201. data/spec/support/testing.rb +0 -194
  202. data/support/bundler_wrapper +0 -12
  203. data/support/install_deps +0 -33
@@ -1,238 +0,0 @@
1
- describe Appsignal::SampleData do
2
- let(:data) { described_class.new(:data_key) }
3
-
4
- describe "#add" do
5
- it "sets the given value" do
6
- logs =
7
- capture_logs do
8
- data.add(:key1 => "value 1")
9
- end
10
-
11
- expect(data.value).to eq(:key1 => "value 1")
12
-
13
- expect(logs).to_not contains_log(
14
- :error,
15
- "Sample data 'data_key': Unsupported data type 'NilClass' received: nil"
16
- )
17
- end
18
-
19
- it "adds the given value with the block being leading" do
20
- data.add(:key1 => "value 1") { { :key2 => "value 2" } }
21
-
22
- expect(data.value).to eq(:key2 => "value 2")
23
- end
24
-
25
- it "doesn't add nil to the data" do
26
- logs =
27
- capture_logs do
28
- data.add([1])
29
- data.add(nil)
30
- data.add { nil }
31
- data.add([2, 3])
32
- end
33
-
34
- expect(data.value).to eq([1, 2, 3])
35
- expect(logs).to contains_log(
36
- :error,
37
- "Sample data 'data_key': Unsupported data type 'NilClass' received: nil"
38
- )
39
- expect(logs).to_not contains_log(:warn, "The sample data 'data_key' changed type")
40
- end
41
-
42
- it "merges multiple values" do
43
- data.add(:key1 => "value 1")
44
- data.add(:key2 => "value 2")
45
-
46
- expect(data.value).to eq(:key1 => "value 1", :key2 => "value 2")
47
- end
48
-
49
- it "merges only root level Hash keys" do
50
- data.add(:key => { :abc => "value" })
51
- data.add(:key => { :def => "value" })
52
-
53
- expect(data.value).to eq(:key => { :def => "value" })
54
- end
55
-
56
- it "merges values from arguments and blocks" do
57
- data.add(:key1 => "value 1")
58
- data.add { { :key2 => "value 2" } }
59
- data.add(:key3 => "value 3")
60
-
61
- expect(data.value).to eq(:key1 => "value 1", :key2 => "value 2", :key3 => "value 3")
62
- end
63
-
64
- it "merges array values" do
65
- data.add([:first_arg])
66
- data.add { [:from_block] }
67
- data.add([:second_arg])
68
-
69
- expect(data.value).to eq([:first_arg, :from_block, :second_arg])
70
- end
71
-
72
- it "overwrites the value if the new value is of a different type" do
73
- data.add(:key1 => "value 1")
74
- expect(data.value).to eq(:key1 => "value 1")
75
-
76
- data.add(["abc"])
77
- expect(data.value).to eq(["abc"])
78
-
79
- logs = capture_logs { data.value }
80
- expect(logs).to contains_log(
81
- :warn,
82
- "The sample data 'data_key' changed type from 'Hash' to 'Array'."
83
- )
84
- end
85
-
86
- it "ignores invalid values" do
87
- logs = capture_logs { data.add("string") }
88
- expect(data.value).to be_nil
89
- expect(logs).to contains_log(
90
- :error,
91
- "Sample data 'data_key': Unsupported data type 'String' received: \"string\""
92
- )
93
-
94
- set = Set.new
95
- set.add("abc")
96
- logs = capture_logs { data.add(set) }
97
- expect(data.value).to be_nil
98
- expect(logs).to contains_log(
99
- :error,
100
- "Sample data 'data_key': Unsupported data type 'Set' received: #<Set: {\"abc\"}>"
101
- )
102
-
103
- instance = Class.new
104
- logs = capture_logs { data.add(instance) }
105
- expect(data.value).to be_nil
106
- expect(logs).to contains_log(
107
- :error,
108
- "Sample data 'data_key': Unsupported data type 'Class' received: #<Class:"
109
- )
110
- end
111
-
112
- context "with a type specified" do
113
- it "only accepts values of Hash type" do
114
- data = described_class.new(:data_key, Hash)
115
-
116
- data.add(:key1 => "value 1")
117
- data.add(["abc"])
118
- data.add { { :key2 => "value 2" } }
119
- data.add { ["def"] }
120
- data.add(:key3 => "value 3")
121
-
122
- expect(data.value).to eq(:key1 => "value 1", :key2 => "value 2", :key3 => "value 3")
123
- end
124
-
125
- it "only accepts values of Array type" do
126
- data = described_class.new(:data_key, Array)
127
-
128
- data.add(:key1 => "value 1")
129
- data.add(["abc"])
130
- data.add { { :key2 => "value 2" } }
131
- data.add { ["def"] }
132
- data.add(:key3 => "value 3")
133
-
134
- expect(data.value).to eq(["abc", "def"])
135
- end
136
- end
137
- end
138
-
139
- describe "#value" do
140
- it "caches the block value after calling it once" do
141
- Appsignal::Testing.store[:block_call] = 0
142
- data.add do
143
- Appsignal::Testing.store[:block_call] += 1
144
- { :key => "value" }
145
- end
146
-
147
- expect(data.value).to eq(:key => "value")
148
- data.value
149
-
150
- expect(Appsignal::Testing.store[:block_call]).to eq(1)
151
- end
152
- end
153
-
154
- describe "#value?" do
155
- it "returns true when value is set" do
156
- data.add(["abc"])
157
- expect(data.value?).to be_truthy
158
- end
159
-
160
- it "returns true when value is set with a block" do
161
- data.add { ["abc"] }
162
- expect(data.value?).to be_truthy
163
- end
164
-
165
- it "returns false when the value is not set" do
166
- expect(data.value?).to be_falsey
167
- end
168
- end
169
-
170
- describe "#set_empty_value!" do
171
- it "clears the set values" do
172
- data.add(["abc"])
173
- data.add(["def"])
174
- data.set_empty_value!
175
-
176
- expect(data.value).to be_nil
177
- end
178
-
179
- it "allows values to be added afterwards" do
180
- data.add(["abc"])
181
- data.set_empty_value!
182
-
183
- expect(data.value).to be_nil
184
-
185
- data.add(["def"])
186
- expect(data.value).to eq(["def"])
187
- end
188
- end
189
-
190
- describe "#cleared?" do
191
- it "returns false if not cleared" do
192
- expect(data.empty?).to be(false)
193
- end
194
-
195
- it "returns true if cleared" do
196
- data.set_empty_value!
197
-
198
- expect(data.empty?).to be(true)
199
- end
200
-
201
- it "returns false if cleared and then new values were added" do
202
- data.set_empty_value!
203
- data.add(["abc"])
204
-
205
- expect(data.empty?).to be(false)
206
- end
207
- end
208
-
209
- describe "#duplicate" do
210
- it "duplicates the internal Hash state without modifying the original" do
211
- data = described_class.new(:my_key, Hash)
212
- data.add(:abc => :value)
213
-
214
- duplicate = data.dup
215
- duplicate.add(:def => :value)
216
-
217
- expect(data.value).to eq(:abc => :value)
218
- expect(duplicate.value).to eq(:abc => :value, :def => :value)
219
-
220
- expect(duplicate.instance_variable_get(:@key)).to eq(:my_key)
221
- expect(duplicate.instance_variable_get(:@accepted_type)).to eq(Hash)
222
- end
223
-
224
- it "duplicates the internal Array state without modifying the original" do
225
- data = described_class.new(:my_key, Array)
226
- data.add([:abc])
227
-
228
- duplicate = data.dup
229
- duplicate.add([:def])
230
-
231
- expect(data.value).to eq([:abc])
232
- expect(duplicate.value).to eq([:abc, :def])
233
-
234
- expect(duplicate.instance_variable_get(:@key)).to eq(:my_key)
235
- expect(duplicate.instance_variable_get(:@accepted_type)).to eq(Array)
236
- end
237
- end
238
- end
@@ -1,141 +0,0 @@
1
- require "appsignal/span"
2
-
3
- describe Appsignal::Span do
4
- before { start_agent }
5
-
6
- let(:namespace) { "web" }
7
- let(:root) { Appsignal::Span.new(namespace) }
8
-
9
- describe "creating a span" do
10
- it "creates an empty span" do
11
- expect(root.to_h["namespace"]).to eq "web"
12
- expect(root.to_h["trace_id"].length).to eq 16
13
- expect(root.to_h["span_id"].length).to eq 8
14
- expect(root.to_h["parent_span_id"]).to be_empty
15
- expect(root.to_h["name"]).to be_empty
16
- expect(root.to_h["start_time_seconds"]).to be > 1_600_000_000
17
- expect(root.to_h["start_time_nanoseconds"]).to be_kind_of(Numeric)
18
- expect(root.to_h["closed"]).to be false
19
- end
20
- end
21
-
22
- describe "#child" do
23
- let(:child) { root.child }
24
-
25
- it "creates a child span" do
26
- expect(child.to_h["namespace"]).to be_empty
27
- expect(child.to_h["trace_id"].length).to eq 16
28
- expect(child.to_h["span_id"].length).to eq 8
29
- expect(child.to_h["parent_span_id"]).to eq root.to_h["span_id"]
30
- expect(child.to_h["name"]).to be_empty
31
- expect(root.to_h["start_time_seconds"]).to be > 1_600_000_000
32
- expect(root.to_h["start_time_nanoseconds"]).to be_kind_of(Numeric)
33
- expect(child.to_h["closed"]).to be false
34
- end
35
- end
36
-
37
- describe "#add_error" do
38
- it "adds an error" do
39
- begin
40
- raise "Error"
41
- rescue => error
42
- root.add_error(error)
43
- end
44
-
45
- error = root.to_h["error"]
46
- expect(error["name"]).to eq "RuntimeError"
47
- expect(error["message"]).to eq "Error"
48
- expect(error["backtrace_json"]).not_to be_empty
49
- end
50
- end
51
-
52
- describe "set_sample_data" do
53
- it "sets sample data" do
54
- root.set_sample_data(:params, "key" => "value")
55
-
56
- sample_data = root.to_h["sample_data"]
57
- expect(sample_data["params"]).to eq "{\"key\":\"value\"}"
58
- end
59
- end
60
-
61
- describe "#name=" do
62
- it "sets the name" do
63
- root.name = "Span name"
64
-
65
- expect(root.to_h["name"]).to eq "Span name"
66
- end
67
- end
68
-
69
- describe "#[]=" do
70
- let(:attributes) { root.to_h["attributes"] }
71
-
72
- it "sets a string attribute" do
73
- root["string"] = "attribute"
74
-
75
- expect(attributes["string"]).to eq "attribute"
76
- end
77
-
78
- it "sets an integer attribute" do
79
- root["integer"] = 1001
80
-
81
- expect(attributes["integer"]).to eq 1001
82
- end
83
-
84
- it "sets a bigint attribute" do
85
- root["bigint"] = 1 << 64
86
-
87
- expect(attributes["bigint"]).to eq "bigint:#{1 << 64}"
88
- end
89
-
90
- it "sets a boolean attribute" do
91
- root["true"] = true
92
- root["false"] = false
93
-
94
- expect(attributes["true"]).to eq true
95
- expect(attributes["false"]).to eq false
96
- end
97
-
98
- it "sets a float attribute" do
99
- root["float"] = 10.01
100
-
101
- expect(attributes["float"]).to eq 10.01
102
- end
103
-
104
- it "raises an error for other types" do
105
- expect do
106
- root["something"] = Object.new
107
- end.to raise_error TypeError
108
- end
109
- end
110
-
111
- describe "#instrument" do
112
- it "closes the span after yielding" do
113
- root.instrument do
114
- # Nothing happening
115
- end
116
- expect(root.closed?).to eq true
117
- end
118
-
119
- context "with an error raised in the passed block" do
120
- it "closes the span after yielding" do
121
- expect do
122
- root.instrument do
123
- raise ExampleException, "foo"
124
- end
125
- end.to raise_error(ExampleException, "foo")
126
- expect(root.closed?).to eq true
127
- end
128
- end
129
- end
130
-
131
- describe "#close" do
132
- it "closes a span" do
133
- expect(root.closed?).to eq false
134
-
135
- root.close
136
-
137
- expect(root.to_h).to be_nil
138
- expect(root.closed?).to eq true
139
- end
140
- end
141
- end
@@ -1,126 +0,0 @@
1
- require "appsignal/system"
2
-
3
- describe Appsignal::System do
4
- describe ".heroku?" do
5
- subject { described_class.heroku? }
6
-
7
- context "when on Heroku" do
8
- around { |example| recognize_as_heroku { example.run } }
9
-
10
- it "returns true" do
11
- is_expected.to eq(true)
12
- end
13
- end
14
-
15
- context "when not on Heroku" do
16
- it "returns false" do
17
- is_expected.to eq(false)
18
- end
19
- end
20
- end
21
-
22
- describe ".agent_platform" do
23
- let(:os) { "linux-gnu" }
24
- let(:ldd_output) { "" }
25
- before do
26
- allow(described_class).to receive(:ldd_version_output).and_return(ldd_output)
27
- allow(RbConfig::CONFIG).to receive(:[])
28
- allow(RbConfig::CONFIG).to receive(:[]).with("host_os").and_return(os)
29
- end
30
- subject { described_class.agent_platform }
31
-
32
- context "when the system detection doesn't work" do
33
- it "returns the libc build" do
34
- is_expected.to eq("linux")
35
- end
36
- end
37
-
38
- context "when using the APPSIGNAL_BUILD_FOR_MUSL env var" do
39
- it "returns the musl build" do
40
- ENV["APPSIGNAL_BUILD_FOR_MUSL"] = "1"
41
- is_expected.to eq("linux-musl")
42
- ENV.delete("APPSIGNAL_BUILD_FOR_MUSL")
43
- end
44
- end
45
-
46
- context "when using the APPSIGNAL_BUILD_FOR_LINUX_ARM env var" do
47
- it "returns the linux build" do
48
- ENV["APPSIGNAL_BUILD_FOR_LINUX_ARM"] = "1"
49
- is_expected.to eq("linux")
50
- ENV.delete("APPSIGNAL_BUILD_FOR_LINUX_ARM")
51
- end
52
- end
53
-
54
- context "when on a musl system" do
55
- let(:ldd_output) { "musl libc (x86_64)\nVersion 1.1.16" }
56
-
57
- it "returns the musl build" do
58
- is_expected.to eq("linux-musl")
59
- end
60
- end
61
-
62
- context "when on a libc system" do
63
- let(:ldd_output) { "ldd (Debian GLIBC 2.15-18+deb8u7) 2.15" }
64
-
65
- it "returns the libc build" do
66
- is_expected.to eq("linux")
67
- end
68
-
69
- context "when on an old libc system" do
70
- let(:ldd_output) { "ldd (Debian GLIBC 2.14-18+deb8u7) 2.14" }
71
-
72
- it "returns the musl build" do
73
- is_expected.to eq("linux-musl")
74
- end
75
- end
76
-
77
- context "when on a very old libc system" do
78
- let(:ldd_output) { "ldd (Debian GLIBC 2.5-18+deb8u7) 2.5" }
79
-
80
- it "returns the musl build" do
81
- is_expected.to eq("linux-musl")
82
- end
83
- end
84
- end
85
-
86
- context "when on macOS" do
87
- let(:os) { "darwin16.7.0" }
88
- let(:ldd_output) { "ldd: command not found" }
89
-
90
- it "returns the darwin build" do
91
- is_expected.to eq("darwin")
92
- end
93
- end
94
-
95
- context "when on FreeBSD" do
96
- let(:os) { "freebsd11" }
97
- let(:ldd_output) { "ldd: illegal option -- -" }
98
-
99
- it "returns the FreeBSD build" do
100
- is_expected.to eq("freebsd")
101
- end
102
- end
103
- end
104
-
105
- describe ".agent_architecture" do
106
- let(:architecture) { "x86_64" }
107
- let(:ldd_output) { "" }
108
- before do
109
- allow(RbConfig::CONFIG).to receive(:[])
110
- allow(RbConfig::CONFIG).to receive(:[]).with("host_cpu").and_return(architecture)
111
- end
112
- subject { described_class.agent_architecture }
113
-
114
- it "returns the host CPU value" do
115
- is_expected.to eq(architecture)
116
- end
117
-
118
- context "when using the APPSIGNAL_BUILD_FOR_LINUX_ARM env var" do
119
- it "returns ARM 64 bit" do
120
- ENV["APPSIGNAL_BUILD_FOR_LINUX_ARM"] = "1"
121
- is_expected.to eq("aarch64")
122
- ENV.delete("APPSIGNAL_BUILD_FOR_LINUX_ARM")
123
- end
124
- end
125
- end
126
- end