instana 1.9.7 → 1.10.0.slimfast

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/lib/instana/agent.rb +19 -19
  3. data/lib/instana/agent/helpers.rb +2 -2
  4. data/lib/instana/agent/tasks.rb +2 -2
  5. data/lib/instana/collectors/gc.rb +1 -1
  6. data/lib/instana/collectors/memory.rb +1 -1
  7. data/lib/instana/collectors/thread.rb +1 -1
  8. data/lib/instana/frameworks/instrumentation/mysql2_adapter.rb +1 -1
  9. data/lib/instana/frameworks/instrumentation/mysql_adapter.rb +1 -1
  10. data/lib/instana/helpers.rb +2 -2
  11. data/lib/instana/instrumentation.rb +1 -1
  12. data/lib/instana/instrumentation/excon.rb +8 -5
  13. data/lib/instana/instrumentation/rack.rb +2 -2
  14. data/lib/instana/instrumentation/resque.rb +3 -3
  15. data/lib/instana/tracer.rb +92 -117
  16. data/lib/instana/tracing/processor.rb +18 -133
  17. data/lib/instana/tracing/span.rb +40 -35
  18. data/lib/instana/tracing/span_context.rb +3 -1
  19. data/lib/instana/util.rb +5 -5
  20. data/lib/instana/version.rb +1 -1
  21. data/lib/opentracing.rb +1 -1
  22. data/test/frameworks/rack_test.rb +6 -11
  23. data/test/frameworks/rails/actioncontroller_test.rb +32 -62
  24. data/test/frameworks/rails/actionview5_test.rb +91 -132
  25. data/test/frameworks/rails/activerecord5_test.rb +14 -17
  26. data/test/instrumentation/dalli_test.rb +51 -72
  27. data/test/instrumentation/excon_test.rb +70 -94
  28. data/test/instrumentation/grpc_test.rb +164 -126
  29. data/test/instrumentation/net-http_test.rb +48 -57
  30. data/test/instrumentation/redis_test.rb +4 -6
  31. data/test/instrumentation/resque_test.rb +41 -41
  32. data/test/instrumentation/rest-client_test.rb +25 -31
  33. data/test/instrumentation/sidekiq-client_test.rb +12 -20
  34. data/test/instrumentation/sidekiq-worker_test.rb +48 -63
  35. data/test/jobs/resque_error_job.rb +7 -1
  36. data/test/jobs/resque_fast_job.rb +7 -1
  37. data/test/servers/sidekiq/worker.rb +1 -3
  38. data/test/test_helper.rb +58 -0
  39. data/test/tracing/custom_test.rb +11 -19
  40. data/test/tracing/opentracing_test.rb +48 -156
  41. data/test/tracing/trace_test.rb +67 -67
  42. data/test/tracing/tracer_async_test.rb +75 -175
  43. data/test/tracing/tracer_test.rb +75 -75
  44. metadata +4 -5
  45. data/lib/instana/tracing/trace.rb +0 -316
@@ -26,10 +26,10 @@ class ActiveRecordTest < Minitest::Test
26
26
  third_span = spans[3]
27
27
  fourth_span = spans[4]
28
28
 
29
- assert_equal :rack, first_span.name
30
- assert_equal :activerecord, second_span.name
31
- assert_equal :activerecord, third_span.name
32
- assert_equal :activerecord, fourth_span.name
29
+ assert_equal :rack, first_span[:n]
30
+ assert_equal :activerecord, second_span[:n]
31
+ assert_equal :activerecord, third_span[:n]
32
+ assert_equal :activerecord, fourth_span[:n]
33
33
 
34
34
  assert_equal "INSERT INTO \"blocks\" (\"name\", \"color\", \"created_at\", \"updated_at\") VALUES ($?, $?, $?, $?) RETURNING \"id\"", second_span[:data][:activerecord][:sql]
35
35
  assert_equal "SELECT \"blocks\".* FROM \"blocks\" WHERE \"blocks\".\"name\" = $? ORDER BY \"blocks\".\"id\" ASC LIMIT $?", third_span[:data][:activerecord][:sql]
@@ -55,21 +55,18 @@ class ActiveRecordTest < Minitest::Test
55
55
 
56
56
  Net::HTTP.get(URI.parse('http://localhost:3205/test/db'))
57
57
 
58
- traces = Instana.processor.queued_traces
59
- assert_equal 1, traces.length
60
- trace = traces.first
58
+ spans = ::Instana.processor.queued_spans
59
+ assert_equal 6, spans.length
61
60
 
62
- assert_equal 6, trace.spans.length
63
- spans = trace.spans.to_a
64
- first_span = spans[0]
65
- second_span = spans[2]
66
- third_span = spans[3]
67
- fourth_span = spans[4]
61
+ first_span = spans[5]
62
+ second_span = spans[0]
63
+ third_span = spans[1]
64
+ fourth_span = spans[2]
68
65
 
