instana 2.0.0 → 2.2.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 (192) hide show
  1. checksums.yaml +4 -4
  2. data/lib/instana/instrumentation/instrumented_request.rb +2 -0
  3. data/lib/instana/instrumentation/net-http.rb +2 -1
  4. data/lib/instana/instrumentation/rack.rb +86 -66
  5. data/lib/instana/setup.rb +1 -0
  6. data/lib/instana/span_filtering/condition.rb +134 -0
  7. data/lib/instana/span_filtering/configuration.rb +262 -0
  8. data/lib/instana/span_filtering/filter_rule.rb +31 -0
  9. data/lib/instana/span_filtering.rb +62 -0
  10. data/lib/instana/trace/span.rb +5 -3
  11. data/lib/instana/trace/span_context.rb +10 -2
  12. data/lib/instana/trace/tracer.rb +0 -21
  13. data/lib/instana/util.rb +13 -0
  14. data/lib/instana/version.rb +1 -1
  15. metadata +7 -258
  16. data/.circleci/config.yml +0 -361
  17. data/.codeclimate.yml +0 -23
  18. data/.editorconfig +0 -10
  19. data/.fasterer.yml +0 -23
  20. data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
  21. data/.github/ISSUE_TEMPLATE/config.yml +0 -8
  22. data/.github/workflows/pr_commits_signed_off.yml +0 -16
  23. data/.github/workflows/release-notification-on-slack.yml +0 -34
  24. data/.gitignore +0 -19
  25. data/.rubocop.yml +0 -34
  26. data/.rubocop_todo.yml +0 -1140
  27. data/.tekton/.currency/docs/report.md +0 -20
  28. data/.tekton/.currency/resources/requirements.txt +0 -4
  29. data/.tekton/.currency/resources/table.json +0 -100
  30. data/.tekton/.currency/scripts/generate_report.py +0 -308
  31. data/.tekton/README.md +0 -278
  32. data/.tekton/github-interceptor-secret.yaml +0 -8
  33. data/.tekton/github-pr-eventlistener.yaml +0 -104
  34. data/.tekton/github-pr-pipeline.yaml.part +0 -38
  35. data/.tekton/github-set-status-task.yaml +0 -43
  36. data/.tekton/github-webhook-ingress.yaml +0 -20
  37. data/.tekton/pipeline.yaml +0 -484
  38. data/.tekton/pipelinerun.yaml +0 -21
  39. data/.tekton/prepuller-restart-service-account.yaml +0 -31
  40. data/.tekton/ruby-tracer-prepuller-cronjob.yaml +0 -20
  41. data/.tekton/ruby-tracer-prepuller.yaml +0 -88
  42. data/.tekton/run_unittests.sh +0 -87
  43. data/.tekton/scheduled-eventlistener.yaml +0 -108
  44. data/.tekton/task.yaml +0 -453
  45. data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
  46. data/Appraisals +0 -124
  47. data/CONTRIBUTING.md +0 -86
  48. data/Gemfile +0 -22
  49. data/LICENSE +0 -22
  50. data/MAINTAINERS.md +0 -3
  51. data/Rakefile +0 -49
  52. data/bin/announce_release_on_slack.py +0 -103
  53. data/docker-compose.yml +0 -20
  54. data/download.sh +0 -85
  55. data/examples/otel.rb +0 -98
  56. data/examples/tracing.rb +0 -85
  57. data/extras/license_header.rb +0 -44
  58. data/gemfiles/.bundle/config +0 -2
  59. data/gemfiles/aws_30.gemfile +0 -21
  60. data/gemfiles/aws_60.gemfile +0 -16
  61. data/gemfiles/cuba_30.gemfile +0 -16
  62. data/gemfiles/cuba_40.gemfile +0 -13
  63. data/gemfiles/dalli_20.gemfile +0 -15
  64. data/gemfiles/dalli_30.gemfile +0 -12
  65. data/gemfiles/dalli_32.gemfile +0 -12
  66. data/gemfiles/excon_0100.gemfile +0 -14
  67. data/gemfiles/excon_021.gemfile +0 -17
  68. data/gemfiles/excon_079.gemfile +0 -17
  69. data/gemfiles/excon_100.gemfile +0 -14
  70. data/gemfiles/graphql_10.gemfile +0 -16
  71. data/gemfiles/graphql_20.gemfile +0 -15
  72. data/gemfiles/grpc_10.gemfile +0 -15
  73. data/gemfiles/mongo_216.gemfile +0 -15
  74. data/gemfiles/mongo_219.gemfile +0 -12
  75. data/gemfiles/net_http_01.gemfile +0 -17
  76. data/gemfiles/rack_16.gemfile +0 -15
  77. data/gemfiles/rack_20.gemfile +0 -15
  78. data/gemfiles/rack_30.gemfile +0 -13
  79. data/gemfiles/rails_42.gemfile +0 -18
  80. data/gemfiles/rails_50.gemfile +0 -19
  81. data/gemfiles/rails_52.gemfile +0 -19
  82. data/gemfiles/rails_60.gemfile +0 -19
  83. data/gemfiles/rails_61.gemfile +0 -21
  84. data/gemfiles/rails_70.gemfile +0 -18
  85. data/gemfiles/rails_71.gemfile +0 -17
  86. data/gemfiles/rails_80.gemfile +0 -17
  87. data/gemfiles/redis_40.gemfile +0 -15
  88. data/gemfiles/redis_50.gemfile +0 -13
  89. data/gemfiles/redis_51.gemfile +0 -13
  90. data/gemfiles/resque_122.gemfile +0 -16
  91. data/gemfiles/resque_1274_3scale.gemfile +0 -17
  92. data/gemfiles/resque_20.gemfile +0 -16
  93. data/gemfiles/rest_client_16.gemfile +0 -17
  94. data/gemfiles/rest_client_20.gemfile +0 -17
  95. data/gemfiles/roda_20.gemfile +0 -16
  96. data/gemfiles/roda_30.gemfile +0 -16
  97. data/gemfiles/rubocop_162.gemfile +0 -6
  98. data/gemfiles/sequel_56.gemfile +0 -16
  99. data/gemfiles/sequel_57.gemfile +0 -16
  100. data/gemfiles/sequel_58.gemfile +0 -16
  101. data/gemfiles/shoryuken_50.gemfile +0 -16
  102. data/gemfiles/shoryuken_60.gemfile +0 -13
  103. data/gemfiles/sidekiq_42.gemfile +0 -15
  104. data/gemfiles/sidekiq_50.gemfile +0 -15
  105. data/gemfiles/sidekiq_60.gemfile +0 -12
  106. data/gemfiles/sidekiq_65.gemfile +0 -12
  107. data/gemfiles/sidekiq_70.gemfile +0 -12
  108. data/gemfiles/sinatra_14.gemfile +0 -15
  109. data/gemfiles/sinatra_22.gemfile +0 -12
  110. data/gemfiles/sinatra_30.gemfile +0 -12
  111. data/gemfiles/sinatra_40.gemfile +0 -12
  112. data/instana.gemspec +0 -53
  113. data/log/.keep +0 -0
  114. data/sonar-project.properties +0 -9
  115. data/test/activator_test.rb +0 -50
  116. data/test/backend/agent_test.rb +0 -80
  117. data/test/backend/gc_snapshot_test.rb +0 -11
  118. data/test/backend/host_agent_activation_observer_test.rb +0 -73
  119. data/test/backend/host_agent_lookup_test.rb +0 -78
  120. data/test/backend/host_agent_reporting_observer_test.rb +0 -276
  121. data/test/backend/host_agent_test.rb +0 -89
  122. data/test/backend/process_info_test.rb +0 -83
  123. data/test/backend/request_client_test.rb +0 -39
  124. data/test/backend/serverless_agent_test.rb +0 -83
  125. data/test/benchmarks/bench_id_generation.rb +0 -15
  126. data/test/benchmarks/bench_opentracing.rb +0 -16
  127. data/test/config_test.rb +0 -34
  128. data/test/frameworks/cuba_test.rb +0 -61
  129. data/test/frameworks/roda_test.rb +0 -60
  130. data/test/frameworks/sinatra_test.rb +0 -71
  131. data/test/instana_test.rb +0 -37
  132. data/test/instrumentation/aws_test.rb +0 -241
  133. data/test/instrumentation/dalli_test.rb +0 -325
  134. data/test/instrumentation/excon_test.rb +0 -204
  135. data/test/instrumentation/graphql_test.rb +0 -289
  136. data/test/instrumentation/grpc_test.rb +0 -420
  137. data/test/instrumentation/mongo_test.rb +0 -68
  138. data/test/instrumentation/net_http_test.rb +0 -220
  139. data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
  140. data/test/instrumentation/rack_test.rb +0 -415
  141. data/test/instrumentation/rails_action_cable_test.rb +0 -135
  142. data/test/instrumentation/rails_action_controller_test.rb +0 -218
  143. data/test/instrumentation/rails_action_mailer_test.rb +0 -66
  144. data/test/instrumentation/rails_action_view_test.rb +0 -154
  145. data/test/instrumentation/rails_active_job_test.rb +0 -65
  146. data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -44
  147. data/test/instrumentation/rails_active_record_test.rb +0 -116
  148. data/test/instrumentation/redis_test.rb +0 -152
  149. data/test/instrumentation/resque_test.rb +0 -188
  150. data/test/instrumentation/rest_client_test.rb +0 -106
  151. data/test/instrumentation/sequel_test.rb +0 -111
  152. data/test/instrumentation/shoryuken_test.rb +0 -47
  153. data/test/instrumentation/sidekiq-client_test.rb +0 -169
  154. data/test/instrumentation/sidekiq-worker_test.rb +0 -180
  155. data/test/secrets_test.rb +0 -112
  156. data/test/serverless_test.rb +0 -369
  157. data/test/snapshot/deltable_test.rb +0 -17
  158. data/test/snapshot/docker_container_test.rb +0 -82
  159. data/test/snapshot/fargate_container_test.rb +0 -82
  160. data/test/snapshot/fargate_process_test.rb +0 -35
  161. data/test/snapshot/fargate_task_test.rb +0 -49
  162. data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
  163. data/test/snapshot/google_cloud_run_process_test.rb +0 -33
  164. data/test/snapshot/lambda_function_test.rb +0 -37
  165. data/test/snapshot/ruby_process_test.rb +0 -32
  166. data/test/support/apps/active_record/active_record.rb +0 -24
  167. data/test/support/apps/grpc/boot.rb +0 -23
  168. data/test/support/apps/grpc/grpc_server.rb +0 -84
  169. data/test/support/apps/http_endpoint/boot.rb +0 -28
  170. data/test/support/apps/rails/boot.rb +0 -219
  171. data/test/support/apps/rails/models/block.rb +0 -21
  172. data/test/support/apps/rails/models/block6.rb +0 -21
  173. data/test/support/apps/resque/boot.rb +0 -5
  174. data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
  175. data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
  176. data/test/support/apps/sidekiq/boot.rb +0 -25
  177. data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
  178. data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
  179. data/test/support/apps/sidekiq/worker.rb +0 -37
  180. data/test/support/helpers.rb +0 -85
  181. data/test/support/mock_timer.rb +0 -20
  182. data/test/test_helper.rb +0 -69
  183. data/test/trace/custom_test.rb +0 -233
  184. data/test/trace/id_management_test.rb +0 -78
  185. data/test/trace/instrumented_logger_test.rb +0 -39
  186. data/test/trace/processor_test.rb +0 -58
  187. data/test/trace/span_context_test.rb +0 -22
  188. data/test/trace/span_test.rb +0 -179
  189. data/test/trace/tracer_async_test.rb +0 -243
  190. data/test/trace/tracer_provider_test.rb +0 -148
  191. data/test/trace/tracer_test.rb +0 -363
  192. data/test/util_test.rb +0 -10
