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.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/lib/instana/setup.rb +1 -0
  3. data/lib/instana/span_filtering/condition.rb +134 -0
  4. data/lib/instana/span_filtering/configuration.rb +262 -0
  5. data/lib/instana/span_filtering/filter_rule.rb +31 -0
  6. data/lib/instana/span_filtering.rb +62 -0
  7. data/lib/instana/trace/span.rb +5 -3
  8. data/lib/instana/version.rb +1 -1
  9. metadata +7 -258
  10. data/.circleci/config.yml +0 -361
  11. data/.codeclimate.yml +0 -23
  12. data/.editorconfig +0 -10
  13. data/.fasterer.yml +0 -23
  14. data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
  15. data/.github/ISSUE_TEMPLATE/config.yml +0 -8
  16. data/.github/workflows/pr_commits_signed_off.yml +0 -16
  17. data/.github/workflows/release-notification-on-slack.yml +0 -34
  18. data/.gitignore +0 -19
  19. data/.rubocop.yml +0 -34
  20. data/.rubocop_todo.yml +0 -1140
  21. data/.tekton/.currency/docs/report.md +0 -20
  22. data/.tekton/.currency/resources/requirements.txt +0 -4
  23. data/.tekton/.currency/resources/table.json +0 -100
  24. data/.tekton/.currency/scripts/generate_report.py +0 -308
  25. data/.tekton/README.md +0 -278
  26. data/.tekton/github-interceptor-secret.yaml +0 -8
  27. data/.tekton/github-pr-eventlistener.yaml +0 -104
  28. data/.tekton/github-pr-pipeline.yaml.part +0 -38
  29. data/.tekton/github-set-status-task.yaml +0 -43
  30. data/.tekton/github-webhook-ingress.yaml +0 -20
  31. data/.tekton/pipeline.yaml +0 -484
  32. data/.tekton/pipelinerun.yaml +0 -21
  33. data/.tekton/prepuller-restart-service-account.yaml +0 -31
  34. data/.tekton/ruby-tracer-prepuller-cronjob.yaml +0 -20
  35. data/.tekton/ruby-tracer-prepuller.yaml +0 -88
  36. data/.tekton/run_unittests.sh +0 -87
  37. data/.tekton/scheduled-eventlistener.yaml +0 -108
  38. data/.tekton/task.yaml +0 -453
  39. data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
  40. data/Appraisals +0 -124
  41. data/CONTRIBUTING.md +0 -86
  42. data/Gemfile +0 -22
  43. data/LICENSE +0 -22
  44. data/MAINTAINERS.md +0 -3
  45. data/Rakefile +0 -49
  46. data/bin/announce_release_on_slack.py +0 -103
  47. data/docker-compose.yml +0 -20
  48. data/download.sh +0 -85
  49. data/examples/otel.rb +0 -98
  50. data/examples/tracing.rb +0 -85
  51. data/extras/license_header.rb +0 -44
  52. data/gemfiles/.bundle/config +0 -2
  53. data/gemfiles/aws_30.gemfile +0 -21
  54. data/gemfiles/aws_60.gemfile +0 -16
  55. data/gemfiles/cuba_30.gemfile +0 -16
  56. data/gemfiles/cuba_40.gemfile +0 -13
  57. data/gemfiles/dalli_20.gemfile +0 -15
  58. data/gemfiles/dalli_30.gemfile +0 -12
  59. data/gemfiles/dalli_32.gemfile +0 -12
  60. data/gemfiles/excon_0100.gemfile +0 -14
  61. data/gemfiles/excon_021.gemfile +0 -17
  62. data/gemfiles/excon_079.gemfile +0 -17
  63. data/gemfiles/excon_100.gemfile +0 -14
  64. data/gemfiles/graphql_10.gemfile +0 -16
  65. data/gemfiles/graphql_20.gemfile +0 -15
  66. data/gemfiles/grpc_10.gemfile +0 -15
  67. data/gemfiles/mongo_216.gemfile +0 -15
  68. data/gemfiles/mongo_219.gemfile +0 -12
  69. data/gemfiles/net_http_01.gemfile +0 -17
  70. data/gemfiles/rack_16.gemfile +0 -15
  71. data/gemfiles/rack_20.gemfile +0 -15
  72. data/gemfiles/rack_30.gemfile +0 -13
  73. data/gemfiles/rails_42.gemfile +0 -18
  74. data/gemfiles/rails_50.gemfile +0 -19
  75. data/gemfiles/rails_52.gemfile +0 -19
  76. data/gemfiles/rails_60.gemfile +0 -19
  77. data/gemfiles/rails_61.gemfile +0 -21
  78. data/gemfiles/rails_70.gemfile +0 -18
  79. data/gemfiles/rails_71.gemfile +0 -17
  80. data/gemfiles/rails_80.gemfile +0 -17
  81. data/gemfiles/redis_40.gemfile +0 -15
  82. data/gemfiles/redis_50.gemfile +0 -13
  83. data/gemfiles/redis_51.gemfile +0 -13
  84. data/gemfiles/resque_122.gemfile +0 -16
  85. data/gemfiles/resque_1274_3scale.gemfile +0 -17
  86. data/gemfiles/resque_20.gemfile +0 -16
  87. data/gemfiles/rest_client_16.gemfile +0 -17
  88. data/gemfiles/rest_client_20.gemfile +0 -17
  89. data/gemfiles/roda_20.gemfile +0 -16
  90. data/gemfiles/roda_30.gemfile +0 -16
  91. data/gemfiles/rubocop_162.gemfile +0 -6
  92. data/gemfiles/sequel_56.gemfile +0 -16
  93. data/gemfiles/sequel_57.gemfile +0 -16
  94. data/gemfiles/sequel_58.gemfile +0 -16
  95. data/gemfiles/shoryuken_50.gemfile +0 -16
  96. data/gemfiles/shoryuken_60.gemfile +0 -13
  97. data/gemfiles/sidekiq_42.gemfile +0 -15
  98. data/gemfiles/sidekiq_50.gemfile +0 -15
  99. data/gemfiles/sidekiq_60.gemfile +0 -12
  100. data/gemfiles/sidekiq_65.gemfile +0 -12
  101. data/gemfiles/sidekiq_70.gemfile +0 -12
  102. data/gemfiles/sinatra_14.gemfile +0 -15
  103. data/gemfiles/sinatra_22.gemfile +0 -12
  104. data/gemfiles/sinatra_30.gemfile +0 -12
  105. data/gemfiles/sinatra_40.gemfile +0 -12
  106. data/instana.gemspec +0 -53
  107. data/log/.keep +0 -0
  108. data/sonar-project.properties +0 -9
  109. data/test/activator_test.rb +0 -50
  110. data/test/backend/agent_test.rb +0 -80
  111. data/test/backend/gc_snapshot_test.rb +0 -11
  112. data/test/backend/host_agent_activation_observer_test.rb +0 -73
  113. data/test/backend/host_agent_lookup_test.rb +0 -78
  114. data/test/backend/host_agent_reporting_observer_test.rb +0 -276
  115. data/test/backend/host_agent_test.rb +0 -89
  116. data/test/backend/process_info_test.rb +0 -83
  117. data/test/backend/request_client_test.rb +0 -39
  118. data/test/backend/serverless_agent_test.rb +0 -83
  119. data/test/benchmarks/bench_id_generation.rb +0 -15
  120. data/test/benchmarks/bench_opentracing.rb +0 -16
  121. data/test/config_test.rb +0 -34
  122. data/test/frameworks/cuba_test.rb +0 -61
  123. data/test/frameworks/roda_test.rb +0 -60
  124. data/test/frameworks/sinatra_test.rb +0 -71
  125. data/test/instana_test.rb +0 -37
  126. data/test/instrumentation/aws_test.rb +0 -241
  127. data/test/instrumentation/dalli_test.rb +0 -325
  128. data/test/instrumentation/excon_test.rb +0 -204
  129. data/test/instrumentation/graphql_test.rb +0 -289
  130. data/test/instrumentation/grpc_test.rb +0 -420
  131. data/test/instrumentation/mongo_test.rb +0 -68
  132. data/test/instrumentation/net_http_test.rb +0 -220
  133. data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
  134. data/test/instrumentation/rack_test.rb +0 -415
  135. data/test/instrumentation/rails_action_cable_test.rb +0 -135
  136. data/test/instrumentation/rails_action_controller_test.rb +0 -218
  137. data/test/instrumentation/rails_action_mailer_test.rb +0 -66
  138. data/test/instrumentation/rails_action_view_test.rb +0 -154
  139. data/test/instrumentation/rails_active_job_test.rb +0 -65
  140. data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -44
  141. data/test/instrumentation/rails_active_record_test.rb +0 -116
  142. data/test/instrumentation/redis_test.rb +0 -152
  143. data/test/instrumentation/resque_test.rb +0 -188
  144. data/test/instrumentation/rest_client_test.rb +0 -106
  145. data/test/instrumentation/sequel_test.rb +0 -111
  146. data/test/instrumentation/shoryuken_test.rb +0 -47
  147. data/test/instrumentation/sidekiq-client_test.rb +0 -169
  148. data/test/instrumentation/sidekiq-worker_test.rb +0 -180
  149. data/test/secrets_test.rb +0 -112
  150. data/test/serverless_test.rb +0 -369
  151. data/test/snapshot/deltable_test.rb +0 -17
  152. data/test/snapshot/docker_container_test.rb +0 -82
  153. data/test/snapshot/fargate_container_test.rb +0 -82
  154. data/test/snapshot/fargate_process_test.rb +0 -35
  155. data/test/snapshot/fargate_task_test.rb +0 -49
  156. data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
  157. data/test/snapshot/google_cloud_run_process_test.rb +0 -33
  158. data/test/snapshot/lambda_function_test.rb +0 -37
  159. data/test/snapshot/ruby_process_test.rb +0 -32
  160. data/test/support/apps/active_record/active_record.rb +0 -24
  161. data/test/support/apps/grpc/boot.rb +0 -23
  162. data/test/support/apps/grpc/grpc_server.rb +0 -84
  163. data/test/support/apps/http_endpoint/boot.rb +0 -28
  164. data/test/support/apps/rails/boot.rb +0 -219
  165. data/test/support/apps/rails/models/block.rb +0 -21
  166. data/test/support/apps/rails/models/block6.rb +0 -21
  167. data/test/support/apps/resque/boot.rb +0 -5
  168. data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
  169. data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
  170. data/test/support/apps/sidekiq/boot.rb +0 -25
  171. data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
  172. data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
  173. data/test/support/apps/sidekiq/worker.rb +0 -37
  174. data/test/support/helpers.rb +0 -85
  175. data/test/support/mock_timer.rb +0 -20
  176. data/test/test_helper.rb +0 -69
  177. data/test/trace/custom_test.rb +0 -233
  178. data/test/trace/id_management_test.rb +0 -78
  179. data/test/trace/instrumented_logger_test.rb +0 -39
  180. data/test/trace/processor_test.rb +0 -58
  181. data/test/trace/span_context_test.rb +0 -22
  182. data/test/trace/span_test.rb +0 -179
  183. data/test/trace/tracer_async_test.rb +0 -243
  184. data/test/trace/tracer_provider_test.rb +0 -148
  185. data/test/trace/tracer_test.rb +0 -363
  186. data/test/util_test.rb +0 -10