69
- assert_equal :rack, first_span.name
70
- assert_equal :activerecord, second_span.name
71
- assert_equal :activerecord, third_span.name
72
- assert_equal :activerecord, fourth_span.name
66
+ assert_equal :rack, first_span[:n]
67
+ assert_equal :activerecord, second_span[:n]
68
+ assert_equal :activerecord, third_span[:n]
69
+ assert_equal :activerecord, fourth_span[:n]
73
70
 
74
71
  assert_equal "INSERT INTO `blocks` (`name`, `color`, `created_at`, `updated_at`) VALUES (?, ?, ?, ?)", second_span[:data][:activerecord][:sql]
75
72
  assert_equal "SELECT `blocks`.* FROM `blocks` WHERE `blocks`.`name` = ? ORDER BY `blocks`.`id` ASC LIMIT ?", third_span[:data][:activerecord][:sql]
@@ -24,18 +24,15 @@ class DalliTest < Minitest::Test
24
24
 
25
25
  assert_equal :boom, result
26
26
 
27
- traces = Instana.processor.queued_traces
28
- assert_equal 1, traces.length
29
- trace = traces.first
30
-
31
- # Excon validation
32
- assert_equal 2, trace.spans.length
33
- spans = trace.spans.to_a
34
- first_span = spans[0]
35
- second_span = spans[1]
36
-
37
- assert_equal :dalli_test, first_span.name
38
- assert_equal :memcache, second_span.name
27
+ spans = ::Instana.processor.queued_spans
28
+ assert_equal 2, spans.length
29
+
30
+ first_span = spans[1]
31
+ second_span = spans[0]
32
+
33
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
34
+
35
+ assert_equal :memcache, second_span[:n]
39
36
  assert_equal false, second_span.key?(:error)
40
37
  assert second_span[:p] == first_span[:s]
41
38
  assert first_span[:t] == first_span[:s]
@@ -60,18 +57,15 @@ class DalliTest < Minitest::Test
60
57
 
61
58
  assert result.is_a?(Integer)
62
59
 
63
- traces = Instana.processor.queued_traces
64
- assert_equal 1, traces.length
65
- trace = traces.first
60
+ spans = ::Instana.processor.queued_spans
61
+ assert_equal 2, spans.length
66
62
 
67
- # Excon validation
68
- assert_equal 2, trace.spans.length
69
- spans = trace.spans.to_a
70
- first_span = spans[0]
71
- second_span = spans[1]
63
+ first_span = spans[1]
64
+ second_span = spans[0]
72
65
 
73
- assert_equal :dalli_test, first_span.name
74
- assert_equal :memcache, second_span.name
66
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
67
+
68
+ assert_equal :memcache, second_span[:n]
75
69
  assert_equal false, second_span.key?(:error)
76
70
  assert second_span[:p] == first_span[:s]
77
71
  assert first_span[:t] == first_span[:s]
@@ -97,18 +91,15 @@ class DalliTest < Minitest::Test
97
91
 
98
92
  assert result.is_a?(Integer)
99
93
 
100
- traces = Instana.processor.queued_traces
101
- assert_equal 1, traces.length
102
- trace = traces.first
94
+ spans = ::Instana.processor.queued_spans
95
+ assert_equal 2, spans.length
96
+
97
+ first_span = spans[1]
98
+ second_span = spans[0]
103
99
 
104
- # Excon validation
105
- assert_equal 2, trace.spans.length
106
- spans = trace.spans.to_a
107
- first_span = spans[0]
108
- second_span = spans[1]
100
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
109
101
 
110
- assert_equal :dalli_test, first_span.name
111
- assert_equal :memcache, second_span.name
102
+ assert_equal :memcache, second_span[:n]
112
103
  assert_equal false, second_span.key?(:error)
113
104
  assert second_span[:p] == first_span[:s]
114
105
  assert first_span[:t] == first_span[:s]
@@ -134,18 +125,15 @@ class DalliTest < Minitest::Test
134
125
 
135
126
  assert_equal true, result
136
127
 
137
- traces = Instana.processor.queued_traces
138
- assert_equal 1, traces.length
139
- trace = traces.first
128
+ spans = ::Instana.processor.queued_spans
129
+ assert_equal 2, spans.length
140
130
 
141
- # Excon validation
142
- assert_equal 2, trace.spans.length
143
- spans = trace.spans.to_a
144
- first_span = spans[0]
145
- second_span = spans[1]
131
+ first_span = spans[1]
132
+ second_span = spans[0]
146
133
 
147
- assert_equal :dalli_test, first_span.name
148
- assert_equal :memcache, second_span.name
134
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
135
+
136
+ assert_equal :memcache, second_span[:n]
149
137
  assert_equal false, second_span.key?(:error)
