instana 1.217.1 → 2.1.0

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 (228) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -1
  3. data/lib/instana/base.rb +4 -2
  4. data/lib/instana/instrumentation/action_cable.rb +8 -4
  5. data/lib/instana/instrumentation/action_controller.rb +2 -4
  6. data/lib/instana/instrumentation/action_mailer.rb +1 -1
  7. data/lib/instana/instrumentation/action_view.rb +4 -4
  8. data/lib/instana/instrumentation/active_job.rb +20 -5
  9. data/lib/instana/instrumentation/active_record.rb +1 -1
  10. data/lib/instana/instrumentation/aws_sdk_dynamodb.rb +1 -1
  11. data/lib/instana/instrumentation/aws_sdk_lambda.rb +1 -1
  12. data/lib/instana/instrumentation/aws_sdk_s3.rb +1 -1
  13. data/lib/instana/instrumentation/aws_sdk_sns.rb +1 -1
  14. data/lib/instana/instrumentation/aws_sdk_sqs.rb +1 -1
  15. data/lib/instana/instrumentation/dalli.rb +1 -1
  16. data/lib/instana/instrumentation/excon.rb +2 -2
  17. data/lib/instana/instrumentation/graphql.rb +3 -3
  18. data/lib/instana/instrumentation/grpc.rb +14 -13
  19. data/lib/instana/instrumentation/mongo.rb +3 -3
  20. data/lib/instana/instrumentation/net-http.rb +5 -4
  21. data/lib/instana/instrumentation/rack.rb +36 -4
  22. data/lib/instana/instrumentation/redis.rb +1 -1
  23. data/lib/instana/instrumentation/resque.rb +10 -8
  24. data/lib/instana/instrumentation/rest-client.rb +4 -4
  25. data/lib/instana/instrumentation/sequel.rb +3 -3
  26. data/lib/instana/instrumentation/shoryuken.rb +4 -1
  27. data/lib/instana/instrumentation/sidekiq-client.rb +21 -19
  28. data/lib/instana/instrumentation/sidekiq-worker.rb +22 -21
  29. data/lib/instana/instrumented_logger.rb +1 -1
  30. data/lib/instana/samplers/result.rb +32 -0
  31. data/lib/instana/samplers/samplers.rb +76 -0
  32. data/lib/instana/serverless.rb +4 -2
  33. data/lib/instana/setup.rb +5 -5
  34. data/lib/instana/span_filtering/condition.rb +134 -0
  35. data/lib/instana/span_filtering/configuration.rb +262 -0
  36. data/lib/instana/span_filtering/filter_rule.rb +31 -0
  37. data/lib/instana/span_filtering.rb +62 -0
  38. data/lib/instana/trace/export.rb +36 -0
  39. data/lib/instana/{tracing → trace}/processor.rb +19 -15
  40. data/lib/instana/trace/span.rb +534 -0
  41. data/lib/instana/{tracing → trace}/span_context.rb +17 -8
  42. data/lib/instana/trace/span_kind.rb +51 -0
  43. data/lib/instana/trace/span_limits.rb +63 -0
  44. data/lib/instana/{tracer.rb → trace/tracer.rb} +106 -54
  45. data/lib/instana/trace/tracer_provider.rb +198 -0
  46. data/lib/instana/trace.rb +74 -0
  47. data/lib/instana/util.rb +11 -0
  48. data/lib/instana/version.rb +1 -1
  49. metadata +89 -267
  50. data/.circleci/config.yml +0 -485
  51. data/.codeclimate.yml +0 -23
  52. data/.editorconfig +0 -10
  53. data/.fasterer.yml +0 -23
  54. data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
  55. data/.github/ISSUE_TEMPLATE/config.yml +0 -8
  56. data/.github/workflows/pr_commits_signed_off.yml +0 -16
  57. data/.github/workflows/release-notification-on-slack.yml +0 -34
  58. data/.gitignore +0 -19
  59. data/.rubocop.yml +0 -34
  60. data/.rubocop_todo.yml +0 -1140
  61. data/.tekton/.currency/docs/report.md +0 -20
  62. data/.tekton/.currency/resources/requirements.txt +0 -4
  63. data/.tekton/.currency/resources/table.json +0 -100
  64. data/.tekton/.currency/scripts/generate_report.py +0 -136
  65. data/.tekton/README.md +0 -278
  66. data/.tekton/github-interceptor-secret.yaml +0 -8
  67. data/.tekton/github-pr-eventlistener.yaml +0 -104
  68. data/.tekton/github-pr-pipeline.yaml.part +0 -38
  69. data/.tekton/github-set-status-task.yaml +0 -43
  70. data/.tekton/github-webhook-ingress.yaml +0 -20
  71. data/.tekton/pipeline.yaml +0 -571
  72. data/.tekton/pipelinerun.yaml +0 -21
  73. data/.tekton/ruby-tracer-prepuller.yaml +0 -87
  74. data/.tekton/run_unittests.sh +0 -87
  75. data/.tekton/scheduled-eventlistener.yaml +0 -108
  76. data/.tekton/task.yaml +0 -449
  77. data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
  78. data/Appraisals +0 -124
  79. data/CONTRIBUTING.md +0 -86
  80. data/Gemfile +0 -17
  81. data/LICENSE +0 -22
  82. data/MAINTAINERS.md +0 -3
  83. data/Rakefile +0 -49
  84. data/bin/announce_release_on_slack.py +0 -103
  85. data/docker-compose.yml +0 -20
  86. data/download.sh +0 -85
  87. data/examples/opentracing.rb +0 -35
  88. data/examples/tracing.rb +0 -84
  89. data/extras/license_header.rb +0 -44
  90. data/gemfiles/.bundle/config +0 -2
  91. data/gemfiles/aws_30.gemfile +0 -21
  92. data/gemfiles/aws_60.gemfile +0 -16
  93. data/gemfiles/cuba_30.gemfile +0 -16
  94. data/gemfiles/cuba_40.gemfile +0 -13
  95. data/gemfiles/dalli_20.gemfile +0 -15
  96. data/gemfiles/dalli_30.gemfile +0 -12
  97. data/gemfiles/dalli_32.gemfile +0 -12
  98. data/gemfiles/excon_0100.gemfile +0 -14
  99. data/gemfiles/excon_021.gemfile +0 -17
  100. data/gemfiles/excon_079.gemfile +0 -17
  101. data/gemfiles/excon_100.gemfile +0 -14
  102. data/gemfiles/graphql_10.gemfile +0 -16
  103. data/gemfiles/graphql_20.gemfile +0 -15
  104. data/gemfiles/grpc_10.gemfile +0 -15
  105. data/gemfiles/mongo_216.gemfile +0 -15
  106. data/gemfiles/mongo_219.gemfile +0 -12
  107. data/gemfiles/net_http_01.gemfile +0 -17
  108. data/gemfiles/rack_16.gemfile +0 -15
  109. data/gemfiles/rack_20.gemfile +0 -15
  110. data/gemfiles/rack_30.gemfile +0 -13
  111. data/gemfiles/rails_42.gemfile +0 -18
  112. data/gemfiles/rails_50.gemfile +0 -19
  113. data/gemfiles/rails_52.gemfile +0 -19
  114. data/gemfiles/rails_60.gemfile +0 -19
  115. data/gemfiles/rails_61.gemfile +0 -20
  116. data/gemfiles/rails_70.gemfile +0 -17
  117. data/gemfiles/rails_71.gemfile +0 -17
  118. data/gemfiles/rails_80.gemfile +0 -17
  119. data/gemfiles/redis_40.gemfile +0 -15
  120. data/gemfiles/redis_50.gemfile +0 -13
  121. data/gemfiles/redis_51.gemfile +0 -13
  122. data/gemfiles/resque_122.gemfile +0 -16
  123. data/gemfiles/resque_1274_3scale.gemfile +0 -17
  124. data/gemfiles/resque_20.gemfile +0 -16
  125. data/gemfiles/rest_client_16.gemfile +0 -17
  126. data/gemfiles/rest_client_20.gemfile +0 -17
  127. data/gemfiles/roda_20.gemfile +0 -16
  128. data/gemfiles/roda_30.gemfile +0 -16
  129. data/gemfiles/rubocop_162.gemfile +0 -6
  130. data/gemfiles/sequel_56.gemfile +0 -16
  131. data/gemfiles/sequel_57.gemfile +0 -16
  132. data/gemfiles/sequel_58.gemfile +0 -16
  133. data/gemfiles/shoryuken_50.gemfile +0 -16
  134. data/gemfiles/shoryuken_60.gemfile +0 -13
  135. data/gemfiles/sidekiq_42.gemfile +0 -15
  136. data/gemfiles/sidekiq_50.gemfile +0 -15
  137. data/gemfiles/sidekiq_60.gemfile +0 -12
  138. data/gemfiles/sidekiq_65.gemfile +0 -12
  139. data/gemfiles/sidekiq_70.gemfile +0 -12
  140. data/gemfiles/sinatra_14.gemfile +0 -15
  141. data/gemfiles/sinatra_22.gemfile +0 -12
  142. data/gemfiles/sinatra_30.gemfile +0 -12
  143. data/gemfiles/sinatra_40.gemfile +0 -12
  144. data/instana.gemspec +0 -48
  145. data/lib/instana/open_tracing/carrier.rb +0 -7
  146. data/lib/instana/open_tracing/instana_tracer.rb +0 -99
  147. data/lib/instana/tracing/span.rb +0 -431
  148. data/lib/opentracing.rb +0 -32
  149. data/log/.keep +0 -0
  150. data/sonar-project.properties +0 -9
  151. data/test/activator_test.rb +0 -50
  152. data/test/backend/agent_test.rb +0 -80
  153. data/test/backend/gc_snapshot_test.rb +0 -11
  154. data/test/backend/host_agent_activation_observer_test.rb +0 -73
  155. data/test/backend/host_agent_lookup_test.rb +0 -78
  156. data/test/backend/host_agent_reporting_observer_test.rb +0 -276
  157. data/test/backend/host_agent_test.rb +0 -89
  158. data/test/backend/process_info_test.rb +0 -83
  159. data/test/backend/request_client_test.rb +0 -39
  160. data/test/backend/serverless_agent_test.rb +0 -83
  161. data/test/benchmarks/bench_id_generation.rb +0 -15
  162. data/test/benchmarks/bench_opentracing.rb +0 -16
  163. data/test/config_test.rb +0 -34
  164. data/test/frameworks/cuba_test.rb +0 -61
  165. data/test/frameworks/roda_test.rb +0 -60
  166. data/test/frameworks/sinatra_test.rb +0 -71
  167. data/test/instana_test.rb +0 -37
  168. data/test/instrumentation/aws_test.rb +0 -241
  169. data/test/instrumentation/dalli_test.rb +0 -325
  170. data/test/instrumentation/excon_test.rb +0 -204
  171. data/test/instrumentation/graphql_test.rb +0 -289
  172. data/test/instrumentation/grpc_test.rb +0 -420
  173. data/test/instrumentation/mongo_test.rb +0 -68
  174. data/test/instrumentation/net_http_test.rb +0 -220
  175. data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
  176. data/test/instrumentation/rack_test.rb +0 -415
  177. data/test/instrumentation/rails_action_cable_test.rb +0 -135
  178. data/test/instrumentation/rails_action_controller_test.rb +0 -218
  179. data/test/instrumentation/rails_action_mailer_test.rb +0 -66
  180. data/test/instrumentation/rails_action_view_test.rb +0 -154
  181. data/test/instrumentation/rails_active_job_test.rb +0 -65
  182. data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -45
  183. data/test/instrumentation/rails_active_record_test.rb +0 -115
  184. data/test/instrumentation/redis_test.rb +0 -152
  185. data/test/instrumentation/resque_test.rb +0 -188
  186. data/test/instrumentation/rest_client_test.rb +0 -107
  187. data/test/instrumentation/sequel_test.rb +0 -105
  188. data/test/instrumentation/shoryuken_test.rb +0 -47
  189. data/test/instrumentation/sidekiq-client_test.rb +0 -169
  190. data/test/instrumentation/sidekiq-worker_test.rb +0 -180
  191. data/test/secrets_test.rb +0 -112
  192. data/test/serverless_test.rb +0 -369
  193. data/test/snapshot/deltable_test.rb +0 -17
  194. data/test/snapshot/docker_container_test.rb +0 -82
  195. data/test/snapshot/fargate_container_test.rb +0 -82
  196. data/test/snapshot/fargate_process_test.rb +0 -35
  197. data/test/snapshot/fargate_task_test.rb +0 -49
  198. data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
  199. data/test/snapshot/google_cloud_run_process_test.rb +0 -33
  200. data/test/snapshot/lambda_function_test.rb +0 -37
  201. data/test/snapshot/ruby_process_test.rb +0 -32
  202. data/test/support/apps/active_record/active_record.rb +0 -24
  203. data/test/support/apps/grpc/boot.rb +0 -23
  204. data/test/support/apps/grpc/grpc_server.rb +0 -84
  205. data/test/support/apps/http_endpoint/boot.rb +0 -28
  206. data/test/support/apps/rails/boot.rb +0 -219
  207. data/test/support/apps/rails/models/block.rb +0 -21
  208. data/test/support/apps/rails/models/block6.rb +0 -21
  209. data/test/support/apps/resque/boot.rb +0 -5
  210. data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
  211. data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
  212. data/test/support/apps/sidekiq/boot.rb +0 -25
  213. data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
  214. data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
  215. data/test/support/apps/sidekiq/worker.rb +0 -37
  216. data/test/support/helpers.rb +0 -85
  217. data/test/support/mock_timer.rb +0 -20
  218. data/test/test_helper.rb +0 -69
  219. data/test/tracing/custom_test.rb +0 -226
  220. data/test/tracing/id_management_test.rb +0 -80
  221. data/test/tracing/instrumented_logger_test.rb +0 -39
  222. data/test/tracing/opentracing_test.rb +0 -382
  223. data/test/tracing/processor_test.rb +0 -58
  224. data/test/tracing/span_context_test.rb +0 -22
  225. data/test/tracing/span_test.rb +0 -179
  226. data/test/tracing/tracer_async_test.rb +0 -230
  227. data/test/tracing/tracer_test.rb +0 -352
  228. data/test/util_test.rb +0 -10
