instana 1.10.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +23 -0
  3. data/.gitignore +16 -0
  4. data/.rubocop.yml +1156 -0
  5. data/.travis.yml +43 -0
  6. data/Configuration.md +149 -0
  7. data/Dockerfile +13 -0
  8. data/Gemfile +41 -0
  9. data/LICENSE +21 -0
  10. data/README.md +102 -0
  11. data/Rakefile +56 -0
  12. data/Tracing.md +145 -0
  13. data/Troubleshooting.md +32 -0
  14. data/benchmarks/Gemfile +7 -0
  15. data/benchmarks/id_generation.rb +12 -0
  16. data/benchmarks/opentracing.rb +26 -0
  17. data/benchmarks/rack_vanilla_vs_traced.rb +80 -0
  18. data/benchmarks/stackprof_rack_tracing.rb +77 -0
  19. data/benchmarks/time_processing.rb +12 -0
  20. data/bin/console +7 -0
  21. data/bin/setup +8 -0
  22. data/examples/opentracing.rb +31 -0
  23. data/examples/tracing.rb +80 -0
  24. data/gemfiles/libraries.gemfile +71 -0
  25. data/gemfiles/rails32.gemfile +51 -0
  26. data/gemfiles/rails42.gemfile +50 -0
  27. data/gemfiles/rails50.gemfile +52 -0
  28. data/instana.gemspec +46 -0
  29. data/lib/instana.rb +12 -0
  30. data/lib/instana/agent.rb +441 -0
  31. data/lib/instana/agent/helpers.rb +61 -0
  32. data/lib/instana/agent/hooks.rb +37 -0
  33. data/lib/instana/agent/tasks.rb +48 -0
  34. data/lib/instana/base.rb +54 -0
  35. data/lib/instana/collector.rb +116 -0
  36. data/lib/instana/collectors/gc.rb +57 -0
  37. data/lib/instana/collectors/memory.rb +34 -0
  38. data/lib/instana/collectors/thread.rb +30 -0
  39. data/lib/instana/config.rb +79 -0
  40. data/lib/instana/eum/eum-test.js.erb +16 -0
  41. data/lib/instana/eum/eum.js.erb +14 -0
  42. data/lib/instana/frameworks/cuba.rb +6 -0
  43. data/lib/instana/frameworks/instrumentation/abstract_mysql_adapter.rb +58 -0
  44. data/lib/instana/frameworks/instrumentation/action_controller.rb +183 -0
  45. data/lib/instana/frameworks/instrumentation/action_view.rb +43 -0
  46. data/lib/instana/frameworks/instrumentation/active_record.rb +27 -0
  47. data/lib/instana/frameworks/instrumentation/mysql2_adapter.rb +81 -0
  48. data/lib/instana/frameworks/instrumentation/mysql_adapter.rb +56 -0
  49. data/lib/instana/frameworks/instrumentation/postgresql_adapter.rb +71 -0
  50. data/lib/instana/frameworks/rails.rb +42 -0
  51. data/lib/instana/frameworks/roda.rb +6 -0
  52. data/lib/instana/frameworks/sinatra.rb +9 -0
  53. data/lib/instana/helpers.rb +40 -0
  54. data/lib/instana/instrumentation.rb +21 -0
  55. data/lib/instana/instrumentation/dalli.rb +78 -0
  56. data/lib/instana/instrumentation/excon.rb +74 -0
  57. data/lib/instana/instrumentation/grpc.rb +84 -0
  58. data/lib/instana/instrumentation/net-http.rb +66 -0
  59. data/lib/instana/instrumentation/rack.rb +77 -0
  60. data/lib/instana/instrumentation/redis.rb +82 -0
  61. data/lib/instana/instrumentation/resque.rb +131 -0
  62. data/lib/instana/instrumentation/rest-client.rb +34 -0
  63. data/lib/instana/instrumentation/sidekiq-client.rb +45 -0
  64. data/lib/instana/instrumentation/sidekiq-worker.rb +54 -0
  65. data/lib/instana/opentracing/carrier.rb +4 -0
  66. data/lib/instana/opentracing/tracer.rb +18 -0
  67. data/lib/instana/rack.rb +10 -0
  68. data/lib/instana/setup.rb +36 -0
  69. data/lib/instana/test.rb +40 -0
  70. data/lib/instana/thread_local.rb +15 -0
  71. data/lib/instana/tracer.rb +392 -0
  72. data/lib/instana/tracing/processor.rb +92 -0
  73. data/lib/instana/tracing/span.rb +401 -0
  74. data/lib/instana/tracing/span_context.rb +33 -0
  75. data/lib/instana/util.rb +261 -0
  76. data/lib/instana/version.rb +4 -0
  77. data/lib/oj_check.rb +16 -0
  78. data/lib/opentracing.rb +6 -0
  79. data/test/agent/agent_test.rb +143 -0
  80. data/test/apps/cuba.rb +15 -0
  81. data/test/apps/grpc_server.rb +81 -0
  82. data/test/apps/roda.rb +10 -0
  83. data/test/apps/sinatra.rb +5 -0
  84. data/test/benchmarks/bench_id_generation.rb +12 -0
  85. data/test/benchmarks/bench_opentracing.rb +13 -0
  86. data/test/config_test.rb +37 -0
  87. data/test/frameworks/cuba_test.rb +44 -0
  88. data/test/frameworks/rack_test.rb +167 -0
  89. data/test/frameworks/rails/actioncontroller_test.rb +93 -0
  90. data/test/frameworks/rails/actionview3_test.rb +255 -0
  91. data/test/frameworks/rails/actionview4_test.rb +254 -0
  92. data/test/frameworks/rails/actionview5_test.rb +221 -0
  93. data/test/frameworks/rails/activerecord3_test.rb +134 -0
  94. data/test/frameworks/rails/activerecord4_test.rb +134 -0
  95. data/test/frameworks/rails/activerecord5_test.rb +87 -0
  96. data/test/frameworks/roda_test.rb +44 -0
  97. data/test/frameworks/sinatra_test.rb +44 -0
  98. data/test/instana_test.rb +27 -0
  99. data/test/instrumentation/dalli_test.rb +253 -0
  100. data/test/instrumentation/excon_test.rb +147 -0
  101. data/test/instrumentation/grpc_test.rb +377 -0
  102. data/test/instrumentation/net-http_test.rb +160 -0
  103. data/test/instrumentation/redis_test.rb +119 -0
  104. data/test/instrumentation/resque_test.rb +128 -0
  105. data/test/instrumentation/rest-client_test.rb +55 -0
  106. data/test/instrumentation/sidekiq-client_test.rb +125 -0
  107. data/test/instrumentation/sidekiq-worker_test.rb +173 -0
  108. data/test/jobs/resque_error_job.rb +22 -0
  109. data/test/jobs/resque_fast_job.rb +20 -0
  110. data/test/jobs/sidekiq_job_1.rb +6 -0
  111. data/test/jobs/sidekiq_job_2.rb +7 -0
  112. data/test/models/block.rb +18 -0
  113. data/test/servers/grpc_50051.rb +20 -0
  114. data/test/servers/helpers/sidekiq_worker_initializer.rb +27 -0
  115. data/test/servers/rackapp_6511.rb +25 -0
  116. data/test/servers/rails_3205.rb +167 -0
  117. data/test/servers/sidekiq/worker.rb +27 -0
  118. data/test/test_helper.rb +145 -0
  119. data/test/tracing/custom_test.rb +158 -0
  120. data/test/tracing/id_management_test.rb +130 -0
  121. data/test/tracing/opentracing_test.rb +335 -0
  122. data/test/tracing/trace_test.rb +67 -0
  123. data/test/tracing/tracer_async_test.rb +198 -0
  124. data/test/tracing/tracer_test.rb +223 -0
  125. metadata +327 -0