150
138
  assert second_span[:p] == first_span[:s]
151
139
  assert first_span[:t] == first_span[:s]
@@ -171,18 +159,15 @@ class DalliTest < Minitest::Test
171
159
 
172
160
  assert_equal 1, result
173
161
 
174
- traces = Instana.processor.queued_traces
175
- assert_equal 1, traces.length
176
- trace = traces.first
162
+ spans = ::Instana.processor.queued_spans
163
+ assert_equal 2, spans.length
164
+
165
+ first_span = spans[1]
166
+ second_span = spans[0]
177
167
 
178
- # Excon validation
179
- assert_equal 2, trace.spans.length
180
- spans = trace.spans.to_a
181
- first_span = spans[0]
182
- second_span = spans[1]
168
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
183
169
 
184
- assert_equal :dalli_test, first_span.name
185
- assert_equal :memcache, second_span.name
170
+ assert_equal :memcache, second_span[:n]
186
171
  assert_equal false, second_span.key?(:error)
187
172
  assert second_span[:p] == first_span[:s]
188
173
  assert first_span[:t] == first_span[:s]
@@ -208,18 +193,15 @@ class DalliTest < Minitest::Test
208
193
 
209
194
  assert_equal 0, result
210
195
 
211
- traces = Instana.processor.queued_traces
212
- assert_equal 1, traces.length
213
- trace = traces.first
196
+ spans = ::Instana.processor.queued_spans
197
+ assert_equal 2, spans.length
214
198
 
215
- # Excon validation
216
- assert_equal 2, trace.spans.length
217
- spans = trace.spans.to_a
218
- first_span = spans[0]
219
- second_span = spans[1]
199
+ first_span = spans[1]
200
+ second_span = spans[0]
220
201
 
221
- assert_equal :dalli_test, first_span.name
222
- assert_equal :memcache, second_span.name
202
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
203
+
204
+ assert_equal :memcache, second_span[:n]
223
205
  assert_equal false, second_span.key?(:error)
224
206
  assert second_span[:p] == first_span[:s]
225
207
  assert first_span[:t] == first_span[:s]
@@ -244,18 +226,15 @@ class DalliTest < Minitest::Test
244
226
  @dc.get_multi(:one, :two, :three, :four)
245
227
  end
246
228
 
247
- traces = Instana.processor.queued_traces
248
- assert_equal 1, traces.length
249
- trace = traces.first
229
+ spans = ::Instana.processor.queued_spans
230
+ assert_equal 2, spans.length
231
+
232
+ first_span = spans[1]
233
+ second_span = spans[0]
250
234
 
251
- # Excon validation
252
- assert_equal 2, trace.spans.length
253
- spans = trace.spans.to_a
254
- first_span = spans[0]
255
- second_span = spans[1]
235
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
256
236
 
257
- assert_equal :dalli_test, first_span.name
258
- assert_equal :memcache, second_span.name
237
+ assert_equal :memcache, second_span[:n]
259
238
  assert_equal false, second_span.key?(:error)
260
239
  assert second_span[:p] == first_span[:s]
261
240
  assert first_span[:t] == first_span[:s]
@@ -22,41 +22,29 @@ class ExconTest < Minitest::Test
22
22
  connection.get(:path => '/?basic_get')
23
23
  end
24
24
 
25
- traces = Instana.processor.queued_traces
26
- assert_equal 2, traces.length
27
- rs_trace = traces[0]
28
- http_trace = traces[1]
25
+ spans = ::Instana.processor.queued_spans
26
+ assert_equal 3, spans.length
29
27
 
30
- # Excon validation
31
- assert_equal 2, http_trace.spans.length
32
- spans = http_trace.spans.to_a
33
- first_span = spans[0]
34
- second_span = spans[1]
28
+ sdk_span = find_first_span_by_name(spans, :'excon-test')
29
+ excon_span = find_first_span_by_name(spans, :excon)
30
+ rack_span = find_first_span_by_name(spans, :rack)
35
31
 
36
- # Span name validation
37
- assert_equal :sdk, first_span[:n]
38
- assert_equal :"excon-test", first_span[:data][:sdk][:name]
39
- assert_equal :excon, second_span[:n]
40
-
41
- # first_span is the parent of second_span
42
- assert_equal first_span.id, second_span[:p]
32
+ validate_sdk_span(sdk_span, {:name => :'excon-test', :type => :intermediate})
43
33
 
44
34
  # data keys/values
45
- refute_nil second_span.key?(:data)
46
- refute_nil second_span[:data].key?(:http)
47
- assert_equal "http://127.0.0.1:6511/", second_span[:data][:http][:url]
48
- assert_equal 200, second_span[:data][:http][:status]
35
+ refute_nil excon_span.key?(:data)
36
+ refute_nil excon_span[:data].key?(:http)
37
+ assert_equal "http://127.0.0.1:6511/", excon_span[:data][:http][:url]
38
+ assert_equal 200, excon_span[:data][:http][:status]
49
39
 