@@ -1,289 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class GraphqlTest < Minitest::Test
7
- class TaskType < GraphQL::Schema::Object
8
- field :id, ID, null: false
9
- field :action, String, null: false
10
- end
11
-
12
- class JobType < GraphQL::Schema::Object
13
- field :id, ID, null: false
14
- field :name, String, null: false
15
- field :description, String, null: false
16
- end
17
-
18
- class TaskJobUnion < GraphQL::Schema::Union
19
- description "A union type for Task and Job"
20
- possible_types TaskType, JobType
21
-
22
- def self.resolve_type(object, _context)
23
- if !object.action.nil?
24
- TaskType
25
- elsif !object.description?
26
- JobType
27
- else
28
- raise("Unexpected object: #{object}")
29
- end
30
- end
31
- end
32
-
33
- class NewTaskType < GraphQL::Schema::Mutation
34
- argument :action, String, required: true
35
- field :task, TaskType, null: true
36
-
37
- def resolve(action:)
38
- {
39
- task: OpenStruct.new(id: '0', action: action)
40
- }
41
- end
42
- end
43
-
44
- class QueryType < GraphQL::Schema::Object
45
- field :tasks, TaskType.connection_type, null: false
46
- field :jobs, JobType.connection_type, null: false
47
- field :tasksorjobs, TaskJobUnion.connection_type, null: false
48
-
49
- def tasks()
50
- [
51
- OpenStruct.new(id: '0', action: 'Sample 00'),
52
- OpenStruct.new(id: '1', action: 'Sample 01'),
53
- OpenStruct.new(id: '2', action: 'Sample 02'),
54
- OpenStruct.new(id: '3', action: 'Sample 03'),
55
- OpenStruct.new(id: '4', action: 'Sample 04')
56
- ]
57
- end
58
-
59
- def jobs()
60
- [
61
- OpenStruct.new(id: '0', name: 'Name 00', description: 'Desc 00'),
62
- OpenStruct.new(id: '1', name: 'Name 01', description: 'Desc 01'),
63
- OpenStruct.new(id: '2', name: 'Name 02', description: 'Desc 02'),
64
- OpenStruct.new(id: '3', name: 'Name 03', description: 'Desc 03'),
65
- OpenStruct.new(id: '4', name: 'Name 04', description: 'Desc 04')
66
- ]
67
- end
68
-
69
- def tasksorjobs()
70
- [
71
- OpenStruct.new(id: '0', action: 'Task 00'),
72
- OpenStruct.new(id: '0', name: 'Job 00', description: 'Job Desc 00')
73
- ]
74
- end
75
- end
76
-
77
- class MutationType < GraphQL::Schema::Object
78
- field :create_task, mutation: NewTaskType
79
- end
80
-
81
- class Schema < GraphQL::Schema
82
- query QueryType
83
- mutation MutationType
84
- end
85
-
86
- def teardown
87
- ::Instana.config[:allow_exit_as_root] = false
88
- end
89
-
90
- def test_it_works
91
- assert defined?(GraphQL)
92
- end
93
-
94
- def test_config_defaults
95
- assert ::Instana.config[:graphql].is_a?(Hash)
96
- assert ::Instana.config[:graphql].key?(:enabled)
97
- assert_equal true, ::Instana.config[:graphql][:enabled]
98
- end
99
-
100
- def test_query
101
- clear_all!
102
-
103
- query = "query FirstTwoTaskSamples {
104
- tasks(after: \"\", first: 2) {
105
- nodes {
106
- action
107
- }
108
- }
109
- }"
110
-
111
- expected_data = {
112
- :operationName => "FirstTwoTaskSamples",
113
- :operationType => "query",
114
- :arguments => { "tasks" => ["after", "first"] },
115
- :fields => { "tasks" => ["nodes"], "nodes" => ["action"] }
116
- }
117
- expected_results = {
118
- "data" => {
119
- "tasks" => {
120
- "nodes" => [{"action" => "Sample 00"}, {"action" => "Sample 01"}]
121
- }
122
- }
123
- }
124
-
125
- results = Instana.tracer.in_span('graphql-test') { Schema.execute(query) }
126
- query_span, root_span = *Instana.processor.queued_spans
127
-
128
- assert_equal expected_results, results.to_h
129
- assert_equal :sdk, root_span[:n]
130
- assert_equal :'graphql.server', query_span[:n]
131
- assert_equal expected_data, query_span[:data][:graphql]
132
- end
133
-
134
- def test_query_as_root_exit_span
135
- clear_all!
136
-
137
- query = "query FirstTwoTaskSamples {
138
- tasks(after: \"\", first: 2) {
139
- nodes {
140
- action
141
- }
142
- }
143
- }"
144
-
145
- expected_data = {
146
- :operationName => "FirstTwoTaskSamples",
147
- :operationType => "query",
148
- :arguments => { "tasks" => ["after", "first"] },
149
- :fields => { "tasks" => ["nodes"], "nodes" => ["action"] }
150
- }
151
- expected_results = {
152
- "data" => {
153
- "tasks" => {
154
- "nodes" => [{"action" => "Sample 00"}, {"action" => "Sample 01"}]
155
- }
156
- }
157
- }
158
-
159
- ::Instana.config[:allow_exit_as_root] = true
160
- results = Schema.execute(query)
161
- ::Instana.config[:allow_exit_as_root] = false
162
- queued_spans = Instana.processor.queued_spans
163
- assert_equal 1, queued_spans.length
164
- query_span = queued_spans[0]
165
-
166
- assert_equal expected_results, results.to_h
167
- assert_equal :'graphql.server', query_span[:n]
168
- assert_equal expected_data, query_span[:data][:graphql]
169
- end
170
-
171
- def test_query_with_fragment
172
- clear_all!
173
-
174
- query = "
175
- fragment actionDetails on Task {
176
- action
177
- }
178
-
179
- query SampleWithFragment {
180
- tasks {
181
- nodes {
182
- ... actionDetails
183
- }
184
- }
185
- }"
186
-
187
- expected_data = {
188
- :operationName => "SampleWithFragment",
189
- :operationType => "query",
190
- :arguments => {},
191
- :fields => { "tasks" => ["nodes"], "nodes" => ["actionDetails"] }
192
- }
193
- expected_results = {
194
- "data" => {
195
- "tasks" => {
196
- "nodes" => [{"action" => "Sample 00"}, {"action" => "Sample 01"},
197
- {"action" => "Sample 02"}, {"action" => "Sample 03"},
198
- {"action" => "Sample 04"}]
199
- }
200
- }
201
- }
202
-
203
- results = Instana.tracer.in_span('graphql-test') { Schema.execute(query) }
204
- query_span, root_span = *Instana.processor.queued_spans
205
-
206
- assert_equal expected_results, results.to_h
207
- assert_equal :sdk, root_span[:n]
208
- assert_equal :'graphql.server', query_span[:n]
209
- assert_equal expected_data, query_span[:data][:graphql]
210
- end
211
-
212
- def test_query_union_with_fragment
213
- clear_all!
214
-
215
- query = "
216
- query QueryUnionWithFragment {
217
- tasksorjobs {
218
- nodes {
219
- ... on Task {
220
- action
221
- }
222
- ... on Job {
223
- name
224
- description
225
- }
226
- }
227
- }
228
- }"
229
-
230
- expected_data = {
231
- :operationName => "QueryUnionWithFragment",
232
- :operationType => "query",
233
- :arguments => {},
234
- :fields => { "tasksorjobs" => ["nodes"],
235
- "nodes" => ["InlineFragment", "InlineFragment"],
236
- "InlineFragment" => %w[action name description]}
237
- }
238
- expected_results = {
239
- "data" => {
240
- "tasksorjobs" => {
241
- "nodes" => [{"action" => "Task 00"},
242
- {"name" => "Job 00", "description" => "Job Desc 00"}]
243
- }
244
- }
245
- }
246
-
247
- results = Instana.tracer.in_span('graphql-test') { Schema.execute(query) }
248
- query_span, root_span = *Instana.processor.queued_spans
249
-
250
- assert_equal expected_results, results.to_h
251
- assert_equal :sdk, root_span[:n]
252
- assert_equal :'graphql.server', query_span[:n]
253
- assert_equal expected_data, query_span[:data][:graphql]
254
- end
255
-
256
- def test_mutation
257
- clear_all!
258
-
259
- query = "mutation Sample {
260
- createTask(action: \"Sample\") {
261
- task {
262
- action
263
- }
264
- }
265
- }"
266
-
267
- expected_data = {
268
- :operationName => "Sample",
269
- :operationType => "mutation",
270
- :arguments => { "createTask" => ["action"] },
271
- :fields => { "createTask" => ["task"], "task" => ["action"] }
272
- }
273
- expected_results = {
274
- "data" => {
275
- "createTask" => {
276
- "task" => { "action" => "Sample" }
277
- }
278
- }
279
- }
280
-
281
- results = Instana.tracer.in_span('graphql-test') { Schema.execute(query) }
282
- query_span, root_span = *Instana.processor.queued_spans
283
-
284
- assert_equal expected_results, results.to_h
285
- assert_equal :sdk, root_span[:n]
286
- assert_equal :'graphql.server', query_span[:n]
287
- assert_equal expected_data, query_span[:data][:graphql]
288
- end
289
- end
@@ -1,420 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- require 'test_helper'
5
- require 'support/apps/grpc/boot'
6
-
7
- class GrpcTest < Minitest::Test # rubocop:disable Metrics/ClassLength
8
- def client_stub
9
- PingPongService::Stub.new('127.0.0.1:50051', :this_channel_is_insecure)
10
- end
11
-
12
- def teardown
13
- ::Instana.config[:allow_exit_as_root] = false
14
- end
15
-
16
- def assert_client_span(client_span, call: '', call_type: '', error: nil)
17
- data = client_span[:data]
18
- assert_equal '127.0.0.1:50051', data[:rpc][:host]
19
- assert_equal :grpc, data[:rpc][:flavor]
20
- assert_equal call, data[:rpc][:call]
21
- assert_equal call_type, data[:rpc][:call_type]
22
-
23
- if error
24
- assert_equal true, data[:rpc][:error]
25
- assert data[:log][:message].include?("2:RuntimeError: #{error}")
26
- end
27
- end
28
-
29
- def assert_server_span(server_span, call: '', call_type: '', error: nil)
30
- # Span name validation
31
- assert_equal :'rpc-server', server_span[:n]
32
-
33
- data = server_span[:data]
34
- assert_equal :grpc, data[:rpc][:flavor]
35
- assert_equal call, data[:rpc][:call]
36
- assert_equal call_type, data[:rpc][:call_type]
37
-
38
- if error
39
- assert_equal true, data[:rpc][:error]
40
- assert_equal error, data[:log][:message]
41
- end
42
- end
43
-
44
- def test_request_response
45
- clear_all!
46
- response = nil
47
-
48
- Instana.tracer.in_span(:rpctests) do
49
- response = client_stub.ping(
50
- PingPongService::PingRequest.new(message: 'Hello World')
51
- )
52
- end
53
- sleep 1
54
-
55
- assert 'Hello World', response.message
56
-
57
- # Pause for a split second to allow traces to be queued
58
- sleep 0.2
59
-
60
- spans = ::Instana.processor.queued_spans
61
- sdk_span = find_spans_by_name(spans, :rpctests).first
62
- client_span = find_spans_by_name(spans, :'rpc-client').first
63
- server_span = find_spans_by_name(spans, :'rpc-server').first
64
-
65
- validate_sdk_span(sdk_span)
66
-
67
- assert_client_span(
68
- client_span,
69
- call: '/PingPongService/Ping',
70
- call_type: :request_response
71
- )
72
-
73
- assert_server_span(
74
- server_span,
75
- call: '/PingPongService/Ping',
76
- call_type: :request_response
77
- )
78
-
79
- trace_id = sdk_span[:t]
80
- assert_equal trace_id, client_span[:t]
81
- assert_equal trace_id, server_span[:t]
82
-
83
- assert_equal server_span[:p], client_span[:s]
84
- assert_equal client_span[:p], sdk_span[:s]
85
- end
86
-
87
- def test_request_response_as_root_exit_span
88
- clear_all!
89
- ::Instana.config[:allow_exit_as_root] = true
90
-
91
- response = client_stub.ping(
92
- PingPongService::PingRequest.new(message: 'Hello World')
93
- )
94
- sleep 1
95
-
96
- assert 'Hello World', response.message
97
-
98
- # Pause for a split second to allow traces to be queued
99
- sleep 0.2
100
-
101
- spans = ::Instana.processor.queued_spans
102
- client_span = find_spans_by_name(spans, :'rpc-client').first
103
- server_span = find_spans_by_name(spans, :'rpc-server').first
104
-
105
- assert_client_span(
106
- client_span,
107
- call: '/PingPongService/Ping',
108
- call_type: :request_response
109
- )
110
-
111
- assert_server_span(
112
- server_span,
113
- call: '/PingPongService/Ping',
114
- call_type: :request_response
115
- )
116
-
117
- assert_equal client_span[:t], server_span[:t]
118
- assert_equal client_span[:s], server_span[:p]
119
- assert_nil client_span[:p]
120
- end
121
-
122
- def test_client_streamer
123
- clear_all!
124
- response = nil
125
-
126
- Instana.tracer.in_span(:rpctests) do
127
- response = client_stub.ping_with_client_stream(
128
- (0..5).map do |index|
129
- PingPongService::PingRequest.new(message: index.to_s)
130
- end
131
- )
132
- end
133
- sleep 1
134
-
135
- assert '01234', response.message
136
-
137
- # Pause for a split second to allow traces to be queued
138
- sleep 0.2
139
-
140
- spans = ::Instana.processor.queued_spans
141
- sdk_span = find_spans_by_name(spans, :rpctests).first
142
- client_span = find_spans_by_name(spans, :'rpc-client').first
143
- server_span = find_spans_by_name(spans, :'rpc-server').first
144
-
145
- validate_sdk_span(sdk_span)
146
-
147
- assert_client_span(
148
- client_span,
149
- call: '/PingPongService/PingWithClientStream',
150
- call_type: :client_streamer
151
- )
152
-
153
- assert_server_span(
154
- server_span,
155
- call: '/PingPongService/PingWithClientStream',
156
- call_type: :client_streamer
157
- )
158
-
159
- trace_id = sdk_span[:t]
160
- assert_equal trace_id, client_span[:t]
161
- assert_equal trace_id, server_span[:t]
162
-
163
- assert_equal server_span[:p], client_span[:s]
164
- assert_equal client_span[:p], sdk_span[:s]
165
- end
166
-
167
- def test_server_streamer
168
- clear_all!
169
- responses = []
170
-
171
- Instana.tracer.in_span(:rpctests) do
172
- responses = client_stub.ping_with_server_stream(
173
- PingPongService::PingRequest.new(message: 'Hello World')
174
- )
175
- end
176
- assert %w(0 1 2 3 4), responses.map(&:message)
177
-
178
- # Pause for a split second to allow traces to be queued
179
- sleep 0.2
180
-
181
- spans = ::Instana.processor.queued_spans
182
- sdk_span = find_spans_by_name(spans, :rpctests).first
183
- client_span = find_spans_by_name(spans, :'rpc-client').first
184
- server_span = find_spans_by_name(spans, :'rpc-server').first
185
-
186
- validate_sdk_span(sdk_span)
187
-
188
- assert_client_span(
189
- client_span,
190
- call: '/PingPongService/PingWithServerStream',
191
- call_type: :server_streamer
192
- )
193
-
194
- assert_server_span(
195
- server_span,
196
- call: '/PingPongService/PingWithServerStream',
197
- call_type: :server_streamer
198
- )
199
-
200
- trace_id = sdk_span[:t]
201
- assert_equal trace_id, client_span[:t]
202
- assert_equal trace_id, server_span[:t]
203
-
204
- assert_equal server_span[:p], client_span[:s]
205
- assert_equal client_span[:p], sdk_span[:s]
206
- end
207
-
208
- def test_bidi_streamer
209
- clear_all!
210
- responses = []
211
-
212
- Instana.tracer.in_span(:rpctests) do
213
- responses = client_stub.ping_with_bidi_stream(
214
- (0..5).map do |index|
215
- PingPongService::PingRequest.new(message: (index * 2).to_s)
216
- end
217
- )
218
- end
219
- sleep 1
220
-
221
- assert %w(0 2 4 6 8), responses.to_a.map(&:message)
222
-
223
- # Pause for a split second to allow traces to be queued
224
- sleep 0.2
225
-
226
- spans = ::Instana.processor.queued_spans
227
- sdk_span = find_spans_by_name(spans, :rpctests).first
228
- client_span = find_spans_by_name(spans, :'rpc-client').first
229
- server_span = find_spans_by_name(spans, :'rpc-server').first
230
-
231
- validate_sdk_span(sdk_span)
232
-
233
- assert_client_span(
234
- client_span,
235
- call: '/PingPongService/PingWithBidiStream',
236
- call_type: :bidi_streamer
237
- )
238
-
239
- assert_server_span(
240
- server_span,
241
- call: '/PingPongService/PingWithBidiStream',
242
- call_type: :bidi_streamer
243
- )
244
-
245
- trace_id = sdk_span[:t]
246
- assert_equal trace_id, client_span[:t]
247
- assert_equal trace_id, server_span[:t]
248
-
249
- assert_equal server_span[:p], client_span[:s]
250
- assert_equal client_span[:p], sdk_span[:s]
251
- end
252
-
253
- def test_request_response_failure
254
- clear_all!
255
- Instana.tracer.in_span(:rpctests) do
256
- begin
257
- client_stub.fail_to_ping( PingPongService::PingRequest.new(message: 'Hello World'))
258
- rescue
259
- end
260
- end
261
-
262
- # Pause for a split second to allow traces to be queued
263
- sleep 0.2
264
-
265
- spans = ::Instana.processor.queued_spans
266
- sdk_span = find_spans_by_name(spans, :rpctests).first
267
- client_span = find_spans_by_name(spans, :'rpc-client').first
268
- server_span = find_spans_by_name(spans, :'rpc-server').first
269
-
270
- validate_sdk_span(sdk_span)
271
-
272
- assert_client_span(
273
- client_span,
274
- call: '/PingPongService/FailToPing',
275
- call_type: :request_response,
276
- error: 'Unexpected failed'
277
- )
278
- assert_server_span(
279
- server_span,
280
- call: '/PingPongService/FailToPing',
281
- call_type: :request_response,
282
- error: 'Unexpected failed'
283
- )
284
-
285
- trace_id = sdk_span[:t]
286
- assert_equal trace_id, client_span[:t]
287
- assert_equal trace_id, server_span[:t]
288
-
289
- assert_equal server_span[:p], client_span[:s]
290
- assert_equal client_span[:p], sdk_span[:s]
291
- end
292
-
293
- def test_client_streamer_failure
294
- clear_all!
295
- Instana.tracer.in_span(:rpctests) do
296
- begin
297
- client_stub.fail_to_ping_with_client_stream(
298
- (0..5).map do |index|
299
- PingPongService::PingRequest.new(message: index.to_s)
300
- end
301
- )
302
- rescue
303
- end
304
- end
305
-
306
- # Pause for a split second to allow traces to be queued
307
- sleep 0.2
308
-
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)
315
-
316
- assert_client_span(
317
- client_span,
318
- call: '/PingPongService/FailToPingWithClientStream',
319
- call_type: :client_streamer,
320
- error: 'Unexpected failed'
321
- )
322
-
323
- assert_server_span(
324
- server_span,
325
- call: '/PingPongService/FailToPingWithClientStream',
326
- call_type: :client_streamer,
327
- error: 'Unexpected failed'
328
- )
329
-
330
- trace_id = sdk_span[:t]
331
- assert_equal trace_id, client_span[:t]
332
- assert_equal trace_id, server_span[:t]
333
-
334
- assert_equal server_span[:p], client_span[:s]
335
- assert_equal client_span[:p], sdk_span[:s]
336
- end
337
-
338
- def test_server_streamer_failure
339
- clear_all!
340
- Instana.tracer.in_span(:rpctests) do
341
- begin
342
- client_stub.fail_to_ping_with_server_stream(
343
- PingPongService::PingRequest.new(message: 'Hello World')
344
- )
345
- rescue
346
- end
347
- end
348
-
349
- # Pause for a split second to allow traces to be queued
350
- sleep 0.2
351
-
352
- spans = ::Instana.processor.queued_spans
353
- sdk_span = find_spans_by_name(spans, :rpctests).first
354
- client_span = find_spans_by_name(spans, :'rpc-client').first
355
- server_span = find_spans_by_name(spans, :'rpc-server').first
356
-
357
- validate_sdk_span(sdk_span)
358
-
359
- assert_client_span(
360
- client_span,
361
- call: '/PingPongService/FailToPingWithServerStream',
362
- call_type: :server_streamer
363
- )
364
-
365
- assert_server_span(
366
- server_span,
367
- call: '/PingPongService/FailToPingWithServerStream',
368
- call_type: :server_streamer,
369
- error: 'Unexpected failed'
370
- )
371
-
372
- trace_id = sdk_span[:t]
373
- assert_equal trace_id, client_span[:t]
374
- assert_equal trace_id, server_span[:t]
375
-
376
- assert_equal server_span[:p], client_span[:s]
377
- assert_equal client_span[:p], sdk_span[:s]
378
- end
379
-
380
- def test_bidi_streamer_failure
381
- clear_all!
382
- Instana.tracer.in_span(:rpctests) do
383
- client_stub.fail_to_ping_with_bidi_stream(
384
- (0..5).map do |index|
385
- PingPongService::PingRequest.new(message: (index * 2).to_s)
386
- end
387
- )
388
- end
389
-
390
- # Pause for a split second to allow traces to be queued
391
- sleep 0.2
392
-
393
- spans = ::Instana.processor.queued_spans
394
- sdk_span = find_spans_by_name(spans, :rpctests).first
395
- client_span = find_spans_by_name(spans, :'rpc-client').first
396
- server_span = find_spans_by_name(spans, :'rpc-server').first
397
-
398
- validate_sdk_span(sdk_span)
399
-
400
- assert_client_span(
401
- client_span,
402
- call: '/PingPongService/FailToPingWithBidiStream',
403
- call_type: :bidi_streamer
404
- )
405
-
406
- assert_server_span(
407
- server_span,
408
- call: '/PingPongService/FailToPingWithBidiStream',
409
- call_type: :bidi_streamer,
410
- error: 'Unexpected failed'
411
- )
412
-
413
- trace_id = sdk_span[:t]
414
- assert_equal trace_id, client_span[:t]
415
- assert_equal trace_id, server_span[:t]
416
-
417
- assert_equal server_span[:p], client_span[:s]
418
- assert_equal client_span[:p], sdk_span[:s]
419
- end
420
- end