@@ -0,0 +1,130 @@
1
+
2
+ require 'test_helper'
3
+
4
+ class TracerIDMgmtTest < Minitest::Test
5
+ def test_id_to_header_conversion
6
+ # Test passing a standard Integer ID
7
+ original_id = ::Instana::Util.generate_id
8
+ converted_id = Instana::Util.id_to_header(original_id)
9
+
10
+ # Assert that it is a string and there are no non-hex characters
11
+ assert converted_id.is_a?(String)
12
+ assert !converted_id[/\H/]
13
+
14
+ # Test passing a standard Integer ID as a String
15
+ original_id = ::Instana::Util.generate_id
16
+ converted_id = Instana::Util.id_to_header(original_id)
17
+
18
+ # Assert that it is a string and there are no non-hex characters
19
+ assert converted_id.is_a?(String)
20
+ assert !converted_id[/\H/]
21
+ end
22
+
23
+ def test_id_to_header_conversion_with_bogus_id
24
+ # Test passing an empty String
25
+ converted_id = Instana::Util.id_to_header('')
26
+
27
+ # Assert that it is a string and there are no non-hex characters
28
+ assert converted_id.is_a?(String)
29
+ assert converted_id == ''
30
+
31
+ # Test passing a nil
32
+ converted_id = Instana::Util.id_to_header(nil)
33
+
34
+ # Assert that it is a string and there are no non-hex characters
35
+ assert converted_id.is_a?(String)
36
+ assert converted_id == ''
37
+
38
+ # Test passing an Array
39
+ converted_id = Instana::Util.id_to_header([])
40
+
41
+ # Assert that it is a string and there are no non-hex characters
42
+ assert converted_id.is_a?(String)
43
+ assert converted_id == ''
44
+ end
45
+
46
+ def test_header_to_id_conversion
47
+ # Get a hex string to test against & convert
48
+ header_id = Instana::Util.id_to_header(::Instana::Util.generate_id)
49
+ converted_id = Instana::Util.header_to_id(header_id)
50
+
51
+ # Assert that it is an Integer
52
+ assert converted_id.is_a?(Integer)
53
+ end
54
+
55
+ def test_header_to_id_conversion_with_bogus_header
56
+ # Bogus nil arg
57
+ bogus_result = Instana::Util.header_to_id(nil)
58
+ assert_equal 0, bogus_result
59
+
60
+ # Bogus Integer arg
61
+ bogus_result = Instana::Util.header_to_id(1234)
62
+ assert_equal 0, bogus_result
63
+
64
+ # Bogus Array arg
65
+ bogus_result = Instana::Util.header_to_id([1234])
66
+ assert_equal 0, bogus_result
67
+ end
68
+
69
+ def test_id_conversion_back_and_forth
70
+ # id --> header --> id
71
+ original_id = ::Instana::Util.generate_id
72
+ header_id = Instana::Util.id_to_header(original_id)
73
+ converted_back_id = Instana::Util.header_to_id(header_id)
74
+ assert original_id == converted_back_id
75
+
76
+ # header --> id --> header
77
+ original_header_id = "c025ee93b1aeda7b"
78
+ id = Instana::Util.header_to_id(original_header_id)
79
+ converted_back_header_id = Instana::Util.id_to_header(id)
80
+ assert_equal original_header_id, converted_back_header_id
81
+
82
+ # Test a random value
83
+ id = -7815363404733516491
84
+ header = "938a406416457535"
85
+
86
+ result = Instana::Util.header_to_id(header)
87
+ assert_equal id, result
88
+
89
+ result = Instana::Util.id_to_header(id)
90
+ assert_equal header, result
91
+
92
+ 10000.times do
93
+ original_id = ::Instana::Util.generate_id
94
+ header_id = Instana::Util.id_to_header(original_id)
95
+ converted_back_id = Instana::Util.header_to_id(header_id)
96
+ assert original_id == converted_back_id
97
+ end
98
+ end
99
+
100
+ def test_id_max_value_and_conversion
101
+ max_id = 9223372036854775807
102
+ min_id = -9223372036854775808
103
+ max_hex = "7fffffffffffffff"
104
+ min_hex = "8000000000000000"
105
+
106
+ assert_equal max_hex, Instana::Util.id_to_header(max_id)
107
+ assert_equal min_hex, Instana::Util.id_to_header(min_id)
108
+
109
+ assert_equal max_id, Instana::Util.header_to_id(max_hex)
110
+ assert_equal min_id, Instana::Util.header_to_id(min_hex)
111
+ end
112
+
113
+ def test_that_leading_zeros_handled_correctly
114
+
115
+ header = ::Instana::Util.id_to_header(16)
116
+ assert_equal "10", header
117
+
118
+ id = ::Instana::Util.header_to_id("10")
119
+ assert_equal 16, id
120
+
121
+ id = ::Instana::Util.header_to_id("0000000000000010")
122
+ assert_equal 16, id
123
+
124
+ id = ::Instana::Util.header_to_id("88b6c735206ca42")
125
+ assert_equal 615705016619420226, id
126
+
127
+ id = ::Instana::Util.header_to_id("088b6c735206ca42")
128
+ assert_equal 615705016619420226, id
129
+ end
130
+ end
@@ -0,0 +1,335 @@
1
+ require 'test_helper'
2
+ require 'rack/test'
3
+ require 'rack/lobster'
4
+ require "opentracing"
5
+
6
+ module Instana
7
+ class OTRack1
8
+ def initialize(app)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ otrack1_span = OpenTracing.start_span(:otrack1)
14
+ result = @app.call(env)
15
+ otrack1_span.finish
16
+ result
17
+ end
18
+ end
19
+
20
+ class OTRack2
21
+ def initialize(app)
22
+ @app = app
23
+ end
24
+
25
+ def call(env)
26
+ otrack2_span = OpenTracing.start_span(:otrack2)
27
+ result = @app.call(env)
28
+ otrack2_span.finish
29
+ result
30
+ end
31
+ end
32
+ end
33
+
34
+ OpenTracing.global_tracer = ::Instana.tracer
35
+
36
+ class OpenTracerTest < Minitest::Test
37
+ include Rack::Test::Methods
38
+
39
+ def app
40
+ @app = Rack::Builder.new {
41
+ use Instana::Rack
42
+ use Instana::OTRack1
43
+ use Rack::CommonLogger
44
+ use Rack::ShowExceptions
45
+ use Instana::OTRack2
46
+ map "/mrlobster" do
47
+ run Rack::Lobster.new
48
+ end
49
+ }
50
+ end
51
+
52
+ def test_supplies_all_ot_interfaces
53
+ clear_all!
54
+ assert defined?(OpenTracing)
55
+ assert OpenTracing.respond_to?(:global_tracer)
56
+ assert OpenTracing.global_tracer.respond_to?(:start_span)
57
+ assert OpenTracing.global_tracer.respond_to?(:inject)
58
+ assert OpenTracing.global_tracer.respond_to?(:extract)
59
+
60
+ assert defined?(OpenTracing::Carrier)
61
+ carrier = OpenTracing::Carrier.new
62
+ assert carrier.respond_to?(:[])
63
+ assert carrier.respond_to?(:[]=)
64
+ assert carrier.respond_to?(:each)
65
+
66
+ span = OpenTracing.start_span(:blah)
67
+ assert span.respond_to?(:finish)
68
+ assert span.respond_to?(:set_tag)
69
+ assert span.respond_to?(:tags)
70
+ assert span.respond_to?(:operation_name=)
71
+ assert span.respond_to?(:set_baggage_item)
72
+ assert span.respond_to?(:get_baggage_item)
73
+ assert span.respond_to?(:context)
74
+ assert span.respond_to?(:log)
75
+ end
76
+
77
+ def test_basic_get_with_opentracing
78
+ clear_all!
79
+ get '/mrlobster'
80
+ assert last_response.ok?
81
+
82
+ spans = ::Instana.processor.queued_spans
83
+ assert_equal 3, spans.length
84
+
85
+ first_span = find_first_span_by_name(spans, :rack)
86
+ second_span = find_first_span_by_name(spans, :otrack1)
87
+ third_span = find_first_span_by_name(spans, :otrack2)
88
+
89
+ assert_equal :rack, first_span[:n]
90
+ assert first_span[:ts].is_a?(Integer)
91
+ assert first_span[:ts] > 0
92
+ assert first_span[:d].is_a?(Integer)
93
+ assert first_span[:d].between?(0, 5)
94
+ assert first_span.key?(:data)
95
+ assert first_span[:data].key?(:http)
96
+ assert_equal "GET", first_span[:data][:http][:method]
97
+ assert_equal "/mrlobster", first_span[:data][:http][:url]
98
+ assert_equal 200, first_span[:data][:http][:status]
99
+ assert_equal 'example.org', first_span[:data][:http][:host]
100
+ assert_equal :otrack1, second_span[:data][:sdk][:name]
101
+ assert second_span.key?(:data)
102
+ assert second_span[:data].key?(:sdk)
103
+ assert second_span[:data][:sdk].key?(:name)
104
+ assert_equal :otrack2, third_span[:data][:sdk][:name]
105
+ assert third_span.key?(:data)
106
+ assert third_span[:data].key?(:sdk)
107
+ assert third_span[:data][:sdk].key?(:name)
108
+
109
+ # ID Validation
110
+ refute_equal first_span[:t], second_span[:t]
111
+ refute_equal second_span[:t], third_span[:t]
112
+ end
113
+
114
+ def test_get_with_inject_extract
115
+ clear_all!
116
+
117
+ trace_id = ::Instana::Util.generate_id
118
+ span_id = ::Instana::Util.generate_id
119
+
120
+ header 'X-Instana-T', ::Instana::Util.id_to_header(trace_id)
121
+ header 'X-Instana-S', ::Instana::Util.id_to_header(span_id)
122
+
123
+ get '/mrlobster'
124
+ assert last_response.ok?
125
+
126
+ spans = ::Instana.processor.queued_spans
127
+
128
+ assert_equal 3, spans.length
129
+ first_span = find_first_span_by_name(spans, :rack)
130
+
131
+ # Make sure context was picked up and continued in the resulting
132
+ # trace
133
+ assert_equal trace_id, first_span[:t]
134
+ assert_equal span_id, first_span[:p]
135
+ end
136
+
137
+ def test_start_span_with_tags
138
+ clear_all!
139
+ span = OpenTracing.start_span('my_app_entry')
140
+
141
+ assert span.is_a?(::Instana::Span)
142
+
143
+ span.set_tag(:tag_integer, 1234)
144
+ span.set_tag(:tag_boolean, true)
145
+ span.set_tag(:tag_array, [1,2,3,4])
146
+ span.set_tag(:tag_string, "1234")
147
+
148
+ assert_equal 1234, span.tags(:tag_integer)
149
+ assert_equal true, span.tags(:tag_boolean)
150
+ assert_equal [1,2,3,4], span.tags(:tag_array)
151
+ assert_equal "1234", span.tags(:tag_string)
152
+ span.finish
153
+ end
154
+
155
+ def test_start_span_with_custom_start_time
156
+ clear_all!
157
+ now = Time.now
158
+ now_in_ms = ::Instana::Util.time_to_ms(now)
159
+
160
+ span = OpenTracing.start_span('my_app_entry', :start_time => now)
161
+
162
+ assert span.is_a?(::Instana::Span)
163
+
164
+ span.set_tag(:tag_integer, 1234)
165
+ span.set_tag(:tag_boolean, true)
166
+ span.set_tag(:tag_array, [1,2,3,4])
167
+ span.set_tag(:tag_string, "1234")
168
+
169
+ assert_equal 1234, span.tags(:tag_integer)
170
+ assert_equal true, span.tags(:tag_boolean)
171
+ assert_equal [1,2,3,4], span.tags(:tag_array)
172
+ assert_equal "1234", span.tags(:tag_string)
173
+ span.finish
174
+
175
+ assert span[:ts].is_a?(Integer)
176
+ assert_equal now_in_ms, span[:ts]
177
+ assert span[:d].is_a?(Integer)
178
+ assert span[:d].between?(0, 5)
179
+ end
180
+
181
+ def test_span_kind_translation
182
+ clear_all!
183
+ span = OpenTracing.start_span('my_app_entry')
184
+
185
+ assert span.is_a?(::Instana::Span)
186
+
187
+ span.set_tag(:'span.kind', :server)
188
+ assert_equal :entry, span[:data][:sdk][:type]
189
+ assert_equal 1, span[:k]
190
+
191
+ span.set_tag(:'span.kind', :consumer)
192
+ assert_equal :entry, span[:data][:sdk][:type]
193
+ assert_equal 1, span[:k]
194
+
195
+ span.set_tag(:'span.kind', :client)
196
+ assert_equal :exit, span[:data][:sdk][:type]
197
+ assert_equal 2, span[:k]
198
+
199
+ span.set_tag(:'span.kind', :producer)
200
+ assert_equal :exit, span[:data][:sdk][:type]
201
+ assert_equal 2, span[:k]
202
+
203
+ span[:data][:sdk].delete(:type)
204
+ span.set_tag(:'span.kind', :blah)
205
+ assert_equal :intermediate, span[:data][:sdk][:type]
206
+ assert_equal 3, span[:k]
207
+ assert_equal :blah, span[:data][:sdk][:custom][:tags][:'span.kind']
208
+
209
+ span.finish
210
+ end
211
+
212
+ def test_start_span_with_baggage
213
+ clear_all!
214
+ span = OpenTracing.start_span('my_app_entry')
215
+ span.set_baggage_item(:baggage_integer, 1234)
216
+ span.set_baggage_item(:baggage_boolean, false)
217
+ span.set_baggage_item(:baggage_array, [1,2,3,4])
218
+ span.set_baggage_item(:baggage_string, '1234')
219
+
220
+ assert_equal 1234, span.get_baggage_item(:baggage_integer)
221
+ assert_equal false, span.get_baggage_item(:baggage_boolean)
222
+ assert_equal [1,2,3,4], span.get_baggage_item(:baggage_array)
223
+ assert_equal "1234", span.get_baggage_item(:baggage_string)
224
+ span.finish
225
+ end
226
+
227
+ def test_start_span_with_timestamps
228
+ clear_all!
229
+ span_tags = {:start_tag => 1234, :another_tag => 'tag_value'}
230
+
231
+ ts_start = Time.now - 1 # Put start time a bit in the past
232
+ ts_start_ms = ::Instana::Util.time_to_ms(ts_start)
233
+
234
+ span = OpenTracing.start_span('my_app_entry', tags: span_tags, start_time: ts_start)
235
+ sleep 0.1
236
+
237
+ ts_finish = Time.now + 5 # Put end time in the future
238
+ ts_finish_ms = ::Instana::Util.time_to_ms(ts_finish)
239
+
240
+ span.finish(ts_finish)
241
+
242
+ assert_equal ts_start_ms, span[:ts]
243
+ assert_equal (ts_finish_ms - ts_start_ms), span[:d]
244
+
245
+ assert_equal 1234, span[:data][:sdk][:custom][:tags][:start_tag]
246
+ assert_equal 'tag_value', span[:data][:sdk][:custom][:tags][:another_tag]
247
+ end
248
+
249
+ def test_nested_spans_using_child_of
250
+ clear_all!
251
+ entry_span = OpenTracing.start_span(:rack)
252
+ ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
253
+ av_span = OpenTracing.start_span(:action_view, child_of: ac_span)
254
+ sleep 0.1
255
+ av_span.finish
256
+ ac_span.finish
257
+ entry_span.finish
258
+
259
+ spans = ::Instana.processor.queued_spans
260
+ assert_equal 3, spans.length
261
+
262
+ first_span = find_first_span_by_name(spans, :rack)
263
+ second_span = find_first_span_by_name(spans, :action_controller)
264
+ third_span = find_first_span_by_name(spans, :action_view)
265
+
266
+ # IDs
267
+ assert_equal first_span[:t], second_span[:t]
268
+ assert_equal second_span[:t], third_span[:t]
269
+
270
+ # Linkage
271
+ assert first_span[:p].nil?
272
+ assert_equal first_span[:s], second_span[:p]
273
+ assert_equal second_span[:s], third_span[:p]
274
+ end
275
+
276
+ def test_nested_spans_with_baggage
277
+ clear_all!
278
+ entry_span = OpenTracing.start_span(:rack)
279
+ ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
280
+ ac_span.set_baggage_item(:my_bag, 1)
281
+ av_span = OpenTracing.start_span(:action_view, child_of: ac_span)
282
+ sleep 0.1
283
+ av_span.finish
284
+ ac_span.finish
285
+ entry_span.finish
286
+
287
+ spans = ::Instana.processor.queued_spans
288
+ assert_equal 3, spans.length
289
+
290
+ first_span = find_first_span_by_name(spans, :rack)
291
+ second_span = find_first_span_by_name(spans, :action_controller)
292
+ third_span = find_first_span_by_name(spans, :action_view)
293
+
294
+ # IDs
295
+ assert_equal first_span[:t], second_span[:t]
296
+ assert_equal second_span[:t], third_span[:t]
297
+
298
+ # Linkage
299
+ assert first_span[:p].nil?
300
+ assert_equal first_span[:s], second_span[:p]
301
+ assert_equal second_span[:s], third_span[:p]
302
+
303
+ # Every span should have baggage
304
+ assert_equal(nil, entry_span.context.baggage)
305
+ assert_equal({:my_bag=>1}, ac_span.context.baggage)
306
+ assert_equal({:my_bag=>1}, av_span.context.baggage)
307
+ end
308
+
309
+ def test_context_should_carry_baggage
310
+ clear_all!
311
+
312
+ entry_span = OpenTracing.start_span(:rack)
313
+ entry_span_context = entry_span.context
314
+
315
+ ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
316
+ ac_span.set_baggage_item(:my_bag, 1)
317
+ ac_span_context = ac_span.context
318
+
319
+ av_span = OpenTracing.start_span(:action_view, child_of: entry_span)
320
+ av_span_context = av_span.context
321
+
322
+ sleep 0.1
323
+
324
+ av_span.finish
325
+ ac_span.finish
326
+ entry_span.finish
327
+
328
+ spans = ::Instana.processor.queued_spans
329
+ assert_equal 3, spans.length
330
+
331
+ assert_equal(nil, entry_span.context.baggage)
332
+ assert_equal({:my_bag=>1}, ac_span.context.baggage)
333
+ assert_equal(nil, av_span.context.baggage)
334
+ end
335
+ end