50
40
  # excon backtrace not included by default check
51
- assert !second_span.key?(:stack)
41
+ assert !excon_span.key?(:stack)
52
42
 
53
- # Rack server trace validation
54
- assert_equal 1, rs_trace.spans.length
55
- rs_span = rs_trace.spans.to_a[0]
43
+ assert_equal sdk_span[:t], excon_span[:t]
44
+ assert_equal rack_span[:t], excon_span[:t]
56
45
 
57
- # Rack server trace should have the same trace ID
58
- assert_equal http_trace.id, rs_span[:t].to_i
59
- assert_equal rs_span[:p].to_i, second_span[:s]
46
+ assert_equal rack_span[:p], excon_span[:s]
47
+ assert_equal excon_span[:p], sdk_span[:s]
60
48
  end
61
49
 
62
50
  def test_basic_get_with_error
@@ -67,46 +55,37 @@ class ExconTest < Minitest::Test
67
55
  Excon.defaults[:middlewares].delete ::WebMock::HttpLibAdapters::ExconAdapter
68
56
  Excon.defaults[:middlewares].delete ::Excon::Middleware::Mock
69
57
 
70
- url = "http://127.0.0.1:6500"
58
+ url = "http://127.0.0.1:6511"
71
59
 
72
60
  begin
73
61
  connection = Excon.new(url)
74
62
  Instana.tracer.start_or_continue_trace('excon-test') do
75
- connection.get(:path => '/?basic_get')
63
+ connection.get(:path => '/error')
76
64
  end
77
65
  rescue
78
66
  end
79
67
 
80
- traces = Instana.processor.queued_traces
81
- assert_equal 1, traces.length
82
- http_trace = traces.first
68
+ spans = ::Instana.processor.queued_spans
69
+ assert_equal 3, spans.length
83
70
 
84
- # Excon validation
85
- assert_equal 2, http_trace.spans.length
86
- spans = http_trace.spans.to_a
87
- first_span = spans[0]
88
- second_span = spans[1]
71
+ rack_span = find_first_span_by_name(spans, :rack)
72
+ excon_span = find_first_span_by_name(spans, :excon)
73
+ sdk_span = find_first_span_by_name(spans, :'excon-test')
89
74
 
90
- # Span name validation
91
- assert_equal :sdk, first_span[:n]
92
- assert_equal :"excon-test", first_span[:data][:sdk][:name]
93
- assert_equal :excon, second_span[:n]
75
+ validate_sdk_span(sdk_span, {:name => :'excon-test', :type => :intermediate})
94
76
 
95
- # first_span is the parent of second_span
96
- assert_equal first_span.id, second_span[:p]
97
-
98
- # data keys/values
99
- refute_nil second_span.key?(:data)
100
- refute_nil second_span[:data].key?(:http)
101
- assert_equal "http://127.0.0.1:6500/", second_span[:data][:http][:url]
102
- assert_equal nil, second_span[:data][:http][:status]
77
+ assert_equal sdk_span[:s], excon_span[:p]
78
+ assert_equal excon_span[:s], rack_span[:p]
103
79
 
104
- # excon span should include an error backtrace
105
- assert second_span.key?(:stack)
80
+ assert_equal :excon, excon_span[:n]
81
+ refute_nil excon_span.key?(:data)
82
+ refute_nil excon_span[:data].key?(:http)
83
+ assert_equal "http://127.0.0.1:6511/error", excon_span[:data][:http][:url]
84
+ assert_equal 500, excon_span[:data][:http][:status]
106
85
 
107
86
  # error validation
108
- assert_equal true, second_span[:error]
109
- #assert_equal 1, second_span[:ec]
87
+ assert_equal true, excon_span[:error]
88
+ assert_equal 1, excon_span[:ec]
110
89
  end
111
90
 
112
91
  def test_pipelined_requests
@@ -125,47 +104,44 @@ class ExconTest < Minitest::Test
125
104
  connection.requests([request, request, request])
126
105
  end
127
106
 
128
- traces = Instana.processor.queued_traces
129
- assert_equal 4, traces.length
130
- http_trace = traces[3]
131
-
132
- # Excon validation
133
- assert_equal 4, http_trace.spans.length
134
- spans = http_trace.spans.to_a
135
- first_span = spans[0]
136
- second_span = spans[1]
137
- third_span = spans[2]
138
- fourth_span = spans[3]
139
-
140
- # Span name validation
141
- assert_equal :sdk, first_span[:n]
142
- assert_equal :"excon-test", first_span[:data][:sdk][:name]
143
- assert_equal :excon, second_span[:n]
144
- assert_equal :excon, third_span[:n]
145
- assert_equal :excon, fourth_span[:n]
146
-
147
- # first_span is the parent of second/third/fourth_span
148
- assert_equal first_span.id, second_span[:p]
149
- assert_equal first_span.id, third_span[:p]
150
- assert_equal first_span.id, fourth_span[:p]
107
+ spans = ::Instana.processor.queued_spans
108
+ assert_equal 7, spans.length
151
109
 
