instana 2.0.0 → 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.
- checksums.yaml +4 -4
- data/lib/instana/setup.rb +1 -0
- data/lib/instana/span_filtering/condition.rb +134 -0
- data/lib/instana/span_filtering/configuration.rb +262 -0
- data/lib/instana/span_filtering/filter_rule.rb +31 -0
- data/lib/instana/span_filtering.rb +62 -0
- data/lib/instana/trace/span.rb +5 -3
- data/lib/instana/version.rb +1 -1
- metadata +7 -258
- data/.circleci/config.yml +0 -361
- data/.codeclimate.yml +0 -23
- data/.editorconfig +0 -10
- data/.fasterer.yml +0 -23
- data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
- data/.github/ISSUE_TEMPLATE/config.yml +0 -8
- data/.github/workflows/pr_commits_signed_off.yml +0 -16
- data/.github/workflows/release-notification-on-slack.yml +0 -34
- data/.gitignore +0 -19
- data/.rubocop.yml +0 -34
- data/.rubocop_todo.yml +0 -1140
- data/.tekton/.currency/docs/report.md +0 -20
- data/.tekton/.currency/resources/requirements.txt +0 -4
- data/.tekton/.currency/resources/table.json +0 -100
- data/.tekton/.currency/scripts/generate_report.py +0 -308
- data/.tekton/README.md +0 -278
- data/.tekton/github-interceptor-secret.yaml +0 -8
- data/.tekton/github-pr-eventlistener.yaml +0 -104
- data/.tekton/github-pr-pipeline.yaml.part +0 -38
- data/.tekton/github-set-status-task.yaml +0 -43
- data/.tekton/github-webhook-ingress.yaml +0 -20
- data/.tekton/pipeline.yaml +0 -484
- data/.tekton/pipelinerun.yaml +0 -21
- data/.tekton/prepuller-restart-service-account.yaml +0 -31
- data/.tekton/ruby-tracer-prepuller-cronjob.yaml +0 -20
- data/.tekton/ruby-tracer-prepuller.yaml +0 -88
- data/.tekton/run_unittests.sh +0 -87
- data/.tekton/scheduled-eventlistener.yaml +0 -108
- data/.tekton/task.yaml +0 -453
- data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
- data/Appraisals +0 -124
- data/CONTRIBUTING.md +0 -86
- data/Gemfile +0 -22
- data/LICENSE +0 -22
- data/MAINTAINERS.md +0 -3
- data/Rakefile +0 -49
- data/bin/announce_release_on_slack.py +0 -103
- data/docker-compose.yml +0 -20
- data/download.sh +0 -85
- data/examples/otel.rb +0 -98
- data/examples/tracing.rb +0 -85
- data/extras/license_header.rb +0 -44
- data/gemfiles/.bundle/config +0 -2
- data/gemfiles/aws_30.gemfile +0 -21
- data/gemfiles/aws_60.gemfile +0 -16
- data/gemfiles/cuba_30.gemfile +0 -16
- data/gemfiles/cuba_40.gemfile +0 -13
- data/gemfiles/dalli_20.gemfile +0 -15
- data/gemfiles/dalli_30.gemfile +0 -12
- data/gemfiles/dalli_32.gemfile +0 -12
- data/gemfiles/excon_0100.gemfile +0 -14
- data/gemfiles/excon_021.gemfile +0 -17
- data/gemfiles/excon_079.gemfile +0 -17
- data/gemfiles/excon_100.gemfile +0 -14
- data/gemfiles/graphql_10.gemfile +0 -16
- data/gemfiles/graphql_20.gemfile +0 -15
- data/gemfiles/grpc_10.gemfile +0 -15
- data/gemfiles/mongo_216.gemfile +0 -15
- data/gemfiles/mongo_219.gemfile +0 -12
- data/gemfiles/net_http_01.gemfile +0 -17
- data/gemfiles/rack_16.gemfile +0 -15
- data/gemfiles/rack_20.gemfile +0 -15
- data/gemfiles/rack_30.gemfile +0 -13
- data/gemfiles/rails_42.gemfile +0 -18
- data/gemfiles/rails_50.gemfile +0 -19
- data/gemfiles/rails_52.gemfile +0 -19
- data/gemfiles/rails_60.gemfile +0 -19
- data/gemfiles/rails_61.gemfile +0 -21
- data/gemfiles/rails_70.gemfile +0 -18
- data/gemfiles/rails_71.gemfile +0 -17
- data/gemfiles/rails_80.gemfile +0 -17
- data/gemfiles/redis_40.gemfile +0 -15
- data/gemfiles/redis_50.gemfile +0 -13
- data/gemfiles/redis_51.gemfile +0 -13
- data/gemfiles/resque_122.gemfile +0 -16
- data/gemfiles/resque_1274_3scale.gemfile +0 -17
- data/gemfiles/resque_20.gemfile +0 -16
- data/gemfiles/rest_client_16.gemfile +0 -17
- data/gemfiles/rest_client_20.gemfile +0 -17
- data/gemfiles/roda_20.gemfile +0 -16
- data/gemfiles/roda_30.gemfile +0 -16
- data/gemfiles/rubocop_162.gemfile +0 -6
- data/gemfiles/sequel_56.gemfile +0 -16
- data/gemfiles/sequel_57.gemfile +0 -16
- data/gemfiles/sequel_58.gemfile +0 -16
- data/gemfiles/shoryuken_50.gemfile +0 -16
- data/gemfiles/shoryuken_60.gemfile +0 -13
- data/gemfiles/sidekiq_42.gemfile +0 -15
- data/gemfiles/sidekiq_50.gemfile +0 -15
- data/gemfiles/sidekiq_60.gemfile +0 -12
- data/gemfiles/sidekiq_65.gemfile +0 -12
- data/gemfiles/sidekiq_70.gemfile +0 -12
- data/gemfiles/sinatra_14.gemfile +0 -15
- data/gemfiles/sinatra_22.gemfile +0 -12
- data/gemfiles/sinatra_30.gemfile +0 -12
- data/gemfiles/sinatra_40.gemfile +0 -12
- data/instana.gemspec +0 -53
- data/log/.keep +0 -0
- data/sonar-project.properties +0 -9
- data/test/activator_test.rb +0 -50
- data/test/backend/agent_test.rb +0 -80
- data/test/backend/gc_snapshot_test.rb +0 -11
- data/test/backend/host_agent_activation_observer_test.rb +0 -73
- data/test/backend/host_agent_lookup_test.rb +0 -78
- data/test/backend/host_agent_reporting_observer_test.rb +0 -276
- data/test/backend/host_agent_test.rb +0 -89
- data/test/backend/process_info_test.rb +0 -83
- data/test/backend/request_client_test.rb +0 -39
- data/test/backend/serverless_agent_test.rb +0 -83
- data/test/benchmarks/bench_id_generation.rb +0 -15
- data/test/benchmarks/bench_opentracing.rb +0 -16
- data/test/config_test.rb +0 -34
- data/test/frameworks/cuba_test.rb +0 -61
- data/test/frameworks/roda_test.rb +0 -60
- data/test/frameworks/sinatra_test.rb +0 -71
- data/test/instana_test.rb +0 -37
- data/test/instrumentation/aws_test.rb +0 -241
- data/test/instrumentation/dalli_test.rb +0 -325
- data/test/instrumentation/excon_test.rb +0 -204
- data/test/instrumentation/graphql_test.rb +0 -289
- data/test/instrumentation/grpc_test.rb +0 -420
- data/test/instrumentation/mongo_test.rb +0 -68
- data/test/instrumentation/net_http_test.rb +0 -220
- data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
- data/test/instrumentation/rack_test.rb +0 -415
- data/test/instrumentation/rails_action_cable_test.rb +0 -135
- data/test/instrumentation/rails_action_controller_test.rb +0 -218
- data/test/instrumentation/rails_action_mailer_test.rb +0 -66
- data/test/instrumentation/rails_action_view_test.rb +0 -154
- data/test/instrumentation/rails_active_job_test.rb +0 -65
- data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -44
- data/test/instrumentation/rails_active_record_test.rb +0 -116
- data/test/instrumentation/redis_test.rb +0 -152
- data/test/instrumentation/resque_test.rb +0 -188
- data/test/instrumentation/rest_client_test.rb +0 -106
- data/test/instrumentation/sequel_test.rb +0 -111
- data/test/instrumentation/shoryuken_test.rb +0 -47
- data/test/instrumentation/sidekiq-client_test.rb +0 -169
- data/test/instrumentation/sidekiq-worker_test.rb +0 -180
- data/test/secrets_test.rb +0 -112
- data/test/serverless_test.rb +0 -369
- data/test/snapshot/deltable_test.rb +0 -17
- data/test/snapshot/docker_container_test.rb +0 -82
- data/test/snapshot/fargate_container_test.rb +0 -82
- data/test/snapshot/fargate_process_test.rb +0 -35
- data/test/snapshot/fargate_task_test.rb +0 -49
- data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
- data/test/snapshot/google_cloud_run_process_test.rb +0 -33
- data/test/snapshot/lambda_function_test.rb +0 -37
- data/test/snapshot/ruby_process_test.rb +0 -32
- data/test/support/apps/active_record/active_record.rb +0 -24
- data/test/support/apps/grpc/boot.rb +0 -23
- data/test/support/apps/grpc/grpc_server.rb +0 -84
- data/test/support/apps/http_endpoint/boot.rb +0 -28
- data/test/support/apps/rails/boot.rb +0 -219
- data/test/support/apps/rails/models/block.rb +0 -21
- data/test/support/apps/rails/models/block6.rb +0 -21
- data/test/support/apps/resque/boot.rb +0 -5
- data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
- data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
- data/test/support/apps/sidekiq/boot.rb +0 -25
- data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
- data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
- data/test/support/apps/sidekiq/worker.rb +0 -37
- data/test/support/helpers.rb +0 -85
- data/test/support/mock_timer.rb +0 -20
- data/test/test_helper.rb +0 -69
- data/test/trace/custom_test.rb +0 -233
- data/test/trace/id_management_test.rb +0 -78
- data/test/trace/instrumented_logger_test.rb +0 -39
- data/test/trace/processor_test.rb +0 -58
- data/test/trace/span_context_test.rb +0 -22
- data/test/trace/span_test.rb +0 -179
- data/test/trace/tracer_async_test.rb +0 -243
- data/test/trace/tracer_provider_test.rb +0 -148
- data/test/trace/tracer_test.rb +0 -363
- data/test/util_test.rb +0 -10
@@ -1,415 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2016
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
require 'rack/test'
|
6
|
-
|
7
|
-
framework_version = Gem::Specification.find_by_name('rack').version
|
8
|
-
if framework_version < Gem::Version.new('3.0.0')
|
9
|
-
require 'rack/lobster'
|
10
|
-
else
|
11
|
-
require 'rackup/lobster'
|
12
|
-
end
|
13
|
-
|
14
|
-
class RackTest < Minitest::Test
|
15
|
-
include Rack::Test::Methods
|
16
|
-
|
17
|
-
class PathTemplateApp
|
18
|
-
def call(env)
|
19
|
-
env['INSTANA_HTTP_PATH_TEMPLATE'] = 'sample_template'
|
20
|
-
[200, {}, ['Ok']]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class ErrorApp
|
25
|
-
def call(_env)
|
26
|
-
raise 'An Error'
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class FiveZeroOneApp
|
31
|
-
def call(_env)
|
32
|
-
[501, {}, ['No']]
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
class NoHeadersApp
|
37
|
-
def call(_env)
|
38
|
-
[501, nil, ['No']]
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def app
|
43
|
-
framework_version = Gem::Specification.find_by_name('rack').version
|
44
|
-
@app = Rack::Builder.new do
|
45
|
-
use Rack::CommonLogger
|
46
|
-
use Rack::ShowExceptions
|
47
|
-
use Instana::Rack
|
48
|
-
if framework_version < Gem::Version.new('3.0.0')
|
49
|
-
map("/mrlobster") { run Rack::Lobster.new }
|
50
|
-
else
|
51
|
-
map("/mrlobster") { run Rackup::Lobster.new }
|
52
|
-
end
|
53
|
-
map("/path_tpl") { run PathTemplateApp.new }
|
54
|
-
map("/error") { run ErrorApp.new }
|
55
|
-
map("/five_zero_one") { run FiveZeroOneApp.new }
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_basic_get
|
60
|
-
clear_all!
|
61
|
-
::Instana.config[:collect_backtraces] = true
|
62
|
-
|
63
|
-
get '/mrlobster'
|
64
|
-
assert last_response.ok?
|
65
|
-
|
66
|
-
spans = ::Instana.processor.queued_spans
|
67
|
-
|
68
|
-
# Span validation
|
69
|
-
assert_equal 1, spans.count
|
70
|
-
|
71
|
-
rack_span = spans.first
|
72
|
-
assert_equal :rack, rack_span[:n]
|
73
|
-
|
74
|
-
assert last_response.headers.key?("X-Instana-T")
|
75
|
-
assert last_response.headers["X-Instana-T"] == ::Instana::Util.id_to_header(rack_span[:t])
|
76
|
-
assert last_response.headers.key?("X-Instana-S")
|
77
|
-
assert last_response.headers["X-Instana-S"] == ::Instana::Util.id_to_header(rack_span[:s])
|
78
|
-
assert last_response.headers.key?("X-Instana-L")
|
79
|
-
assert last_response.headers["X-Instana-L"] == '1'
|
80
|
-
assert last_response.headers.key?("Server-Timing")
|
81
|
-
assert last_response.headers["Server-Timing"] == "intid;desc=#{::Instana::Util.id_to_header(rack_span[:t])}"
|
82
|
-
|
83
|
-
# W3C Trace Context
|
84
|
-
assert_equal "00-#{rack_span[:t].rjust(32, '0')}-#{rack_span[:s]}-01", last_response.headers["Traceparent"]
|
85
|
-
assert_equal "in=#{rack_span[:t]};#{rack_span[:s]}", last_response.headers["Tracestate"]
|
86
|
-
|
87
|
-
assert rack_span.key?(:data)
|
88
|
-
assert rack_span[:data].key?(:http)
|
89
|
-
assert_equal "GET", rack_span[:data][:http][:method]
|
90
|
-
assert_equal "/mrlobster", rack_span[:data][:http][:url]
|
91
|
-
assert_equal 200, rack_span[:data][:http][:status]
|
92
|
-
assert_equal 'example.org', rack_span[:data][:http][:host]
|
93
|
-
assert rack_span.key?(:f)
|
94
|
-
assert !rack_span.key?(:stack)
|
95
|
-
|
96
|
-
# Restore to default
|
97
|
-
::Instana.config[:collect_backtraces] = false
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_basic_get_with_custom_service_name
|
101
|
-
ENV['INSTANA_SERVICE_NAME'] = 'WalterBishop'
|
102
|
-
|
103
|
-
clear_all!
|
104
|
-
get '/mrlobster'
|
105
|
-
assert last_response.ok?
|
106
|
-
|
107
|
-
spans = ::Instana.processor.queued_spans
|
108
|
-
|
109
|
-
# Span validation
|
110
|
-
assert_equal 1, spans.count
|
111
|
-
|
112
|
-
rack_span = spans.first
|
113
|
-
assert_equal 'WalterBishop', rack_span[:data][:service]
|
114
|
-
|
115
|
-
ENV.delete('INSTANA_SERVICE_NAME')
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_basic_post
|
119
|
-
clear_all!
|
120
|
-
post '/mrlobster'
|
121
|
-
assert last_response.ok?
|
122
|
-
|
123
|
-
spans = ::Instana.processor.queued_spans
|
124
|
-
|
125
|
-
# Span validation
|
126
|
-
assert_equal 1, spans.count
|
127
|
-
rack_span = spans.first
|
128
|
-
assert_equal :rack, rack_span[:n]
|
129
|
-
|
130
|
-
assert last_response.headers.key?("X-Instana-T")
|
131
|
-
assert last_response.headers["X-Instana-T"] == ::Instana::Util.id_to_header(rack_span[:t])
|
132
|
-
assert last_response.headers.key?("X-Instana-S")
|
133
|
-
assert last_response.headers["X-Instana-S"] == ::Instana::Util.id_to_header(rack_span[:s])
|
134
|
-
assert last_response.headers.key?("X-Instana-L")
|
135
|
-
assert last_response.headers["X-Instana-L"] == '1'
|
136
|
-
assert last_response.headers.key?("Server-Timing")
|
137
|
-
assert last_response.headers["Server-Timing"] == "intid;desc=#{::Instana::Util.id_to_header(rack_span[:t])}"
|
138
|
-
|
139
|
-
assert rack_span.key?(:data)
|
140
|
-
assert rack_span[:data].key?(:http)
|
141
|
-
assert_equal "POST", rack_span[:data][:http][:method]
|
142
|
-
assert_equal "/mrlobster", rack_span[:data][:http][:url]
|
143
|
-
assert_equal 200, rack_span[:data][:http][:status]
|
144
|
-
assert rack_span.key?(:f)
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_basic_put
|
148
|
-
clear_all!
|
149
|
-
put '/mrlobster'
|
150
|
-
assert last_response.ok?
|
151
|
-
|
152
|
-
spans = ::Instana.processor.queued_spans
|
153
|
-
|
154
|
-
# Span validation
|
155
|
-
assert_equal 1, spans.count
|
156
|
-
rack_span = spans.first
|
157
|
-
assert_equal :rack, rack_span[:n]
|
158
|
-
|
159
|
-
assert last_response.headers.key?("X-Instana-T")
|
160
|
-
assert last_response.headers["X-Instana-T"] == ::Instana::Util.id_to_header(rack_span[:t])
|
161
|
-
assert last_response.headers.key?("X-Instana-S")
|
162
|
-
assert last_response.headers["X-Instana-S"] == ::Instana::Util.id_to_header(rack_span[:s])
|
163
|
-
assert last_response.headers.key?("X-Instana-L")
|
164
|
-
assert last_response.headers["X-Instana-L"] == '1'
|
165
|
-
assert last_response.headers.key?("Server-Timing")
|
166
|
-
assert last_response.headers["Server-Timing"] == "intid;desc=#{::Instana::Util.id_to_header(rack_span[:t])}"
|
167
|
-
|
168
|
-
assert rack_span.key?(:data)
|
169
|
-
assert rack_span[:data].key?(:http)
|
170
|
-
assert_equal "PUT", rack_span[:data][:http][:method]
|
171
|
-
assert_equal "/mrlobster", rack_span[:data][:http][:url]
|
172
|
-
assert_equal 200, rack_span[:data][:http][:status]
|
173
|
-
assert rack_span.key?(:f)
|
174
|
-
end
|
175
|
-
|
176
|
-
def test_context_continuation
|
177
|
-
clear_all!
|
178
|
-
continuation_id = Instana::Util.generate_id
|
179
|
-
header 'X-INSTANA-T', continuation_id
|
180
|
-
header 'X-INSTANA-S', continuation_id
|
181
|
-
|
182
|
-
get '/mrlobster'
|
183
|
-
assert last_response.ok?
|
184
|
-
|
185
|
-
spans = ::Instana.processor.queued_spans
|
186
|
-
|
187
|
-
# Span validation
|
188
|
-
assert_equal 1, spans.count
|
189
|
-
rack_span = spans.first
|
190
|
-
assert_equal :rack, rack_span[:n]
|
191
|
-
|
192
|
-
assert last_response.headers.key?("X-Instana-T")
|
193
|
-
assert last_response.headers["X-Instana-T"] == ::Instana::Util.id_to_header(rack_span[:t])
|
194
|
-
assert last_response.headers.key?("X-Instana-S")
|
195
|
-
assert last_response.headers["X-Instana-S"] == ::Instana::Util.id_to_header(rack_span[:s])
|
196
|
-
assert last_response.headers.key?("X-Instana-L")
|
197
|
-
assert last_response.headers["X-Instana-L"] == '1'
|
198
|
-
assert last_response.headers.key?("Server-Timing")
|
199
|
-
assert last_response.headers["Server-Timing"] == "intid;desc=#{::Instana::Util.id_to_header(rack_span[:t])}"
|
200
|
-
|
201
|
-
assert rack_span.key?(:data)
|
202
|
-
assert rack_span[:data].key?(:http)
|
203
|
-
assert_equal "GET", rack_span[:data][:http][:method]
|
204
|
-
assert_equal "/mrlobster", rack_span[:data][:http][:url]
|
205
|
-
assert_equal 200, rack_span[:data][:http][:status]
|
206
|
-
assert rack_span.key?(:f)
|
207
|
-
|
208
|
-
# Context validation
|
209
|
-
# The first span should have the passed in trace ID
|
210
|
-
# and specify the passed in span ID as it's parent.
|
211
|
-
assert_equal continuation_id, rack_span[:t]
|
212
|
-
assert_equal continuation_id, rack_span[:p]
|
213
|
-
end
|
214
|
-
|
215
|
-
def test_correlation_information
|
216
|
-
clear_all!
|
217
|
-
|
218
|
-
header 'X-INSTANA-L', '1,correlationType=test;correlationId=abcdefh123'
|
219
|
-
|
220
|
-
get '/mrlobster'
|
221
|
-
assert last_response.ok?
|
222
|
-
|
223
|
-
spans = ::Instana.processor.queued_spans
|
224
|
-
|
225
|
-
# Span validation
|
226
|
-
assert_equal 1, spans.count
|
227
|
-
rack_span = spans.first
|
228
|
-
assert_equal :rack, rack_span[:n]
|
229
|
-
|
230
|
-
assert_equal 'abcdefh123', rack_span[:crid]
|
231
|
-
assert_equal 'test', rack_span[:crtp]
|
232
|
-
end
|
233
|
-
|
234
|
-
|
235
|
-
def test_instana_response_headers
|
236
|
-
clear_all!
|
237
|
-
get '/mrlobster'
|
238
|
-
assert last_response.ok?
|
239
|
-
|
240
|
-
refute_nil last_response.headers.key?("X-Instana-T")
|
241
|
-
refute_nil last_response.headers.key?("X-Instana-S")
|
242
|
-
end
|
243
|
-
|
244
|
-
def test_that_url_params_not_logged
|
245
|
-
clear_all!
|
246
|
-
get '/mrlobster?blah=2&wilma=1&betty=2;fred=3'
|
247
|
-
|
248
|
-
spans = ::Instana.processor.queued_spans
|
249
|
-
assert_equal 1, spans.length
|
250
|
-
|
251
|
-
refute_nil spans.first.key?(:data)
|
252
|
-
refute_nil spans.first[:data].key?(:http)
|
253
|
-
refute_nil spans.first[:data][:http].key?(:url)
|
254
|
-
assert_equal '/mrlobster', spans.first[:data][:http][:url]
|
255
|
-
|
256
|
-
assert last_response.ok?
|
257
|
-
end
|
258
|
-
|
259
|
-
def test_custom_headers_capture
|
260
|
-
clear_all!
|
261
|
-
::Instana.config[:collect_backtraces] = true
|
262
|
-
::Instana.agent.define_singleton_method(:extra_headers) { %w(X-Capture-This X-Capture-That) }
|
263
|
-
|
264
|
-
get '/mrlobster', {}, { "HTTP_X_CAPTURE_THIS" => "ThereYouGo" }
|
265
|
-
assert last_response.ok?
|
266
|
-
assert_equal "ThereYouGo", last_request.env["HTTP_X_CAPTURE_THIS"]
|
267
|
-
|
268
|
-
spans = ::Instana.processor.queued_spans
|
269
|
-
|
270
|
-
# Span validation
|
271
|
-
assert_equal 1, spans.count
|
272
|
-
rack_span = spans.first
|
273
|
-
|
274
|
-
assert rack_span[:data][:http].key?(:header)
|
275
|
-
assert rack_span[:data][:http][:header].key?(:"X-Capture-This")
|
276
|
-
assert !rack_span[:data][:http][:header].key?(:"X-Capture-That")
|
277
|
-
assert_equal "ThereYouGo", rack_span[:data][:http][:header][:"X-Capture-This"]
|
278
|
-
assert !rack_span.key?(:stack)
|
279
|
-
|
280
|
-
# Restore to default
|
281
|
-
::Instana.config[:collect_backtraces] = false
|
282
|
-
::Instana.agent.singleton_class.send(:remove_method, :extra_headers)
|
283
|
-
end
|
284
|
-
|
285
|
-
def test_capture_http_path_template
|
286
|
-
clear_all!
|
287
|
-
|
288
|
-
get '/path_tpl'
|
289
|
-
assert last_response.ok?
|
290
|
-
|
291
|
-
spans = ::Instana.processor.queued_spans
|
292
|
-
assert_equal 1, spans.length
|
293
|
-
|
294
|
-
rack_span = spans.first
|
295
|
-
assert_equal :rack, rack_span[:n]
|
296
|
-
assert_equal 'sample_template', rack_span[:data][:http][:path_tpl]
|
297
|
-
end
|
298
|
-
|
299
|
-
def test_basic_get_with_x_instana_synthetic
|
300
|
-
header 'X-INSTANA-SYNTHETIC', '1'
|
301
|
-
|
302
|
-
clear_all!
|
303
|
-
get '/mrlobster'
|
304
|
-
assert last_response.ok?
|
305
|
-
|
306
|
-
spans = ::Instana.processor.queued_spans
|
307
|
-
|
308
|
-
# Span validation
|
309
|
-
assert_equal 1, spans.count
|
310
|
-
|
311
|
-
first_span = spans.first
|
312
|
-
assert_equal true, first_span[:sy]
|
313
|
-
end
|
314
|
-
|
315
|
-
def test_basic_get_with_w3c_trace
|
316
|
-
clear_all!
|
317
|
-
|
318
|
-
header 'TRACEPARENT', '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
|
319
|
-
|
320
|
-
get '/mrlobster'
|
321
|
-
assert last_response.ok?
|
322
|
-
|
323
|
-
spans = ::Instana.processor.queued_spans
|
324
|
-
assert_equal 1, spans.count
|
325
|
-
|
326
|
-
first_span = spans.first
|
327
|
-
assert_equal :rack, first_span[:n]
|
328
|
-
assert_equal 'a3ce929d0e0e4736', first_span[:t]
|
329
|
-
assert_equal '00f067aa0ba902b7', first_span[:p]
|
330
|
-
assert_equal '4bf92f3577b34da6a3ce929d0e0e4736', first_span[:lt]
|
331
|
-
assert_nil first_span[:ia]
|
332
|
-
assert first_span[:tp]
|
333
|
-
end
|
334
|
-
|
335
|
-
def test_basic_get_with_w3c_disabled
|
336
|
-
clear_all!
|
337
|
-
::Instana.config[:w3c_trace_correlation] = false
|
338
|
-
|
339
|
-
header 'TRACEPARENT', '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
|
340
|
-
|
341
|
-
get '/mrlobster'
|
342
|
-
assert last_response.ok?
|
343
|
-
|
344
|
-
spans = ::Instana.processor.queued_spans
|
345
|
-
assert_equal 1, spans.count
|
346
|
-
|
347
|
-
first_span = spans.first
|
348
|
-
assert_equal :rack, first_span[:n]
|
349
|
-
refute first_span[:tp]
|
350
|
-
::Instana.config[:w3c_trace_correlation] = true
|
351
|
-
end
|
352
|
-
|
353
|
-
def test_skip_trace
|
354
|
-
clear_all!
|
355
|
-
header 'X_INSTANA_L', '0;junk'
|
356
|
-
|
357
|
-
get '/mrlobster'
|
358
|
-
assert last_response.ok?
|
359
|
-
|
360
|
-
spans = ::Instana.processor.queued_spans
|
361
|
-
assert_equal 0, spans.count
|
362
|
-
end
|
363
|
-
|
364
|
-
def test_disable_trace
|
365
|
-
clear_all!
|
366
|
-
::Instana.config[:tracing][:enabled] = false
|
367
|
-
|
368
|
-
get '/mrlobster'
|
369
|
-
assert last_response.ok?
|
370
|
-
|
371
|
-
spans = ::Instana.processor.queued_spans
|
372
|
-
assert_equal 0, spans.count
|
373
|
-
::Instana.config[:tracing][:enabled] = true
|
374
|
-
end
|
375
|
-
|
376
|
-
def test_error_trace
|
377
|
-
clear_all!
|
378
|
-
|
379
|
-
get '/error'
|
380
|
-
refute last_response.ok?
|
381
|
-
|
382
|
-
spans = ::Instana.processor.queued_spans
|
383
|
-
assert_equal 1, spans.count
|
384
|
-
|
385
|
-
first_span = spans.first
|
386
|
-
assert_equal :rack, first_span[:n]
|
387
|
-
assert_equal 1, first_span[:ec]
|
388
|
-
end
|
389
|
-
|
390
|
-
def test_disable_trace_with_error
|
391
|
-
clear_all!
|
392
|
-
::Instana.config[:tracing][:enabled] = false
|
393
|
-
|
394
|
-
get '/error'
|
395
|
-
refute last_response.ok?
|
396
|
-
|
397
|
-
spans = ::Instana.processor.queued_spans
|
398
|
-
assert_equal 0, spans.count
|
399
|
-
::Instana.config[:tracing][:enabled] = true
|
400
|
-
end
|
401
|
-
|
402
|
-
def test_five_zero_x_trace
|
403
|
-
clear_all!
|
404
|
-
|
405
|
-
get '/five_zero_one'
|
406
|
-
refute last_response.ok?
|
407
|
-
|
408
|
-
spans = ::Instana.processor.queued_spans
|
409
|
-
assert_equal 1, spans.count
|
410
|
-
|
411
|
-
first_span = spans.first
|
412
|
-
assert_equal :rack, first_span[:n]
|
413
|
-
assert_equal 1, first_span[:ec]
|
414
|
-
end
|
415
|
-
end
|
@@ -1,135 +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 'action_cable'
|
8
|
-
|
9
|
-
require 'ostruct'
|
10
|
-
require 'logger'
|
11
|
-
|
12
|
-
class RailsActionCableTest < Minitest::Test
|
13
|
-
def setup
|
14
|
-
skip unless defined?(::ActionCable::Connection::Base)
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_transmit_no_parent
|
18
|
-
clear_all!
|
19
|
-
|
20
|
-
connection = mock_connection
|
21
|
-
channel_klass = Class.new(ActionCable::Channel::Base)
|
22
|
-
|
23
|
-
channel_klass
|
24
|
-
.new(connection, :test)
|
25
|
-
.send(:transmit, 'Sample message', via: nil)
|
26
|
-
|
27
|
-
span, rest = Instana.processor.queued_spans
|
28
|
-
data = span[:data]
|
29
|
-
|
30
|
-
assert_nil rest
|
31
|
-
assert_equal :"rpc-server", span[:n]
|
32
|
-
assert_equal "rake_test_loader.rb", data[:service]
|
33
|
-
assert_equal :actioncable, data[:rpc][:flavor]
|
34
|
-
assert_equal channel_klass.to_s, data[:rpc][:call]
|
35
|
-
assert_equal :transmit, data[:rpc][:call_type]
|
36
|
-
assert_equal Socket.gethostname, data[:rpc][:host]
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_transmit_parent
|
40
|
-
clear_all!
|
41
|
-
|
42
|
-
connection = mock_connection
|
43
|
-
connection.instance_variable_set(
|
44
|
-
:@instana_trace_context,
|
45
|
-
Instana::SpanContext.new(trace_id: 'ABC', span_id: 'ABC')
|
46
|
-
)
|
47
|
-
channel_klass = Class.new(ActionCable::Channel::Base)
|
48
|
-
|
49
|
-
channel_klass
|
50
|
-
.new(connection, :test)
|
51
|
-
.send(:transmit, 'Sample message', via: 'Important')
|
52
|
-
|
53
|
-
span, rest = Instana.processor.queued_spans
|
54
|
-
data = span[:data]
|
55
|
-
|
56
|
-
assert_nil rest
|
57
|
-
assert_equal 'ABC', span[:t]
|
58
|
-
assert_equal :"rpc-server", span[:n]
|
59
|
-
assert_equal "rake_test_loader.rb", data[:service]
|
60
|
-
assert_equal :actioncable, data[:rpc][:flavor]
|
61
|
-
assert_equal channel_klass.to_s, data[:rpc][:call]
|
62
|
-
assert_equal :transmit, data[:rpc][:call_type]
|
63
|
-
assert_equal Socket.gethostname, data[:rpc][:host]
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_action_no_parent
|
67
|
-
clear_all!
|
68
|
-
|
69
|
-
connection = mock_connection
|
70
|
-
channel_klass = Class.new(ActionCable::Channel::Base) do
|
71
|
-
def sample
|
72
|
-
raise unless Instana.tracer.tracing?
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
channel_klass
|
77
|
-
.new(connection, :test)
|
78
|
-
.perform_action('action' => 'sample')
|
79
|
-
|
80
|
-
span, rest = Instana.processor.queued_spans
|
81
|
-
data = span[:data]
|
82
|
-
|
83
|
-
assert_nil rest
|
84
|
-
assert_equal :"rpc-server", span[:n]
|
85
|
-
assert_equal "rake_test_loader.rb", data[:service]
|
86
|
-
assert_equal :actioncable, data[:rpc][:flavor]
|
87
|
-
assert_equal "#{channel_klass}#sample", data[:rpc][:call]
|
88
|
-
assert_equal :action, data[:rpc][:call_type]
|
89
|
-
assert_equal Socket.gethostname, data[:rpc][:host]
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_action_parent
|
93
|
-
clear_all!
|
94
|
-
|
95
|
-
connection = mock_connection
|
96
|
-
connection.instance_variable_set(
|
97
|
-
:@instana_trace_context,
|
98
|
-
Instana::SpanContext.new(trace_id: 'ABC', span_id: 'ABC')
|
99
|
-
)
|
100
|
-
channel_klass = Class.new(ActionCable::Channel::Base) do
|
101
|
-
def sample
|
102
|
-
raise unless Instana.tracer.tracing?
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
channel_klass
|
107
|
-
.new(connection, :test)
|
108
|
-
.perform_action('action' => 'sample')
|
109
|
-
|
110
|
-
span, rest = Instana.processor.queued_spans
|
111
|
-
data = span[:data]
|
112
|
-
|
113
|
-
assert_nil rest
|
114
|
-
assert_equal 'ABC', span[:t]
|
115
|
-
assert_equal :"rpc-server", span[:n]
|
116
|
-
assert_equal "rake_test_loader.rb", data[:service]
|
117
|
-
assert_equal :actioncable, data[:rpc][:flavor]
|
118
|
-
assert_equal "#{channel_klass}#sample", data[:rpc][:call]
|
119
|
-
assert_equal :action, data[:rpc][:call_type]
|
120
|
-
assert_equal Socket.gethostname, data[:rpc][:host]
|
121
|
-
end
|
122
|
-
|
123
|
-
private
|
124
|
-
|
125
|
-
def mock_connection
|
126
|
-
server = OpenStruct.new(
|
127
|
-
logger: Logger.new('/dev/null'),
|
128
|
-
worker_pool: nil,
|
129
|
-
config: OpenStruct.new(log_tags: [])
|
130
|
-
)
|
131
|
-
connection = ActionCable::Connection::Base.new(server, {})
|
132
|
-
connection.define_singleton_method(:transmit) { |*_args, **_kwargs| true }
|
133
|
-
connection
|
134
|
-
end
|
135
|
-
end
|