@@ -1,218 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- require 'test_helper'
5
-
6
- class RailsActionControllerTest < Minitest::Test
7
- include Rack::Test::Methods
8
- begin
9
- ENV['INSTANA_TEST'] = nil
10
- APP = Rack::Builder.parse_file('test/support/apps/action_controller/config.ru')
11
- ensure
12
- ENV['INSTANA_TEST'] = 'true'
13
- end
14
- railties_version = Gem::Specification.find_by_name('railties').version
15
- if railties_version < Gem::Version.new('7.1.0')
16
- APP = APP.first
17
- end
18
-
19
- def app
20
- APP
21
- end
22
-
23
- def test_config_defaults
24
- assert ::Instana.config[:action_controller].is_a?(Hash)
25
- assert ::Instana.config[:action_controller].key?(:enabled)
26
- assert_equal true, ::Instana.config[:action_controller][:enabled]
27
- end
28
-
29
- def test_controller_reporting
30
- clear_all!
31
-
32
- get '/base/world'
33
- assert last_response.ok?
34
-
35
- spans = ::Instana.processor.queued_spans
36
- assert_equal 3, spans.length
37
-
38
- ac_span = find_first_span_by_name(spans, :actioncontroller)
39
-
40
- assert_equal "TestBaseController", ac_span[:data][:actioncontroller][:controller]
41
- assert_equal "world", ac_span[:data][:actioncontroller][:action]
42
- end
43
-
44
- def test_controller_error
45
- clear_all!
46
-
47
- get '/base/error'
48
- refute last_response.ok?
49
-
50
- spans = ::Instana.processor.queued_spans
51
- # 2 + 1 or more error log depending on Rails version
52
- assert spans.length >= 3
53
-
54
- ac_span = find_first_span_by_name(spans, :actioncontroller)
55
-
56
- assert_equal "TestBaseController", ac_span[:data][:actioncontroller][:controller]
57
- assert_equal "error", ac_span[:data][:actioncontroller][:action]
58
- assert ac_span.key?(:error)
59
- assert ac_span.key?(:stack)
60
- assert_equal "Warning: This is a simulated Error", ac_span[:data][:log][:message]
61
- assert_equal "StandardError", ac_span[:data][:log][:parameters]
62
- end
63
-
64
- def test_api_controller_reporting
65
- # Run only when ActionController::API is used/defined
66
- skip unless defined?(::ActionController::API)
67
-
68
- clear_all!
69
-
70
- get '/api/world'
71
- assert last_response.ok?
72
-
73
- spans = ::Instana.processor.queued_spans
74
- # 2 + 1 or more error log depending on Rails version
75
- assert spans.length >= 3
76
-
77
- ac_span = find_first_span_by_name(spans, :actioncontroller)
78
-
79
- assert_equal :actioncontroller, ac_span[:n]
80
- assert_equal "TestApiController", ac_span[:data][:actioncontroller][:controller]
81
- assert_equal "world", ac_span[:data][:actioncontroller][:action]
82
- end
83
-
84
- def test_api_controller_error
85
- # Run only when ActionController::API is used/defined
86
- skip unless defined?(::ActionController::API)
87
-
88
- clear_all!
89
-
90
- get '/api/error'
91
- refute last_response.ok?
92
-
93
- spans = ::Instana.processor.queued_spans
94
- # 2 + 1 or more error log depending on Rails version
95
- assert spans.length >= 3
96
-
97
- ac_span = find_first_span_by_name(spans, :actioncontroller)
98
-
99
- assert_equal "TestApiController", ac_span[:data][:actioncontroller][:controller]
100
- assert_equal "error", ac_span[:data][:actioncontroller][:action]
101
- assert ac_span.key?(:error)
102
- assert ac_span.key?(:stack)
103
- assert_equal "Warning: This is a simulated Socket API Error", ac_span[:data][:log][:message]
104
- assert_equal "StandardError", ac_span[:data][:log][:parameters]
105
- end
106
-
107
- def test_api_controller_not_found
108
- # Run only when ActionController::API is used/defined
109
- skip unless defined?(::ActionController::API)
110
-
111
- clear_all!
112
-
113
- get '/api/thispathdoesnotexist'
114
- refute last_response.ok?
115
-
116
- spans = ::Instana.processor.queued_spans
117
- # 1 + 1 or more error log depending on Rails version
118
- assert spans.length >= 2
119
-
120
- rack_span = find_first_span_by_name(spans, :rack)
121
-
122
- assert_equal false, rack_span.key?(:error)
123
- assert_equal "/api/thispathdoesnotexist", rack_span[:data][:http][:url]
124
- assert_equal 404, rack_span[:data][:http][:status]
125
- assert_equal "GET", rack_span[:data][:http][:method]
126
- end
127
-
128
- def test_api_controller_raise_routing_error
129
- # Run only when ActionController::API is used/defined
130
- skip unless defined?(::ActionController::API)
131
-
132
- clear_all!
133
-
134
- get '/api/raise_route_error'
135
- refute last_response.ok?
136
-
137
- spans = ::Instana.processor.queued_spans
138
-
139
- # 2 + 1 or more error log depending on Rails version
140
- assert spans.length >= 3
141
-
142
- rack_span = find_first_span_by_name(spans, :rack)
143
- ac_span = find_first_span_by_name(spans, :actioncontroller)
144
-
145
- assert_equal false, rack_span.key?(:error)
146
- assert_equal "/api/raise_route_error", rack_span[:data][:http][:url]
147
- assert_equal 404, rack_span[:data][:http][:status]
148
- assert_equal "GET", rack_span[:data][:http][:method]
149
-
150
- assert_equal true, ac_span[:error]
151
- assert ac_span.key?(:stack)
152
- assert 1, ac_span[:ec]
153
- end
154
-
155
- def test_not_found
156
- clear_all!
157
-
158
- get '/base/404'
159
- refute last_response.ok?
160
-
161
- spans = ::Instana.processor.queued_spans
162
- # 1 + 1 or more error log depending on Rails version
163
- assert spans.length >= 2
164
-
165
- rack_span = find_first_span_by_name(spans, :rack)
166
-
167
- assert_equal false, rack_span.key?(:error)
168
- assert_equal 404, rack_span[:data][:http][:status]
169
- end
170
-
171
- def test_raise_routing_error
172
- clear_all!
173
-
174
- get '/base/raise_route_error'
175
- refute last_response.ok?
176
-
177
- spans = ::Instana.processor.queued_spans
178
- # 2 + 1 or more error log depending on Rails version
179
- assert spans.length >= 3
180
-
181
- rack_span = find_first_span_by_name(spans, :rack)
182
- ac_span = find_first_span_by_name(spans, :actioncontroller)
183
-
184
- assert_equal false, rack_span.key?(:error)
185
- assert_equal 404, rack_span[:data][:http][:status]
186
-
187
- assert_equal true, ac_span[:error]
188
- assert ac_span.key?(:stack)
189
- assert 1, ac_span[:ec]
190
- end
191
-
192
- def test_path_template
193
- clear_all!
194
-
195
- get '/base/world'
196
- assert last_response.ok?
197
-
198
- spans = ::Instana.processor.queued_spans
199
- rack_span = find_first_span_by_name(spans, :rack)
200
-
201
- assert_equal false, rack_span.key?(:error)
202
- assert_equal '/base/world(.:format)', rack_span[:data][:http][:path_tpl]
203
- end
204
-
205
- def test_log
206
- clear_all!
207
-
208
- get '/base/log_warning'
209
- assert last_response.ok?
210
-
211
- spans = ::Instana.processor.queued_spans
212
- assert spans[0][:data][:log]
213
- log_span = spans[0][:data][:log]
214
-
215
- assert_equal "Warn", log_span[:level]
216
- assert_equal "This is a test warning", log_span[:message]
217
- end
218
- end
@@ -1,66 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
- require 'action_mailer'
6
-
7
- class RailsActionMailerTest < Minitest::Test
8
- class TestMailer < ActionMailer::Base
9
- def sample_email
10
- mail_version = Gem::Specification.find_by_name('mail').version
11
- if mail_version >= Gem::Version.new('2.8.1')
12
- Mail.new do
13
- from 'test@example.com'
14
- to 'test@example.com'
15
- subject 'Test Email'
16
- body 'Hello'
17
- content_type "text/html"
18
- end
19
- else
20
- mail(
21
- from: 'test@example.com',
22
- to: 'test@example.com',
23
- subject: 'Test Email',
24
- body: 'Hello',
25
- content_type: "text/html"
26
- )
27
- end
28
- end
29
- end
30
-
31
- def setup
32
- TestMailer.delivery_method = :sendmail
33
-
34
- clear_all!
35
- end
36
-
37
- def teardown
38
- ::Instana.config[:allow_exit_as_root] = false
39
- end
40
-
41
- def test_mailer
42
- Instana.tracer.start_or_continue_trace(:test) do
43
- TestMailer.sample_email.deliver_now
44
- end
45
-
46
- mail_span, = *::Instana.processor.queued_spans
47
-
48
- assert_equal :"mail.actionmailer", mail_span[:n]
49
- assert_equal 'RailsActionMailerTest::TestMailer', mail_span[:data][:actionmailer][:class]
50
- assert_equal 'sample_email', mail_span[:data][:actionmailer][:method]
51
- end
52
-
53
- def test_mailer_as_root_exit_span
54
- ::Instana.config[:allow_exit_as_root] = true
55
- TestMailer.sample_email.deliver_now
56
- ::Instana.config[:allow_exit_as_root] = false
57
-
58
- queued_spans = Instana.processor.queued_spans
59
- assert_equal 1, queued_spans.length
60
- mail_span = queued_spans[0]
61
-
62
- assert_equal :"mail.actionmailer", mail_span[:n]
63
- assert_equal 'RailsActionMailerTest::TestMailer', mail_span[:data][:actionmailer][:class]
64
- assert_equal 'sample_email', mail_span[:data][:actionmailer][:method]
65
- end
66
- end
@@ -1,154 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class RailsActionViewTest < Minitest::Test
7
- include Rack::Test::Methods
8
- APP = Rack::Builder.parse_file('test/support/apps/action_view/config.ru')
9
- railties_version = Gem::Specification.find_by_name('railties').version
10
- if railties_version < Gem::Version.new('7.1.0')
11
- APP = APP.first
12
- end
13
-
14
- def app
15
- APP
16
- end
17
-
18
- def setup
19
- clear_all!
20
- end
21
-
22
- def test_config_defaults
23
- assert ::Instana.config[:action_view].is_a?(Hash)
24
- assert ::Instana.config[:action_view].key?(:enabled)
25
- assert_equal true, ::Instana.config[:action_view][:enabled]
26
- end
27
-
28
- def test_render_view
29
- get '/render_view'
30
- assert last_response.ok?
31
-
32
- spans = ::Instana.processor.queued_spans
33
- span = find_first_span_by_name(spans, :actionview)
34
-
35
- assert_equal 'Default', span[:data][:actionview][:name]
36
- end
37
-
38
- def test_render_view_direct
39
- get '/render_view_direct'
40
- assert last_response.ok?
41
-
42
- spans = ::Instana.processor.queued_spans
43
- span = find_first_span_by_name(spans, :actionview)
44
-
45
- assert_equal 'Default', span[:data][:actionview][:name]
46
- end
47
-
48
- def test_render_nothing
49
- # `render nothing: true` was removed in 5.1
50
- skip unless Rails::VERSION::MAJOR <= 5 && Rails::VERSION::MINOR <= 1
51
- get '/render_nothing'
52
- assert last_response.ok?
53
-
54
- spans = ::Instana.processor.queued_spans
55
- span = find_first_span_by_name(spans, :actionview)
56
-
57
- assert_equal 'Nothing', span[:data][:actionview][:name]
58
- end
59
-
60
- def test_render_file
61
- get '/render_file'
62
- assert last_response.ok?
63
-
64
- spans = ::Instana.processor.queued_spans
65
- span = find_first_span_by_name(spans, :actionview)
66
-
67
- assert_equal 'test/support/apps/action_view/config.ru', span[:data][:actionview][:name]
68
- end
69
-
70
- def test_render_json
71
- get '/render_json'
72
- assert last_response.ok?
73
-
74
- spans = ::Instana.processor.queued_spans
75
- span = find_first_span_by_name(spans, :actionview)
76
-
77
- assert_equal 'JSON', span[:data][:actionview][:name]
78
- end
79
-
80
- def test_render_xml
81
- get '/render_xml'
82
- assert last_response.ok?
83
-
84
- spans = ::Instana.processor.queued_spans
85
- span = find_first_span_by_name(spans, :actionview)
86
-
87
- assert_equal 'XML', span[:data][:actionview][:name]
88
- end
89
-
90
- def test_render_body
91
- get '/render_rawbody'
92
- assert last_response.ok?
93
-
94
- spans = ::Instana.processor.queued_spans
95
- span = find_first_span_by_name(spans, :actionview)
96
-
97
- assert_equal 'Raw', span[:data][:actionview][:name]
98
- end
99
-
100
- def test_render_js
101
- get '/render_js'
102
- assert last_response.ok?
103
-
104
- spans = ::Instana.processor.queued_spans
105
- span = find_first_span_by_name(spans, :actionview)
106
-
107
- assert_equal 'Javascript', span[:data][:actionview][:name]
108
- end
109
-
110
- def test_render_alternate_layout
111
- get '/render_alternate_layout'
112
- assert last_response.ok?
113
-
114
- spans = ::Instana.processor.queued_spans
115
- span = find_first_span_by_name(spans, :actionview)
116
-
117
- assert_equal 'layouts/mobile', span[:data][:actionview][:name]
118
- end
119
-
120
- def test_render_partial
121
- get '/render_partial'
122
- assert last_response.ok?
123
-
124
- spans = ::Instana.processor.queued_spans
125
- span = find_first_span_by_name(spans, :render)
126
-
127
- assert_equal 'message', span[:data][:render][:name]
128
- end
129
-
130
- def test_render_partial_that_errors
131
- get '/render_partial_that_errors'
132
- refute last_response.ok?
133
-
134
- spans = ::Instana.processor.queued_spans
135
- span = find_first_span_by_name(spans, :render)
136
-
137
- assert_equal :partial, span[:data][:render][:type]
138
- assert_equal 'syntax_error', span[:data][:render][:name]
139
- assert span[:data][:log].key?(:message)
140
- assert span[:data][:log][:parameters].include?('SyntaxError')
141
- assert span[:error]
142
- assert span[:stack]
143
- end
144
-
145
- def test_render_collection
146
- get '/render_collection'
147
- assert last_response.ok?
148
-
149
- spans = ::Instana.processor.queued_spans
150
- span = find_first_span_by_name(spans, :render)
151
- assert_equal :collection, span[:data][:render][:type]
152
- assert_equal 'blocks/block', span[:data][:render][:name]
153
- end
154
- end
@@ -1,65 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- require 'rails'
7
- require 'active_job'
8
-
9
- class RailsActiveJobTest < Minitest::Test
10
- class SampleJob < ActiveJob::Base
11
- queue_as :test_queue
12
-
13
- def perform(*args); end
14
- end
15
-
16
- def setup
17
- @test_adapter = ActiveJob::Base.queue_adapter = ActiveJob::QueueAdapters::TestAdapter.new
18
- ActiveJob::Base.logger = Logger.new('/dev/null')
19
-
20
- clear_all!
21
- end
22
-
23
- def test_perform_now
24
- SampleJob.perform_now("test_perform_now")
25
- spans = ::Instana.processor.queued_spans
26
-
27
- server_span, *rest = spans
28
- assert_equal [], rest
29
-
30
- assert_equal :activejob, server_span[:n]
31
- assert_equal 'RailsActiveJobTest::SampleJob', server_span[:data][:activejob][:job]
32
- assert_equal :perform, server_span[:data][:activejob][:action]
33
- assert_equal 'test_queue', server_span[:data][:activejob][:queue]
34
- end
35
-
36
- def test_enqueue_perform
37
- # ActiveJob::QueueAdapters::TestAdapter.new doesn't work for this test on any version less than 6
38
- skip unless Rails::VERSION::MAJOR >= 6
39
-
40
- Instana.tracer.start_or_continue_trace(:peform_test) do
41
- SampleJob.perform_later("test_enqueue_perform")
42
- end
43
-
44
- job, *rest_jobs = @test_adapter.enqueued_jobs
45
- assert_equal [], rest_jobs
46
-
47
- ActiveJob::Base.execute(job)
48
-
49
- spans = ::Instana.processor.queued_spans
50
- client_span, _test_span, server_span, *rest = spans
51
- assert_equal [], rest
52
-
53
- assert_equal :activejob, server_span[:n]
54
- assert_equal 'RailsActiveJobTest::SampleJob', server_span[:data][:activejob][:job]
55
- assert_equal :perform, server_span[:data][:activejob][:action]
56
-
57
- assert_equal :activejob, client_span[:n]
58
- assert_equal 'RailsActiveJobTest::SampleJob', client_span[:data][:activejob][:job]
59
- assert_equal :enqueue, client_span[:data][:activejob][:action]
60
- assert_equal 'test_queue', server_span[:data][:activejob][:queue]
61
-
62
- assert_equal client_span[:t], server_span[:t]
63
- assert_equal client_span[:s], server_span[:p]
64
- end
65
- end
@@ -1,45 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
- require 'support/apps/active_record/active_record'
6
- require 'fileutils'
7
-
8
- class RailsActiveRecordDatabaseMissingTest < Minitest::Test
9
- def setup
10
- skip unless ENV['DATABASE_URL']
11
-
12
- @old_url = ENV['DATABASE_URL']
13
- SQLite3::Database.new('/tmp/test.db')
14
- ENV['DATABASE_URL'] = 'sqlite3:///tmp/test.db'
15
-
16
- @connection_pool = ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'])
17
- c = ::ActiveRecord::Base.connection
18
- c.execute 'PRAGMA journal_mode=DELETE'
19
- c.execute 'PRAGMA locking_mode=NORMAL'
20
- ActiveRecord::Migration.suppress_messages do
21
- ActiveRecord::Migration.run(CreateBlocks, direction: :up)
22
- end
23
- end
24
-
25
- def teardown
26
- @connection_pool.disconnect
27
- ENV['DATABASE_URL'] = @old_url
28
- end
29
-
30
- def test_error_on_missing_database
31
- assert_raises(ActiveRecord::StatementInvalid) do
32
- Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
33
- b = Block.new
34
- FileUtils.rm('/tmp/test.db')
35
- b.save!
36
- end
37
- end
38
-
39
- spans = ::Instana.processor.queued_spans
40
- span = find_first_span_by_name(spans, :activerecord)
41
-
42
- assert_equal 1, span[:ec]
43
- assert span[:data][:activerecord][:error].include?("SQLite3::ReadOnlyException: attempt to write a readonly database")
44
- end
45
- end
@@ -1,115 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
- require 'support/apps/active_record/active_record'
6
-
7
- class RailsActiveRecordTest < Minitest::Test
8
- def setup
9
- skip unless ENV['DATABASE_URL']
10
- @connection = ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'])
11
- ActiveRecord::Migration.suppress_messages do
12
- ActiveRecord::Migration.run(CreateBlocks, direction: :up)
13
- end
14
- end
15
-
16
- def teardown
17
- ActiveRecord::Migration.suppress_messages do
18
- ActiveRecord::Migration.run(CreateBlocks, direction: :down)
19
- end
20
- ActiveRecord::Base.remove_connection
21
- end
22
-
23
- def test_config_defaults
24
- assert ::Instana.config[:sanitize_sql] == true
25
- assert ::Instana.config[:active_record].is_a?(Hash)
26
- assert ::Instana.config[:active_record].key?(:enabled)
27
- assert_equal true, ::Instana.config[:active_record][:enabled]
28
- end
29
-
30
- def test_create
31
- Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
32
- Block.create(name: 'core', color: 'blue')
33
- end
34
-
35
- spans = ::Instana.processor.queued_spans
36
- assert_equal 2, spans.length
37
- span = find_first_span_by_name(spans, :activerecord)
38
- data = span[:data][:activerecord]
39
-
40
- assert data[:sql].start_with?('INSERT INTO')
41
- end
42
-
43
- def test_read
44
- Block.create(name: 'core', color: 'blue')
45
- Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
46
- Block.find_by(name: 'core')
47
- end
48
-
49
- spans = ::Instana.processor.queued_spans
50
- assert_equal 2, spans.length
51
- span = find_first_span_by_name(spans, :activerecord)
52
- data = span[:data][:activerecord]
53
-
54
- assert data[:sql].start_with?('SELECT')
55
- end
56
-
57
- def test_update
58
- Block.create(name: 'core', color: 'blue')
59
- b = Block.find_by(name: 'core')
60
-
61
- Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
62
- b.color = 'red'
63
- b.save
64
- end
65
-
66
- spans = ::Instana.processor.queued_spans
67
- assert_equal 2, spans.length
68
- span = find_first_span_by_name(spans, :activerecord)
69
- data = span[:data][:activerecord]
70
-
71
- assert data[:sql].start_with?('UPDATE')
72
- end
73
-
74
- def test_delete
75
- b = Block.create(name: 'core', color: 'blue')
76
-
77
- Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
78
- b.delete
79
- end
80
-
81
- spans = ::Instana.processor.queued_spans
82
- assert_equal 2, spans.length
83
- span = find_first_span_by_name(spans, :activerecord)
84
- data = span[:data][:activerecord]
85
-
86
- assert data[:sql].start_with?('DELETE')
87
- end
88
-
89
- def test_raw
90
- Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
91
- ActiveRecord::Base.connection.execute('SELECT 1')
92
- end
93
-
94
- spans = ::Instana.processor.queued_spans
95
- assert_equal 2, spans.length
96
- span = find_first_span_by_name(spans, :activerecord)
97
- data = span[:data][:activerecord]
98
-
99
- assert 'SELECT 1', data[:sql]
100
- end
101
-
102
- def test_raw_error
103
- assert_raises ActiveRecord::StatementInvalid do
104
- Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
105
- ActiveRecord::Base.connection.execute('INVALID')
106
- end
107
- end
108
-
109
- spans = ::Instana.processor.queued_spans
110
- assert_equal 2, spans.length
111
- span = find_first_span_by_name(spans, :activerecord)
112
-
113
- assert_equal 1, span[:ec]
114
- end
115
- end