152
- # data keys/values
153
- refute_nil second_span.key?(:data)
154
- refute_nil second_span[:data].key?(:http)
155
- assert_equal "http://127.0.0.1:6511/", second_span[:data][:http][:url]
156
- assert_equal 200, second_span[:data][:http][:status]
157
- assert !second_span.key?(:stack)
158
-
159
- refute_nil third_span.key?(:data)
160
- refute_nil third_span[:data].key?(:http)
161
- assert_equal "http://127.0.0.1:6511/", third_span[:data][:http][:url]
162
- assert_equal 200, third_span[:data][:http][:status]
163
- assert !third_span.key?(:stack)
164
-
165
- refute_nil fourth_span.key?(:data)
166
- refute_nil fourth_span[:data].key?(:http)
167
- assert_equal "http://127.0.0.1:6511/", fourth_span[:data][:http][:url]
168
- assert_equal 200, fourth_span[:data][:http][:status]
169
- assert !fourth_span.key?(:stack)
110
+ rack_spans = find_spans_by_name(spans, :rack)
111
+ excon_spans = find_spans_by_name(spans, :excon)
112
+ sdk_span = find_first_span_by_name(spans, :'excon-test')
113
+
114
+ validate_sdk_span(sdk_span, {:name => :'excon-test', :type => :intermediate})
115
+
116
+ assert_equal 3, rack_spans.length
117
+ assert_equal 3, excon_spans.length
118
+
119
+ # ::Instana::Util.pry!
120
+
121
+ for rack_span in rack_spans
122
+ # data keys/values
123
+ refute_nil rack_span.key?(:data)
124
+ refute_nil rack_span[:data].key?(:http)
125
+ assert_equal "/", rack_span[:data][:http][:url]
126
+ assert_equal 200, rack_span[:data][:http][:status]
127
+ assert !rack_span.key?(:stack)
128
+
129
+ # Make sure a parent is specified and that we have it
130
+ refute_nil rack_span[:p]
131
+ excon_span = find_span_by_id(spans, rack_span[:p])
132
+ assert_equal :excon, excon_span[:n]
133
+
134
+ refute_nil excon_span.key?(:data)
135
+ refute_nil excon_span[:data].key?(:http)
136
+ assert_equal "http://127.0.0.1:6511/", excon_span[:data][:http][:url]
137
+ assert_equal 200, excon_span[:data][:http][:status]
138
+ assert !excon_span.key?(:stack)
139
+
140
+ # walk up the line
141
+ refute_nil excon_span[:p]
142
+ grandparent_span = find_span_by_id(spans, excon_span[:p])
143
+ assert_nil grandparent_span[:p]
144
+ assert_equal :sdk, grandparent_span[:n]
145
+ end
170
146
  end
171
147
  end
@@ -5,39 +5,8 @@ class GrpcTest < Minitest::Test
5
5
  PingPongService::Stub.new('127.0.0.1:50051', :this_channel_is_insecure)
6
6
  end
7
7
 
8
- # The order of traces are non-deterministic, could not predict
9
- # which trace is server or client. This method is to choose the
10
- # right trace based on span's name
11
- def differentiate_trace(traces)
12
- trying_client = traces[0]
13
- trying_server = traces[1]
14
-
15
- try_successfully = trying_client.spans.any? do |span|
16
- span.name == :'rpc-client'
17
- end
18
-
19
- if try_successfully
20
- [trying_client, trying_server]
21
- else
22
- [trying_server, trying_client]
23
- end
24
- end
25
-
26
- def assert_client_trace(client_trace, call: '', call_type: '', error: nil)
27
- assert_equal 2, client_trace.spans.length
28
- spans = client_trace.spans.to_a
29
- first_span = spans[0]
30
- second_span = spans[1]
31
-
32
- # Span name validation
33
- assert_equal :sdk, first_span[:n]
34
- assert_equal :rpctests, first_span[:data][:sdk][:name]
35
- assert_equal :'rpc-client', second_span[:n]
36
-
37
- # first_span is the parent of second_span
38
- assert_equal first_span.id, second_span[:p]
39
-
40
- data = second_span[:data]
8
+ def assert_client_span(client_span, call: '', call_type: '', error: nil)
9
+ data = client_span[:data]
41
10
  assert_equal '127.0.0.1:50051', data[:rpc][:host]
42
11
  assert_equal :grpc, data[:rpc][:flavor]
43
12
  assert_equal call, data[:rpc][:call]