@@ -1,68 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class MongoTest < Minitest::Test
7
- def setup
8
- clear_all!
9
- end
10
-
11
- def teardown
12
- ::Instana.config[:allow_exit_as_root] = false
13
- end
14
-
15
- def test_mongo
16
- Instana.tracer.in_span(:'mongo-test') do
17
- client = Mongo::Client.new('mongodb://127.0.0.1:27017/instana')
18
- client[:people].delete_many({ name: /$S*/ })
19
- client[:people].insert_many([{ _id: 1, name: "Stan" }])
20
- end
21
-
22
- spans = ::Instana.processor.queued_spans
23
- delete_span, insert_span, = spans
24
-
25
- delete_data = delete_span[:data][:mongo]
26
- insert_data = insert_span[:data][:mongo]
27
-
28
- assert_equal delete_span[:n], :mongo
29
- assert_equal insert_span[:n], :mongo
30
-
31
- assert_equal delete_data[:namespace], "instana"
32
- assert_equal delete_data[:command], "delete"
33
- assert_equal delete_data[:peer], {hostname: "127.0.0.1", port: 27017}
34
- assert delete_data[:json].include?("delete")
35
-
36
- assert_equal insert_data[:namespace], "instana"
37
- assert_equal insert_data[:command], "insert"
38
- assert_equal insert_data[:peer], {hostname: "127.0.0.1", port: 27017}
39
- assert insert_data[:json].include?("insert")
40
- end
41
-
42
- def test_mongo_as_root_exit_span
43
- ::Instana.config[:allow_exit_as_root] = true
44
-
45
- client = Mongo::Client.new('mongodb://127.0.0.1:27017/instana')
46
- client[:people].delete_many({ name: /$S*/ })
47
- client[:people].insert_many([{ _id: 1, name: "Stan" }])
48
-
49
- spans = ::Instana.processor.queued_spans
50
- delete_span, insert_span, = spans
51
-
52
- delete_data = delete_span[:data][:mongo]
53
- insert_data = insert_span[:data][:mongo]
54
-
55
- assert_equal delete_span[:n], :mongo
56
- assert_equal insert_span[:n], :mongo
57
-
58
- assert_equal delete_data[:namespace], "instana"
59
- assert_equal delete_data[:command], "delete"
60
- assert_equal delete_data[:peer], {hostname: "127.0.0.1", port: 27017}
61
- assert delete_data[:json].include?("delete")
62
-
63
- assert_equal insert_data[:namespace], "instana"
64
- assert_equal insert_data[:command], "insert"
65
- assert_equal insert_data[:peer], {hostname: "127.0.0.1", port: 27017}
66
- assert insert_data[:json].include?("insert")
67
- end
68
- end
@@ -1,220 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2016
3
-
4
- require 'test_helper'
5
- require 'support/apps/http_endpoint/boot'
6
-
7
- class NetHTTPTest < Minitest::Test
8
- def teardown
9
- ::Instana.config[:allow_exit_as_root] = false
10
- end
11
-
12
- def test_config_defaults
13
- assert ::Instana.config[:nethttp].is_a?(Hash)
14
- assert ::Instana.config[:nethttp].key?(:enabled)
15
- assert_equal true, ::Instana.config[:nethttp][:enabled]
16
- end
17
-
18
- def test_get_with_query
19
- clear_all!
20
- WebMock.allow_net_connect!
21
-
22
- Instana.tracer.in_span(:"net-http-test") do
23
- Net::HTTP.get(URI('http://127.0.0.1:6511/?query_value=true'))
24
- end
25
-
26
- spans = ::Instana.processor.queued_spans
27
- assert_equal 3, spans.length
28
-
29
- http_span = find_first_span_by_name(spans, :'net-http')
30
- assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
31
- assert_equal "query_value=true", http_span[:data][:http][:params]
32
-
33
- WebMock.disable_net_connect!
34
- end
35
-
36
- def test_get_without_query
37
- clear_all!
38
- WebMock.allow_net_connect!
39
-
40
- Instana.tracer.in_span(:"net-http-test") do
41
- Net::HTTP.get(URI('http://127.0.0.1:6511/'))
42
- end
43
-
44
- spans = ::Instana.processor.queued_spans
45
- assert_equal 3, spans.length
46
-
47
- http_span = find_first_span_by_name(spans, :'net-http')
48
- assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
49
- assert_equal "200", http_span[:data][:http][:status]
50
-
51
- WebMock.disable_net_connect!
52
- end
53
-
54
- def test_get_without_query_as_root_exit_span
55
- clear_all!
56
- ::Instana.config[:allow_exit_as_root] = true
57
- WebMock.allow_net_connect!
58
- Net::HTTP.get(URI('http://127.0.0.1:6511/'))
59
-
60
- spans = ::Instana.processor.queued_spans
61
- assert_equal 2, spans.length # 1 rack span from the endpoint is generated extra
62
-
63
- http_span = find_first_span_by_name(spans, :'net-http')
64
- assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
65
- assert_equal "200", http_span[:data][:http][:status]
66
-
67
- WebMock.disable_net_connect!
68
- end
69
-
70
- def test_block_request
71
- clear_all!
72
- WebMock.allow_net_connect!
73
- url = "http://127.0.0.1:6511/"
74
-
75
- uri = URI.parse(url)
76
- req = Net::HTTP::Get.new(uri)
77
-
78
- response = nil
79
- Instana.tracer.in_span('net-http-test') do
80
- Net::HTTP.start(req.uri.hostname, req.uri.port, :open_timeout => 1, :read_timeout => 1) do |http|
81
- response = http.request(req)
82
- end
83
- end
84
-
85
- spans = ::Instana.processor.queued_spans
86
- assert_equal 3, spans.length
87
-
88
- rs_span = find_first_span_by_name(spans, :rack)
89
- first_span = find_first_span_by_name(spans, :'net-http-test')
90
- second_span = find_first_span_by_name(spans, :'net-http')
91
-
92
- # Span name validation
93
- assert_equal :sdk, first_span[:n]
94
- assert_equal :'net-http', second_span[:n]
95
-
96
- # first_span is the parent of second_span
97
- assert_equal first_span[:s], second_span[:p]
98
-
99
- # data keys/values
100
- refute_nil second_span.key?(:data)
101
- refute_nil second_span[:data].key?(:http)
102
- assert_equal "http://127.0.0.1:6511/", second_span[:data][:http][:url]
103
- assert_equal "200", second_span[:data][:http][:status]
104
- assert !second_span.key?(:stack)
105
-
106
- # Rack server trace should have the same trace ID
107
- assert_equal rs_span[:t], first_span[:t]
108
- assert_equal first_span[:t], second_span[:t]
109
-
110
- # Rack server trace should have net-http has parent span
111
- assert_equal second_span[:s], rs_span[:p]
112
-
113
- WebMock.disable_net_connect!
114
- end
115
-
116
- def test_basic_post_without_uri
117
- clear_all!
118
- WebMock.allow_net_connect!
119
-
120
- response = nil
121
- Instana.tracer.in_span('net-http-test') do
122
- http = Net::HTTP.new("127.0.0.1", 6511)
123
- response = http.request(Net::HTTP::Post.new("/"))
124
- end
125
-
126
- spans = ::Instana.processor.queued_spans
127
- assert_equal 3, spans.length
128
-
129
- rack_span = find_first_span_by_name(spans, :rack)
130
- sdk_span = find_first_span_by_name(spans, :'net-http-test')
131
- http_span = find_first_span_by_name(spans, :'net-http')
132
-
133
- # Span name validation
134
- assert_equal :sdk, sdk_span[:n]
135
- assert_equal :'net-http', http_span[:n]
136
-
137
- # first_span is the parent of second_span
138
- assert_equal sdk_span[:s], http_span[:p]
139
-
140
- # data keys/values
141
- refute_nil http_span.key?(:data)
142
- refute_nil http_span[:data].key?(:http)
143
- assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
144
- assert_equal "200", http_span[:data][:http][:status]
145
- assert !http_span.key?(:stack)
146
-
147
- # Rack server trace should have the same trace ID
148
- assert_equal rack_span[:t], sdk_span[:t]
149
- assert_equal sdk_span[:t], http_span[:t]
150
-
151
- # Rack server trace should have net-http has parent span
152
- assert_equal http_span[:s], rack_span[:p]
153
-
154
- WebMock.disable_net_connect!
155
- end
156
-
157
- def test_request_with_dns_error
158
- clear_all!
159
- WebMock.allow_net_connect!
160
-
161
- begin
162
- Instana.tracer.in_span('net-http-error-test') do
163
- http = Net::HTTP.new("asdfasdf.asdfsadf", 80)
164
- http.request(Net::HTTP::Get.new("/blah"))
165
- end
166
- rescue Exception
167
- nil
168
- end
169
-
170
- spans = ::Instana.processor.queued_spans
171
- assert_equal 1, spans.length
172
-
173
- first_span = spans.first
174
-
175
- assert_equal :sdk, first_span[:n]
176
- assert_equal :'net-http-error-test', first_span[:data][:sdk][:name]
177
- assert_equal true, first_span[:error]
178
- assert_equal 1, first_span[:ec]
179
- ts_key = first_span[:data][:sdk][:custom][:logs].keys.first
180
- assert first_span[:data][:sdk][:custom][:logs].key?(ts_key)
181
- assert first_span[:data][:sdk][:custom][:logs][ts_key].key?(:event)
182
- assert first_span[:data][:sdk][:custom][:logs][ts_key].key?(:parameters)
183
-
184
- WebMock.disable_net_connect!
185
- end
186
-
187
- def test_request_with_5xx_response
188
- clear_all!
189
- WebMock.allow_net_connect!
190
-
191
- response = nil
192
- Instana.tracer.in_span('net-http-error-test') do
193
- http = Net::HTTP.new("127.0.0.1", 6511)
194
- response = http.request(Net::HTTP::Get.new("/error"))
195
- end
196
-
197
- spans = ::Instana.processor.queued_spans
198
- assert_equal 3, spans.length
199
-
200
- rack_span = find_first_span_by_name(spans, :rack)
201
- sdk_span = find_first_span_by_name(spans, :'net-http-error-test')
202
- http_span = find_first_span_by_name(spans, :'net-http')
203
-
204
- assert_equal :sdk, sdk_span[:n]
205
- assert_equal :'net-http-error-test', sdk_span[:data][:sdk][:name]
206
- assert_nil sdk_span[:error]
207
- assert_nil sdk_span[:ec]
208
-
209
- refute_nil http_span.key?(:data)
210
- refute_nil http_span[:data].key?(:http)
211
- assert_equal "http://127.0.0.1:6511/error", http_span[:data][:http][:url]
212
- assert_equal "500", http_span[:data][:http][:status]
213
- assert_equal :'net-http', http_span[:n]
214
- assert !http_span.key?(:stack)
215
- assert_equal true, http_span[:error]
216
- assert_equal 1, http_span[:ec]
217
-
218
- WebMock.disable_net_connect!
219
- end
220
- end
@@ -1,211 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class RackInstrumentedRequestTest < Minitest::Test
7
- def test_suppression_via_x_instana_l
8
- req = Instana::InstrumentedRequest.new(
9
- 'HTTP_X_INSTANA_L' => '0'
10
- )
11
-
12
- assert req.skip_trace?
13
- end
14
-
15
- def test_suppression_via_x_instana_l_with_trailing_content
16
- req = Instana::InstrumentedRequest.new(
17
- 'HTTP_X_INSTANA_L' => '0;sample-data'
18
- )
19
-
20
- assert req.skip_trace?
21
- end
22
-
23
- def test_no_suppression_assume_level_1_as_default
24
- req = Instana::InstrumentedRequest.new({})
25
-
26
- assert !req.skip_trace?
27
- end
28
-
29
- def test_no_suppression_when_x_instana_l_is_provided_explicitly
30
- req = Instana::InstrumentedRequest.new(
31
- 'HTTP_X_INSTANA_L' => '1'
32
- )
33
-
34
- assert !req.skip_trace?
35
- end
36
-
37
- def test_skip_trace_without_header
38
- req = Instana::InstrumentedRequest.new({})
39
-
40
- refute req.skip_trace?
41
- end
42
-
43
- def test_incoming_context
44
- id = Instana::Util.generate_id
45
- req = Instana::InstrumentedRequest.new(
46
- 'HTTP_X_INSTANA_L' => '1',
47
- 'HTTP_X_INSTANA_T' => id,
48
- 'HTTP_X_INSTANA_S' => id
49
- )
50
-
51
- expected = {
52
- trace_id: id,
53
- span_id: id,
54
- from_w3c: false,
55
- level: '1'
56
- }
57
-
58
- assert_equal expected, req.incoming_context
59
- refute req.continuing_from_trace_parent?
60
- end
61
-
62
- def test_incoming_w3c_context
63
- req = Instana::InstrumentedRequest.new(
64
- 'HTTP_TRACEPARENT' => '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
65
- )
66
-
67
- expected = {
68
- external_trace_id: '4bf92f3577b34da6a3ce929d0e0e4736',
69
- external_state: nil,
70
- trace_id: 'a3ce929d0e0e4736',
71
- span_id: '00f067aa0ba902b7',
72
- from_w3c: true
73
- }
74
-
75
- assert_equal expected, req.incoming_context
76
- assert req.continuing_from_trace_parent?
77
- end
78
-
79
- def test_incoming_w3c_context_newer_version_additional_fields
80
- req = Instana::InstrumentedRequest.new(
81
- 'HTTP_TRACEPARENT' => 'fe-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01-abcdefg'
82
- )
83
-
84
- expected = {
85
- external_trace_id: '4bf92f3577b34da6a3ce929d0e0e4736',
86
- external_state: nil,
87
- trace_id: 'a3ce929d0e0e4736',
88
- span_id: '00f067aa0ba902b7',
89
- from_w3c: true
90
- }
91
-
92
- assert_equal expected, req.incoming_context
93
- assert req.continuing_from_trace_parent?
94
- end
95
-
96
- def test_incoming_w3c_context_unknown_flags
97
- req = Instana::InstrumentedRequest.new(
98
- 'HTTP_TRACEPARENT' => '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-ff'
99
- )
100
-
101
- expected = {
102
- external_trace_id: '4bf92f3577b34da6a3ce929d0e0e4736',
103
- external_state: nil,
104
- trace_id: 'a3ce929d0e0e4736',
105
- span_id: '00f067aa0ba902b7',
106
- from_w3c: true
107
- }
108
-
109
- assert_equal expected, req.incoming_context
110
- assert req.continuing_from_trace_parent?
111
- end
112
-
113
- def test_incoming_w3c_context_invalid_version
114
- req = Instana::InstrumentedRequest.new(
115
- 'HTTP_TRACEPARENT' => 'ff-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
116
- )
117
-
118
- expected = {}
119
-
120
- assert_equal expected, req.incoming_context
121
- refute req.continuing_from_trace_parent?
122
- end
123
-
124
- def test_incoming_w3c_context_invalid_id
125
- req = Instana::InstrumentedRequest.new(
126
- 'HTTP_TRACEPARENT' => '00-00000000000000000000000000000000-0000000000000000-01'
127
- )
128
-
129
- expected = {}
130
-
131
- assert_equal expected, req.incoming_context
132
- refute req.continuing_from_trace_parent?
133
- end
134
-
135
- def test_incoming_invalid_w3c_context
136
- req = Instana::InstrumentedRequest.new(
137
- 'HTTP_TRACEPARENT' => '00-XXa3ce929d0e0e4736-00f67aa0ba902b7-01'
138
- )
139
-
140
- expected = {}
141
-
142
- assert_equal expected, req.incoming_context
143
- refute req.continuing_from_trace_parent?
144
- end
145
-
146
- def test_incoming_w3c_state
147
- req = Instana::InstrumentedRequest.new(
148
- 'HTTP_TRACESTATE' => 'a=12345,in=123;abe,c=[+]'
149
- )
150
-
151
- expected = {
152
- t: '123',
153
- p: 'abe'
154
- }
155
-
156
- assert_equal expected, req.instana_ancestor
157
- end
158
-
159
- def test_request_tags
160
- ::Instana.agent.define_singleton_method(:extra_headers) { %w[X-Capture-This] }
161
-
162
- req = Instana::InstrumentedRequest.new(
163
- 'HTTP_HOST' => 'example.com',
164
- 'REQUEST_METHOD' => 'GET',
165
- 'HTTP_X_CAPTURE_THIS' => 'that',
166
- 'PATH_INFO' => '/',
167
- 'QUERY_STRING' => 'test=true'
168
- )
169
-
170
- expected = {
171
- method: 'GET',
172
- url: '/',
173
- host: 'example.com',
174
- header: {
175
- "X-Capture-This": 'that'
176
- },
177
- params: 'test=true'
178
- }
179
-
180
- assert_equal expected, req.request_tags
181
- ::Instana.agent.singleton_class.send(:remove_method, :extra_headers)
182
- end
183
-
184
- def test_correlation_data_valid
185
- req = Instana::InstrumentedRequest.new(
186
- 'HTTP_X_INSTANA_L' => '1,correlationType=web ;correlationId=1234567890abcdef'
187
- )
188
- expected = {
189
- type: 'web',
190
- id: '1234567890abcdef'
191
- }
192
-
193
- assert_equal expected, req.correlation_data
194
- end
195
-
196
- def test_correlation_data_invalid
197
- req = Instana::InstrumentedRequest.new(
198
- 'HTTP_X_INSTANA_L' => '0;sample-data'
199
- )
200
-
201
- assert_equal({}, req.correlation_data)
202
- end
203
-
204
- def test_correlation_data_legacy
205
- req = Instana::InstrumentedRequest.new(
206
- 'HTTP_X_INSTANA_L' => '1'
207
- )
208
-
209
- assert_equal({}, req.correlation_data)
210
- end
211
- end