@@ -49,14 +18,11 @@ class GrpcTest < Minitest::Test
49
18
  end
50
19
  end
51
20
 
52
- def assert_server_trace(server_trace, call: '', call_type: '', error: nil)
53
- assert_equal 1, server_trace.spans.length
54
- span = server_trace.spans.to_a.first
55
-
21
+ def assert_server_span(server_span, call: '', call_type: '', error: nil)
56
22
  # Span name validation
57
- assert_equal :'rpc-server', span[:n]
23
+ assert_equal :'rpc-server', server_span[:n]
58
24
 
59
- data = span[:data]
25
+ data = server_span[:data]
60
26
  assert_equal :grpc, data[:rpc][:flavor]
61
27
  assert_equal call, data[:rpc][:call]
62
28
  assert_equal call_type, data[:rpc][:call_type]
@@ -83,22 +49,31 @@ class GrpcTest < Minitest::Test
83
49
  # Pause for a split second to allow traces to be queued
84
50
  sleep 0.2
85
51
 
86
- assert_equal 2, ::Instana.processor.queue_count
87
- client_trace, server_trace = differentiate_trace(
88
- Instana.processor.queued_traces
89
- )
52
+ spans = ::Instana.processor.queued_spans
53
+ sdk_span = find_spans_by_name(spans, :rpctests).first
54
+ client_span = find_spans_by_name(spans, :'rpc-client').first
55
+ server_span = find_spans_by_name(spans, :'rpc-server').first
56
+
57
+ validate_sdk_span(sdk_span)
90
58
 
91
- assert_client_trace(
92
- client_trace,
93
- call: '/PingPongService/Ping',
94
- call_type: :request_response
59
+ assert_client_span(
60
+ client_span,
61
+ call: '/PingPongService/Ping',
62
+ call_type: :request_response
95
63
  )
96
64
 
97
- assert_server_trace(
98
- server_trace,
99
- call: '/PingPongService/Ping',
100
- call_type: :request_response
65
+ assert_server_span(
66
+ server_span,
67
+ call: '/PingPongService/Ping',
68
+ call_type: :request_response
101
69
  )
70
+
71
+ trace_id = sdk_span[:t]
72
+ assert_equal trace_id, client_span[:t]
73
+ assert_equal trace_id, server_span[:t]
74
+
75
+ assert_equal server_span[:p], client_span[:s]
76
+ assert_equal client_span[:p], sdk_span[:s]
102
77
  end
103
78
 
104
79
  def test_client_streamer
@@ -119,22 +94,31 @@ class GrpcTest < Minitest::Test
119
94
  # Pause for a split second to allow traces to be queued
120
95
  sleep 0.2
121
96
 
122
- assert_equal 2, ::Instana.processor.queue_count
123
- client_trace, server_trace = differentiate_trace(
124
- Instana.processor.queued_traces
125
- )
97
+ spans = ::Instana.processor.queued_spans
98
+ sdk_span = find_spans_by_name(spans, :rpctests).first
99
+ client_span = find_spans_by_name(spans, :'rpc-client').first
100
+ server_span = find_spans_by_name(spans, :'rpc-server').first
126
101
 
127
- assert_client_trace(
128
- client_trace,
129
- call: '/PingPongService/PingWithClientStream',
130
- call_type: :client_streamer
102
+ validate_sdk_span(sdk_span)
103
+
104
+ assert_client_span(
105
+ client_span,
106
+ call: '/PingPongService/PingWithClientStream',
107
+ call_type: :client_streamer
131
108
  )
132
109
 
133
- assert_server_trace(
134
- server_trace,
135
- call: '/PingPongService/PingWithClientStream',
136
- call_type: :client_streamer
110
+ assert_server_span(
111
+ server_span,
112
+ call: '/PingPongService/PingWithClientStream',
113
+ call_type: :client_streamer
137
114
  )
115
+
116
+ trace_id = sdk_span[:t]
117
+ assert_equal trace_id, client_span[:t]
118
+ assert_equal trace_id, server_span[:t]
119
+
120
+ assert_equal server_span[:p], client_span[:s]
121
+ assert_equal client_span[:p], sdk_span[:s]
138
122
  end
139
123
 
140
124
  def test_server_streamer
@@ -151,22 +135,31 @@ class GrpcTest < Minitest::Test
151
135
  # Pause for a split second to allow traces to be queued
152
136
  sleep 0.2
153
137
 
154
- assert_equal 2, ::Instana.processor.queue_count
155
- client_trace, server_trace = differentiate_trace(
156
- Instana.processor.queued_traces
157
- )
138
+ spans = ::Instana.processor.queued_spans
139
+ sdk_span = find_spans_by_name(spans, :rpctests).first
140
+ client_span = find_spans_by_name(spans, :'rpc-client').first
141
+ server_span = find_spans_by_name(spans, :'rpc-server').first
158
142
 
159
- assert_client_trace(
160
- client_trace,
161
- call: '/PingPongService/PingWithServerStream',
162
- call_type: :server_streamer
143
+ validate_sdk_span(sdk_span)
144
+
145
+ assert_client_span(
146
+ client_span,
147
+ call: '/PingPongService/PingWithServerStream',
148
+ call_type: :server_streamer
163
149
  )
164
150
 
165
- assert_server_trace(
166
- server_trace,
167
- call: '/PingPongService/PingWithServerStream',
168
- call_type: :server_streamer
151
+ assert_server_span(
152
+ server_span,
153
+ call: '/PingPongService/PingWithServerStream',
154
+ call_type: :server_streamer
169
155
  )
156
+
157
+ trace_id = sdk_span[:t]
158
+ assert_equal trace_id, client_span[:t]
159
+ assert_equal trace_id, server_span[:t]
160
+
161
+ assert_equal server_span[:p], client_span[:s]
162
+ assert_equal client_span[:p], sdk_span[:s]
170
163
  end
171
164
 
172
165
  def test_bidi_streamer
@@ -187,22 +180,31 @@ class GrpcTest < Minitest::Test
187
180
  # Pause for a split second to allow traces to be queued
188
181
  sleep 0.2
189
182
 
190
- assert_equal 2, ::Instana.processor.queue_count
191
- client_trace, server_trace = differentiate_trace(
192
- Instana.processor.queued_traces
193
- )
183
+ spans = ::Instana.processor.queued_spans
184
+ sdk_span = find_spans_by_name(spans, :rpctests).first
185
+ client_span = find_spans_by_name(spans, :'rpc-client').first
186
+ server_span = find_spans_by_name(spans, :'rpc-server').first
194
187
 
195
- assert_client_trace(
196
- client_trace,
197
- call: '/PingPongService/PingWithBidiStream',
198
- call_type: :bidi_streamer
188
+ validate_sdk_span(sdk_span)
189
+
190
+ assert_client_span(
191
+ client_span,
192
+ call: '/PingPongService/PingWithBidiStream',
193
+ call_type: :bidi_streamer
199
194
  )
200
195
 
201
- assert_server_trace(
202
- server_trace,
203
- call: '/PingPongService/PingWithBidiStream',
204
- call_type: :bidi_streamer
196
+ assert_server_span(
197
+ server_span,
198
+ call: '/PingPongService/PingWithBidiStream',
199
+ call_type: :bidi_streamer
205
200
  )
201
+
202
+ trace_id = sdk_span[:t]
203
+ assert_equal trace_id, client_span[:t]
204
+ assert_equal trace_id, server_span[:t]
205
+
206
+ assert_equal server_span[:p], client_span[:s]
207
+ assert_equal client_span[:p], sdk_span[:s]
206
208
  end
207
209
 
208
210
  def test_request_response_failure
@@ -217,23 +219,32 @@ class GrpcTest < Minitest::Test
217
219
  # Pause for a split second to allow traces to be queued
218
220
  sleep 0.2
219
221
 
220
- assert_equal 2, ::Instana.processor.queue_count
221
- client_trace, server_trace = differentiate_trace(
222
- Instana.processor.queued_traces
222
+ spans = ::Instana.processor.queued_spans
223
+ sdk_span = find_spans_by_name(spans, :rpctests).first
224
+ client_span = find_spans_by_name(spans, :'rpc-client').first
225
+ server_span = find_spans_by_name(spans, :'rpc-server').first
226
+
227
+ validate_sdk_span(sdk_span)
228
+
229
+ assert_client_span(
230
+ client_span,
231
+ call: '/PingPongService/FailToPing',
232
+ call_type: :request_response,
233
+ error: 'Unexpected failed'
223
234
  )
224
-
225
- assert_client_trace(
226
- client_trace,
227
- call: '/PingPongService/FailToPing',
228
- call_type: :request_response,
229
- error: 'Unexpected failed'
230
- )
231
- assert_server_trace(
232
- server_trace,
233
- call: '/PingPongService/FailToPing',
234
- call_type: :request_response,
235
- error: 'Unexpected failed'
235
+ assert_server_span(
236
+ server_span,
237
+ call: '/PingPongService/FailToPing',
238
+ call_type: :request_response,
239
+ error: 'Unexpected failed'
236
240
  )
241
+
242
+ trace_id = sdk_span[:t]
243
+ assert_equal trace_id, client_span[:t]
244
+ assert_equal trace_id, server_span[:t]
245
+
246
+ assert_equal server_span[:p], client_span[:s]
247
+ assert_equal client_span[:p], sdk_span[:s]
237
248
  end
238
249
 
239
250
  def test_client_streamer_failure
@@ -252,24 +263,33 @@ class GrpcTest < Minitest::Test
252
263
  # Pause for a split second to allow traces to be queued
253
264
  sleep 0.2
254
265
 
255
- assert_equal 2, ::Instana.processor.queue_count
256
- client_trace, server_trace = differentiate_trace(
257
- Instana.processor.queued_traces
258
- )
266
+ spans = ::Instana.processor.queued_spans
267
+ sdk_span = find_spans_by_name(spans, :rpctests).first
268
+ client_span = find_spans_by_name(spans, :'rpc-client').first
269
+ server_span = find_spans_by_name(spans, :'rpc-server').first
270
+
271
+ validate_sdk_span(sdk_span)
259
272
 
260
- assert_client_trace(
261
- client_trace,
273
+ assert_client_span(
274
+ client_span,
262
275
  call: '/PingPongService/FailToPingWithClientStream',
263
276
  call_type: :client_streamer,
264
277
  error: 'Unexpected failed'
265
278
  )
266
279
 
267
- assert_server_trace(
268
- server_trace,
280
+ assert_server_span(
281
+ server_span,
269
282
  call: '/PingPongService/FailToPingWithClientStream',
270
283
  call_type: :client_streamer,
271
284
  error: 'Unexpected failed'
272
285
  )
286
+
287
+ trace_id = sdk_span[:t]
288
+ assert_equal trace_id, client_span[:t]
289
+ assert_equal trace_id, server_span[:t]
290
+
291
+ assert_equal server_span[:p], client_span[:s]
292
+ assert_equal client_span[:p], sdk_span[:s]
273
293
  end
274
294
 
275
295
  def test_server_streamer_failure
@@ -286,23 +306,32 @@ class GrpcTest < Minitest::Test
286
306
  # Pause for a split second to allow traces to be queued
287
307
  sleep 0.2
288
308
 
289
- assert_equal 2, ::Instana.processor.queue_count
290
- client_trace, server_trace = differentiate_trace(
291
- Instana.processor.queued_traces
292
- )
309
+ spans = ::Instana.processor.queued_spans
310
+ sdk_span = find_spans_by_name(spans, :rpctests).first
311
+ client_span = find_spans_by_name(spans, :'rpc-client').first
312
+ server_span = find_spans_by_name(spans, :'rpc-server').first
313
+
314
+ validate_sdk_span(sdk_span)
293
315
 
294
- assert_client_trace(
295
- client_trace,
316
+ assert_client_span(
317
+ client_span,
296
318
  call: '/PingPongService/FailToPingWithServerStream',
297
319
  call_type: :server_streamer
298
320
  )
299
321
 
300
- assert_server_trace(
301
- server_trace,
322
+ assert_server_span(
323
+ server_span,
302
324
  call: '/PingPongService/FailToPingWithServerStream',
303
325
  call_type: :server_streamer,
304
326
  error: 'Unexpected failed'
305
327
  )
328
+
329
+ trace_id = sdk_span[:t]
330
+ assert_equal trace_id, client_span[:t]
331
+ assert_equal trace_id, server_span[:t]
332
+
333
+ assert_equal server_span[:p], client_span[:s]
334
+ assert_equal client_span[:p], sdk_span[:s]
306
335
  end
307
336
 
308
337
  def test_bidi_streamer_failure
@@ -318,22 +347,31 @@ class GrpcTest < Minitest::Test
318
347
  # Pause for a split second to allow traces to be queued
319
348
  sleep 0.2
320
349
 
321
- assert_equal 2, ::Instana.processor.queue_count
322
- client_trace, server_trace = differentiate_trace(
323
- Instana.processor.queued_traces
324
- )
350
+ spans = ::Instana.processor.queued_spans
351
+ sdk_span = find_spans_by_name(spans, :rpctests).first
352
+ client_span = find_spans_by_name(spans, :'rpc-client').first
353
+ server_span = find_spans_by_name(spans, :'rpc-server').first
325
354
 
326
- assert_client_trace(
327
- client_trace,
355
+ validate_sdk_span(sdk_span)
356
+
357
+ assert_client_span(
358
+ client_span,
328
359
  call: '/PingPongService/FailToPingWithBidiStream',
329
360
  call_type: :bidi_streamer
330
361
  )
331
362
 
332
- assert_server_trace(
333
- server_trace,
363
+ assert_server_span(
364
+ server_span,
334
365
  call: '/PingPongService/FailToPingWithBidiStream',
335
366
  call_type: :bidi_streamer,
336
367
  error: 'Unexpected failed'
337
368
  )
369
+
370
+ trace_id = sdk_span[:t]
371
+ assert_equal trace_id, client_span[:t]
372
+ assert_equal trace_id, server_span[:t]
373
+
374
+ assert_equal server_span[:p], client_span[:s]
375
+ assert_equal client_span[:p], sdk_span[:s]
338
376
  end
339
377
  end