instana 1.11.6 → 1.209.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +263 -0
  3. data/.editorconfig +10 -0
  4. data/.github/ISSUE_TEMPLATE/bug.yml +39 -0
  5. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. data/.gitignore +3 -0
  7. data/.rubocop.yml +14 -1136
  8. data/.rubocop_todo.yml +1140 -0
  9. data/Appraisals +124 -0
  10. data/Gemfile +14 -32
  11. data/LICENSE +2 -1
  12. data/README.md +2 -6
  13. data/Rakefile +18 -49
  14. data/bin/console +8 -4
  15. data/docker-compose.yml +20 -0
  16. data/examples/opentracing.rb +4 -0
  17. data/examples/tracing.rb +4 -0
  18. data/extras/license_header.rb +44 -0
  19. data/gemfiles/.bundle/config +1 -2
  20. data/gemfiles/aws_30.gemfile +22 -0
  21. data/gemfiles/cuba_30.gemfile +18 -0
  22. data/gemfiles/dalli_20.gemfile +18 -0
  23. data/gemfiles/excon_02.gemfile +18 -0
  24. data/gemfiles/excon_021.gemfile +18 -0
  25. data/gemfiles/excon_079.gemfile +18 -0
  26. data/gemfiles/graphql_10.gemfile +18 -0
  27. data/gemfiles/grpc_10.gemfile +18 -0
  28. data/gemfiles/mongo_216.gemfile +18 -0
  29. data/gemfiles/net_http_01.gemfile +17 -0
  30. data/gemfiles/rack_16.gemfile +18 -0
  31. data/gemfiles/rack_20.gemfile +18 -0
  32. data/gemfiles/rails_42.gemfile +21 -0
  33. data/gemfiles/rails_50.gemfile +21 -0
  34. data/gemfiles/rails_52.gemfile +21 -0
  35. data/gemfiles/rails_60.gemfile +21 -0
  36. data/gemfiles/redis_40.gemfile +18 -0
  37. data/gemfiles/resque_122.gemfile +19 -0
  38. data/gemfiles/resque_20.gemfile +18 -0
  39. data/gemfiles/rest_client_16.gemfile +18 -0
  40. data/gemfiles/rest_client_20.gemfile +18 -0
  41. data/gemfiles/roda_20.gemfile +18 -0
  42. data/gemfiles/roda_30.gemfile +18 -0
  43. data/gemfiles/shoryuken_50.gemfile +19 -0
  44. data/gemfiles/sidekiq_42.gemfile +18 -0
  45. data/gemfiles/sidekiq_50.gemfile +18 -0
  46. data/gemfiles/sinatra_14.gemfile +18 -0
  47. data/instana.gemspec +8 -14
  48. data/lib/instana/activator.rb +58 -0
  49. data/lib/instana/activators/action_cable.rb +24 -0
  50. data/lib/instana/activators/action_controller_api.rb +21 -0
  51. data/lib/instana/activators/action_controller_base.rb +21 -0
  52. data/lib/instana/activators/action_mailer.rb +22 -0
  53. data/lib/instana/activators/action_view.rb +21 -0
  54. data/lib/instana/activators/active_job.rb +21 -0
  55. data/lib/instana/activators/active_record.rb +21 -0
  56. data/lib/instana/activators/aws_sdk_dynamodb.rb +20 -0
  57. data/lib/instana/activators/aws_sdk_lambda.rb +20 -0
  58. data/lib/instana/activators/aws_sdk_s3.rb +20 -0
  59. data/lib/instana/activators/aws_sdk_sns.rb +20 -0
  60. data/lib/instana/activators/aws_sdk_sqs.rb +20 -0
  61. data/lib/instana/activators/cuba.rb +21 -0
  62. data/lib/instana/activators/dalli.rb +23 -0
  63. data/lib/instana/activators/excon.rb +20 -0
  64. data/lib/instana/activators/graphql.rb +22 -0
  65. data/lib/instana/activators/grpc_client.rb +20 -0
  66. data/lib/instana/activators/grpc_server.rb +20 -0
  67. data/lib/instana/activators/mongo.rb +23 -0
  68. data/lib/instana/activators/net_http.rb +20 -0
  69. data/lib/instana/activators/rack.rb +16 -0
  70. data/lib/instana/activators/rails.rb +18 -0
  71. data/lib/instana/activators/redis.rb +20 -0
  72. data/lib/instana/activators/resque_client.rb +21 -0
  73. data/lib/instana/activators/resque_worker.rb +32 -0
  74. data/lib/instana/activators/rest_client.rb +20 -0
  75. data/lib/instana/activators/roda.rb +21 -0
  76. data/lib/instana/activators/shoryuken.rb +24 -0
  77. data/lib/instana/activators/sidekiq_client.rb +24 -0
  78. data/lib/instana/activators/sidekiq_worker.rb +24 -0
  79. data/lib/instana/activators/sinatra.rb +21 -0
  80. data/lib/instana/backend/agent.rb +68 -0
  81. data/lib/instana/backend/gc_snapshot.rb +41 -0
  82. data/lib/instana/backend/host_agent.rb +83 -0
  83. data/lib/instana/backend/host_agent_activation_observer.rb +99 -0
  84. data/lib/instana/backend/host_agent_lookup.rb +57 -0
  85. data/lib/instana/backend/host_agent_reporting_observer.rb +129 -0
  86. data/lib/instana/backend/process_info.rb +72 -0
  87. data/lib/instana/backend/request_client.rb +74 -0
  88. data/lib/instana/backend/serverless_agent.rb +116 -0
  89. data/lib/instana/base.rb +15 -29
  90. data/lib/instana/config.rb +31 -23
  91. data/lib/instana/frameworks/cuba.rb +32 -3
  92. data/lib/instana/frameworks/rails.rb +22 -32
  93. data/lib/instana/frameworks/roda.rb +41 -3
  94. data/lib/instana/frameworks/sinatra.rb +16 -3
  95. data/lib/instana/instrumentation/action_cable.rb +53 -0
  96. data/lib/instana/instrumentation/action_controller.rb +84 -0
  97. data/lib/instana/instrumentation/action_mailer.rb +22 -0
  98. data/lib/instana/instrumentation/action_view.rb +30 -0
  99. data/lib/instana/instrumentation/active_job.rb +52 -0
  100. data/lib/instana/instrumentation/active_record.rb +50 -0
  101. data/lib/instana/instrumentation/aws_sdk_dynamodb.rb +48 -0
  102. data/lib/instana/instrumentation/aws_sdk_lambda.rb +37 -0
  103. data/lib/instana/instrumentation/aws_sdk_s3.rb +55 -0
  104. data/lib/instana/instrumentation/aws_sdk_sns.rb +29 -0
  105. data/lib/instana/instrumentation/aws_sdk_sqs.rb +98 -0
  106. data/lib/instana/instrumentation/dalli.rb +10 -18
  107. data/lib/instana/instrumentation/excon.rb +73 -61
  108. data/lib/instana/instrumentation/graphql.rb +78 -0
  109. data/lib/instana/instrumentation/grpc.rb +73 -66
  110. data/lib/instana/instrumentation/instrumented_request.rb +190 -0
  111. data/lib/instana/instrumentation/mongo.rb +46 -0
  112. data/lib/instana/instrumentation/net-http.rb +54 -44
  113. data/lib/instana/instrumentation/rack.rb +57 -48
  114. data/lib/instana/instrumentation/redis.rb +13 -18
  115. data/lib/instana/instrumentation/resque.rb +28 -51
  116. data/lib/instana/instrumentation/rest-client.rb +5 -17
  117. data/lib/instana/instrumentation/shoryuken.rb +44 -0
  118. data/lib/instana/instrumentation/sidekiq-client.rb +4 -10
  119. data/lib/instana/instrumentation/sidekiq-worker.rb +4 -10
  120. data/lib/instana/instrumented_logger.rb +26 -0
  121. data/lib/instana/logger_delegator.rb +31 -0
  122. data/lib/instana/open_tracing/carrier.rb +7 -0
  123. data/lib/instana/open_tracing/instana_tracer.rb +99 -0
  124. data/lib/instana/rack.rb +4 -0
  125. data/lib/instana/secrets.rb +59 -0
  126. data/lib/instana/serverless.rb +160 -0
  127. data/lib/instana/setup.rb +36 -12
  128. data/lib/instana/snapshot/deltable.rb +25 -0
  129. data/lib/instana/snapshot/docker_container.rb +151 -0
  130. data/lib/instana/snapshot/fargate_container.rb +88 -0
  131. data/lib/instana/snapshot/fargate_process.rb +67 -0
  132. data/lib/instana/snapshot/fargate_task.rb +72 -0
  133. data/lib/instana/snapshot/google_cloud_run_instance.rb +69 -0
  134. data/lib/instana/snapshot/google_cloud_run_process.rb +58 -0
  135. data/lib/instana/snapshot/lambda_function.rb +39 -0
  136. data/lib/instana/snapshot/ruby_process.rb +48 -0
  137. data/lib/instana/tracer.rb +42 -148
  138. data/lib/instana/tracing/processor.rb +48 -21
  139. data/lib/instana/tracing/span.rb +70 -61
  140. data/lib/instana/tracing/span_context.rb +34 -2
  141. data/lib/instana/util.rb +25 -137
  142. data/lib/instana/version.rb +4 -1
  143. data/lib/instana.rb +12 -2
  144. data/lib/opentracing.rb +29 -3
  145. data/sonar-project.properties +9 -0
  146. data/test/activator_test.rb +30 -0
  147. data/test/backend/agent_test.rb +80 -0
  148. data/test/backend/gc_snapshot_test.rb +11 -0
  149. data/test/backend/host_agent_activation_observer_test.rb +73 -0
  150. data/test/backend/host_agent_lookup_test.rb +78 -0
  151. data/test/backend/host_agent_reporting_observer_test.rb +274 -0
  152. data/test/backend/host_agent_test.rb +57 -0
  153. data/test/backend/process_info_test.rb +83 -0
  154. data/test/backend/request_client_test.rb +39 -0
  155. data/test/backend/serverless_agent_test.rb +83 -0
  156. data/test/benchmarks/bench_id_generation.rb +3 -0
  157. data/test/benchmarks/bench_opentracing.rb +3 -0
  158. data/test/config_test.rb +11 -14
  159. data/test/frameworks/cuba_test.rb +44 -30
  160. data/test/frameworks/roda_test.rb +46 -30
  161. data/test/frameworks/sinatra_test.rb +52 -30
  162. data/test/instana_test.rb +14 -4
  163. data/test/instrumentation/aws_test.rb +196 -0
  164. data/test/instrumentation/dalli_test.rb +3 -0
  165. data/test/instrumentation/excon_test.rb +20 -3
  166. data/test/instrumentation/graphql_test.rb +119 -0
  167. data/test/instrumentation/grpc_test.rb +6 -2
  168. data/test/instrumentation/mongo_test.rb +37 -0
  169. data/test/instrumentation/{net-http_test.rb → net_http_test.rb} +40 -0
  170. data/test/instrumentation/rack_instrumented_request_test.rb +151 -0
  171. data/test/instrumentation/rack_test.rb +404 -0
  172. data/test/instrumentation/rails_action_cable_test.rb +131 -0
  173. data/test/{frameworks/rails/actioncontroller_test.rb → instrumentation/rails_action_controller_test.rb} +48 -17
  174. data/test/instrumentation/rails_action_mailer_test.rb +37 -0
  175. data/test/instrumentation/rails_action_view_test.rb +151 -0
  176. data/test/instrumentation/rails_active_job_test.rb +65 -0
  177. data/test/instrumentation/rails_active_record_database_missing_test.rb +43 -0
  178. data/test/instrumentation/rails_active_record_test.rb +115 -0
  179. data/test/instrumentation/redis_test.rb +13 -0
  180. data/test/instrumentation/resque_test.rb +63 -17
  181. data/test/instrumentation/{rest-client_test.rb → rest_client_test.rb} +9 -0
  182. data/test/instrumentation/shoryuken_test.rb +47 -0
  183. data/test/instrumentation/sidekiq-client_test.rb +4 -0
  184. data/test/instrumentation/sidekiq-worker_test.rb +4 -0
  185. data/test/secrets_test.rb +112 -0
  186. data/test/serverless_test.rb +369 -0
  187. data/test/snapshot/deltable_test.rb +17 -0
  188. data/test/snapshot/docker_container_test.rb +82 -0
  189. data/test/snapshot/fargate_container_test.rb +82 -0
  190. data/test/snapshot/fargate_process_test.rb +35 -0
  191. data/test/snapshot/fargate_task_test.rb +49 -0
  192. data/test/snapshot/google_cloud_run_instance_test.rb +74 -0
  193. data/test/snapshot/google_cloud_run_process_test.rb +33 -0
  194. data/test/snapshot/lambda_function_test.rb +37 -0
  195. data/test/snapshot/ruby_process_test.rb +14 -0
  196. data/test/support/apps/active_record/active_record.rb +24 -0
  197. data/test/{servers/grpc_50051.rb → support/apps/grpc/boot.rb} +4 -1
  198. data/test/{apps → support/apps/grpc}/grpc_server.rb +3 -0
  199. data/test/{servers/rackapp_6511.rb → support/apps/http_endpoint/boot.rb} +3 -0
  200. data/test/{servers/rails_3205.rb → support/apps/rails/boot.rb} +10 -13
  201. data/test/{models → support/apps/rails/models}/block.rb +4 -1
  202. data/test/{models → support/apps/rails/models}/block6.rb +3 -0
  203. data/test/support/apps/resque/boot.rb +5 -0
  204. data/test/{jobs → support/apps/resque/jobs}/resque_error_job.rb +3 -3
  205. data/test/{jobs → support/apps/resque/jobs}/resque_fast_job.rb +6 -3
  206. data/test/support/apps/sidekiq/boot.rb +25 -0
  207. data/test/{jobs → support/apps/sidekiq/jobs}/sidekiq_job_1.rb +3 -0
  208. data/test/{jobs → support/apps/sidekiq/jobs}/sidekiq_job_2.rb +3 -0
  209. data/test/{servers → support/apps}/sidekiq/worker.rb +5 -2
  210. data/test/support/helpers.rb +97 -0
  211. data/test/support/mock_timer.rb +20 -0
  212. data/test/test_helper.rb +49 -145
  213. data/test/tracing/custom_test.rb +4 -4
  214. data/test/tracing/id_management_test.rb +13 -63
  215. data/test/tracing/instrumented_logger_test.rb +39 -0
  216. data/test/tracing/opentracing_test.rb +21 -5
  217. data/test/tracing/processor_test.rb +58 -0
  218. data/test/tracing/span_context_test.rb +22 -0
  219. data/test/tracing/span_test.rb +165 -0
  220. data/test/tracing/tracer_async_test.rb +32 -0
  221. data/test/tracing/tracer_test.rb +113 -14
  222. data/test/util_test.rb +10 -0
  223. metadata +249 -160
  224. data/.travis.yml +0 -43
  225. data/Dockerfile +0 -16
  226. data/benchmarks/10k-rack-traces.rb +0 -92
  227. data/benchmarks/Gemfile +0 -7
  228. data/benchmarks/Gemfile.lock +0 -38
  229. data/benchmarks/id_generation.rb +0 -12
  230. data/benchmarks/opentracing.rb +0 -26
  231. data/benchmarks/rack_vanilla_vs_traced.rb +0 -85
  232. data/benchmarks/stackprof_rack_tracing.rb +0 -77
  233. data/benchmarks/time_processing.rb +0 -12
  234. data/gemfiles/libraries.gemfile +0 -71
  235. data/gemfiles/rails32.gemfile +0 -51
  236. data/gemfiles/rails42.gemfile +0 -50
  237. data/gemfiles/rails50.gemfile +0 -52
  238. data/gemfiles/rails52.gemfile +0 -52
  239. data/gemfiles/rails60.gemfile +0 -72
  240. data/lib/instana/agent/helpers.rb +0 -84
  241. data/lib/instana/agent/hooks.rb +0 -41
  242. data/lib/instana/agent/tasks.rb +0 -48
  243. data/lib/instana/agent.rb +0 -499
  244. data/lib/instana/collector.rb +0 -116
  245. data/lib/instana/collectors/gc.rb +0 -57
  246. data/lib/instana/collectors/memory.rb +0 -34
  247. data/lib/instana/collectors/thread.rb +0 -30
  248. data/lib/instana/eum/eum-test.js.erb +0 -17
  249. data/lib/instana/eum/eum.js.erb +0 -17
  250. data/lib/instana/frameworks/instrumentation/abstract_mysql_adapter.rb +0 -58
  251. data/lib/instana/frameworks/instrumentation/action_controller.rb +0 -183
  252. data/lib/instana/frameworks/instrumentation/action_view.rb +0 -43
  253. data/lib/instana/frameworks/instrumentation/active_record.rb +0 -27
  254. data/lib/instana/frameworks/instrumentation/mysql2_adapter.rb +0 -81
  255. data/lib/instana/frameworks/instrumentation/mysql_adapter.rb +0 -56
  256. data/lib/instana/frameworks/instrumentation/postgresql_adapter.rb +0 -85
  257. data/lib/instana/helpers.rb +0 -44
  258. data/lib/instana/instrumentation.rb +0 -25
  259. data/lib/instana/opentracing/carrier.rb +0 -4
  260. data/lib/instana/opentracing/tracer.rb +0 -18
  261. data/lib/instana/test.rb +0 -42
  262. data/lib/instana/thread_local.rb +0 -15
  263. data/lib/oj_check.rb +0 -16
  264. data/test/agent/agent_test.rb +0 -148
  265. data/test/apps/cuba.rb +0 -15
  266. data/test/apps/roda.rb +0 -10
  267. data/test/apps/sinatra.rb +0 -5
  268. data/test/frameworks/rack_test.rb +0 -200
  269. data/test/frameworks/rails/actionview3_test.rb +0 -210
  270. data/test/frameworks/rails/actionview4_test.rb +0 -208
  271. data/test/frameworks/rails/actionview5_test.rb +0 -221
  272. data/test/frameworks/rails/activerecord_test.rb +0 -227
  273. data/test/servers/helpers/sidekiq_worker_initializer.rb +0 -27
  274. data/test/tracing/trace_test.rb +0 -67
@@ -0,0 +1,115 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ require 'test_helper'
5
+ require 'support/apps/active_record/active_record'
6
+
7
+ class RailsActiveRecordTest < Minitest::Test
8
+ def setup
9
+ skip unless ENV['DATABASE_URL']
10
+ @connection = ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'])
11
+ ActiveRecord::Migration.suppress_messages do
12
+ ActiveRecord::Migration.run(CreateBlocks, direction: :up)
13
+ end
14
+ end
15
+
16
+ def teardown
17
+ ActiveRecord::Migration.suppress_messages do
18
+ ActiveRecord::Migration.run(CreateBlocks, direction: :down)
19
+ end
20
+ ActiveRecord::Base.remove_connection(@connection)
21
+ end
22
+
23
+ def test_config_defaults
24
+ assert ::Instana.config[:sanitize_sql] == true
25
+ assert ::Instana.config[:active_record].is_a?(Hash)
26
+ assert ::Instana.config[:active_record].key?(:enabled)
27
+ assert_equal true, ::Instana.config[:active_record][:enabled]
28
+ end
29
+
30
+ def test_create
31
+ Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
32
+ Block.create(name: 'core', color: 'blue')
33
+ end
34
+
35
+ spans = ::Instana.processor.queued_spans
36
+ assert_equal 2, spans.length
37
+ span = find_first_span_by_name(spans, :activerecord)
38
+ data = span[:data][:activerecord]
39
+
40
+ assert data[:sql].start_with?('INSERT INTO')
41
+ end
42
+
43
+ def test_read
44
+ Block.create(name: 'core', color: 'blue')
45
+ Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
46
+ Block.find_by(name: 'core')
47
+ end
48
+
49
+ spans = ::Instana.processor.queued_spans
50
+ assert_equal 2, spans.length
51
+ span = find_first_span_by_name(spans, :activerecord)
52
+ data = span[:data][:activerecord]
53
+
54
+ assert data[:sql].start_with?('SELECT')
55
+ end
56
+
57
+ def test_update
58
+ Block.create(name: 'core', color: 'blue')
59
+ b = Block.find_by(name: 'core')
60
+
61
+ Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
62
+ b.color = 'red'
63
+ b.save
64
+ end
65
+
66
+ spans = ::Instana.processor.queued_spans
67
+ assert_equal 2, spans.length
68
+ span = find_first_span_by_name(spans, :activerecord)
69
+ data = span[:data][:activerecord]
70
+
71
+ assert data[:sql].start_with?('UPDATE')
72
+ end
73
+
74
+ def test_delete
75
+ b = Block.create(name: 'core', color: 'blue')
76
+
77
+ Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
78
+ b.delete
79
+ end
80
+
81
+ spans = ::Instana.processor.queued_spans
82
+ assert_equal 2, spans.length
83
+ span = find_first_span_by_name(spans, :activerecord)
84
+ data = span[:data][:activerecord]
85
+
86
+ assert data[:sql].start_with?('DELETE')
87
+ end
88
+
89
+ def test_raw
90
+ Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
91
+ ActiveRecord::Base.connection.execute('SELECT 1')
92
+ end
93
+
94
+ spans = ::Instana.processor.queued_spans
95
+ assert_equal 2, spans.length
96
+ span = find_first_span_by_name(spans, :activerecord)
97
+ data = span[:data][:activerecord]
98
+
99
+ assert 'SELECT 1', data[:sql]
100
+ end
101
+
102
+ def test_raw_error
103
+ assert_raises ActiveRecord::StatementInvalid do
104
+ Instana::Tracer.start_or_continue_trace(:ar_test, {}) do
105
+ ActiveRecord::Base.connection.execute('INVALID')
106
+ end
107
+ end
108
+
109
+ spans = ::Instana.processor.queued_spans
110
+ assert_equal 2, spans.length
111
+ span = find_first_span_by_name(spans, :activerecord)
112
+
113
+ assert_equal 1, span[:ec]
114
+ end
115
+ end
@@ -1,3 +1,6 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2017
3
+
1
4
  require 'test_helper'
2
5
 
3
6
  class RedisTest < Minitest::Test
@@ -20,6 +23,16 @@ class RedisTest < Minitest::Test
20
23
  assert_redis_trace('SET')
21
24
  end
22
25
 
26
+ def test_georadius
27
+ clear_all!
28
+
29
+ Instana.tracer.start_or_continue_trace(:redis_test) do
30
+ @redis_client.georadius('Sicily', '15', '37', '200', 'km', 'WITHCOORD', 'WITHDIST')
31
+ end
32
+
33
+ assert_redis_trace('GEORADIUS')
34
+ end
35
+
23
36
  def test_normal_call_with_error
24
37
  clear_all!
25
38
 
@@ -1,15 +1,10 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2018
3
+
1
4
  require 'test_helper'
2
- require_relative "../jobs/resque_fast_job"
3
- require_relative "../jobs/resque_error_job"
4
- require 'resque'
5
-
6
- if ENV.key?('REDIS_URL')
7
- ::Resque.redis = ENV['REDIS_URL']
8
- elsif ENV.key?('REDIS_URL')
9
- ::Resque.redis = ENV['REDIS_URL']
10
- else
11
- ::Resque.redis = 'localhost:6379'
12
- end
5
+ require 'support/apps/resque/boot'
6
+
7
+ ::Resque.redis = ENV['REDIS_URL']
13
8
 
14
9
  class ResqueClientTest < Minitest::Test
15
10
  def setup
@@ -27,6 +22,7 @@ class ResqueClientTest < Minitest::Test
27
22
  ::Resque.enqueue(FastJob)
28
23
  end
29
24
 
25
+ resque_job = Resque.reserve('critical')
30
26
  spans = ::Instana.processor.queued_spans
31
27
  assert_equal 2, spans.length
32
28
 
@@ -39,6 +35,9 @@ class ResqueClientTest < Minitest::Test
39
35
  assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
40
36
  assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
41
37
  assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
38
+
39
+ assert_equal resque_job.args.first['trace_id'], resque_span[:t]
40
+ assert_equal resque_job.args.first['span_id'], resque_span[:s]
42
41
  end
43
42
 
44
43
  def test_enqueue_to
@@ -46,6 +45,7 @@ class ResqueClientTest < Minitest::Test
46
45
  ::Resque.enqueue_to(:critical, FastJob)
47
46
  end
48
47
 
48
+ resque_job = Resque.reserve('critical')
49
49
  spans = ::Instana.processor.queued_spans
50
50
  assert_equal 2, spans.length
51
51
 
@@ -57,6 +57,9 @@ class ResqueClientTest < Minitest::Test
57
57
  assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
58
58
  assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
59
59
  assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
60
+
61
+ assert_equal resque_job.args.first['trace_id'], resque_span[:t]
62
+ assert_equal resque_job.args.first['span_id'], resque_span[:s]
60
63
  end
61
64
 
62
65
  def test_dequeue
@@ -78,17 +81,58 @@ class ResqueClientTest < Minitest::Test
78
81
  end
79
82
 
80
83
  def test_worker_job
81
- Resque::Job.create(:critical, FastJob)
82
- @worker.work(0)
84
+ ::Instana.tracer.start_or_continue_trace(:'resque-client_test') do
85
+ ::Resque.enqueue_to(:critical, FastJob)
86
+ end
87
+
88
+ resque_job = Resque.reserve('critical')
89
+ @worker.work_one_job(resque_job)
83
90
 
84
91
  spans = ::Instana.processor.queued_spans
85
- assert_equal 3, spans.length
92
+ assert_equal 5, spans.length
93
+
94
+ client_span = spans[0]
95
+ resque_span = spans[4]
96
+ redis1_span = spans[3]
97
+ redis2_span = spans[2]
98
+
99
+ assert_equal :'resque-client', client_span[:n]
100
+
101
+ assert_equal :'resque-worker', resque_span[:n]
102
+ assert_equal client_span[:s], resque_span[:p]
103
+ assert_equal false, resque_span.key?(:error)
104
+ assert_equal false, resque_span.key?(:ec)
105
+ assert_equal "FastJob", resque_span[:data][:'resque-worker'][:job]
106
+ assert_equal "critical", resque_span[:data][:'resque-worker'][:queue]
107
+ assert_equal false, resque_span[:data][:'resque-worker'].key?(:error)
108
+
109
+ assert_equal :redis, redis1_span[:n]
110
+ assert_equal "SET", redis1_span[:data][:redis][:command]
111
+ assert_equal :redis, redis2_span[:n]
112
+ assert_equal "SET", redis2_span[:data][:redis][:command]
113
+ end
114
+
115
+ def test_worker_job_no_propagate
116
+ ::Instana.config[:'resque-client'][:propagate] = false
117
+ ::Instana.tracer.start_or_continue_trace(:'resque-client_test') do
118
+ ::Resque.enqueue_to(:critical, FastJob)
119
+ end
120
+
121
+ resque_job = Resque.reserve('critical')
122
+ @worker.work_one_job(resque_job)
123
+
124
+ spans = ::Instana.processor.queued_spans
125
+ assert_equal 5, spans.length
126
+
127
+ client_span = spans[0]
128
+ resque_span = spans[4]
129
+ redis1_span = spans[3]
130
+ redis2_span = spans[2]
86
131
 
87
- resque_span = spans[2]
88
- redis1_span = spans[1]
89
- redis2_span = spans[0]
132
+ assert_equal :'resque-client', client_span[:n]
90
133
 
91
134
  assert_equal :'resque-worker', resque_span[:n]
135
+ refute_equal client_span[:s], resque_span[:p]
92
136
  assert_equal false, resque_span.key?(:error)
93
137
  assert_equal false, resque_span.key?(:ec)
94
138
  assert_equal "FastJob", resque_span[:data][:'resque-worker'][:job]
@@ -99,6 +143,8 @@ class ResqueClientTest < Minitest::Test
99
143
  assert_equal "SET", redis1_span[:data][:redis][:command]
100
144
  assert_equal :redis, redis2_span[:n]
101
145
  assert_equal "SET", redis2_span[:data][:redis][:command]
146
+ ensure
147
+ ::Instana.config[:'resque-client'][:propagate] = true
102
148
  end
103
149
 
104
150
  def test_worker_error_job
@@ -1,6 +1,15 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2016
3
+
1
4
  require 'test_helper'
5
+ require 'support/apps/http_endpoint/boot'
2
6
 
3
7
  class RestClientTest < Minitest::Test
8
+ def setup
9
+ # See https://github.com/rest-client/rest-client/issues/612
10
+ OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ciphers] = OpenSSL::SSL::SSLContext.new.ciphers
11
+ end
12
+
4
13
  def test_config_defaults
5
14
  assert ::Instana.config[:'rest-client'].is_a?(Hash)
6
15
  assert ::Instana.config[:'rest-client'].key?(:enabled)
@@ -0,0 +1,47 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ require 'test_helper'
5
+ require 'ostruct'
6
+
7
+ class ShoryukenTest < Minitest::Test
8
+ def setup
9
+ clear_all!
10
+ @middleware = Instana::Instrumentation::Shoryuken.new
11
+ end
12
+
13
+ def test_start_trace_with_context
14
+ id = Instana::Util.generate_id
15
+ message = OpenStruct.new(
16
+ queue_url: 'http://example.com',
17
+ message_attributes: {
18
+ "X_INSTANA_T" => OpenStruct.new(string_value: id),
19
+ "X_INSTANA_S" => OpenStruct.new(string_value: id),
20
+ "X_INSTANA_L" => OpenStruct.new(string_value: '1')
21
+ }
22
+ )
23
+
24
+ @middleware.call(nil, nil, message, nil) {}
25
+
26
+ span = ::Instana.processor.queued_spans.first
27
+
28
+ assert_equal id, span[:t]
29
+ assert_equal id, span[:p]
30
+ assert_equal 'entry', span[:data][:sqs][:sort]
31
+ assert_equal 'http://example.com', span[:data][:sqs][:queue]
32
+ end
33
+
34
+ def test_start_trace
35
+ message = OpenStruct.new(
36
+ queue_url: 'http://example.com'
37
+ )
38
+
39
+ @middleware.call(nil, nil, message, nil) {}
40
+
41
+ span = ::Instana.processor.queued_spans.first
42
+
43
+ assert_nil span[:p]
44
+ assert_equal 'entry', span[:data][:sqs][:sort]
45
+ assert_equal 'http://example.com', span[:data][:sqs][:queue]
46
+ end
47
+ end
@@ -1,4 +1,8 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2017
3
+
1
4
  require 'test_helper'
5
+ require 'support/apps/sidekiq/boot'
2
6
 
3
7
  class SidekiqClientTest < Minitest::Test
4
8
  def setup
@@ -1,4 +1,8 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2017
3
+
1
4
  require 'test_helper'
5
+ require 'support/apps/sidekiq/boot'
2
6
 
3
7
  class SidekiqServerTest < Minitest::Test
4
8
  def setup
@@ -0,0 +1,112 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ require 'test_helper'
5
+
6
+ class SecretsTest < Minitest::Test
7
+ def setup
8
+ @subject = Instana::Secrets.new(logger: Logger.new('/dev/null'))
9
+ end
10
+
11
+ def test_equals_ignore_case
12
+ sample_config = {
13
+ "matcher"=>"equals-ignore-case",
14
+ "list"=>["key"]
15
+ }
16
+
17
+ url = url_for(%w(key Str kEy KEY))
18
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(key kEy KEY)
19
+ end
20
+
21
+ def test_equals
22
+ sample_config = {
23
+ "matcher"=>"equals",
24
+ "list"=>["key", "kEy"]
25
+ }
26
+
27
+ url = url_for(%w(key Str kEy KEY))
28
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(key kEy)
29
+ end
30
+
31
+ def test_contains_ignore_case
32
+ sample_config = {
33
+ "matcher"=>"contains-ignore-case",
34
+ "list"=>["stan"]
35
+ }
36
+
37
+ url = url_for(%w(instantiate conTESTant sample))
38
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(instantiate conTESTant)
39
+ end
40
+
41
+ def test_contains
42
+ sample_config = {
43
+ "matcher"=>"contains",
44
+ "list"=>["stan"]
45
+ }
46
+
47
+ url = url_for(%w(instantiate conTESTant sample))
48
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(instantiate)
49
+ end
50
+
51
+ def test_regexp
52
+ sample_config = {
53
+ "matcher"=>"regex",
54
+ "list"=>["l{2}"]
55
+ }
56
+
57
+ url = url_for(%w(ball foot move))
58
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(ball)
59
+ end
60
+
61
+ def test_invalid
62
+ sample_config = {
63
+ "matcher"=>"test_invalid",
64
+ "list"=>["key"]
65
+ }
66
+
67
+ url = url_for(%w(key Str kEy KEY))
68
+ assert_redacted @subject.remove_from_query(url, sample_config), []
69
+ end
70
+
71
+ def test_without_scheme
72
+ sample_config = {
73
+ "matcher"=>"contains",
74
+ "list"=>["stan"]
75
+ }
76
+
77
+ url = 'example.com?instantiate=true'
78
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(instantiate)
79
+ end
80
+
81
+ def test_without_url
82
+ sample_config = {
83
+ "matcher"=>"contains",
84
+ "list"=>["stan"]
85
+ }
86
+
87
+ url = 'filter[instantiate]=true'
88
+ assert_redacted @subject.remove_from_query(url, sample_config), %w(filter[instantiate]), raw_str: true
89
+ end
90
+
91
+ def test_with_nil
92
+ sample_config = {
93
+ "matcher"=>"contains",
94
+ "list"=>["stan"]
95
+ }
96
+
97
+ assert_equal @subject.remove_from_query(nil, sample_config), nil
98
+ end
99
+
100
+ private
101
+
102
+ def url_for(keys)
103
+ url = URI('http://example.com')
104
+ url.query = URI.encode_www_form(keys.map { |k| [k, rand(1..100)]})
105
+ url.to_s
106
+ end
107
+
108
+ def assert_redacted(str, keys, raw_str: false)
109
+ params = raw_str ? CGI.parse(str) : CGI.parse(URI(str).query)
110
+ assert_equal keys, params.select { |_, v| v == %w(<redacted>) }.keys, 'to be redacted'
111
+ end
112
+ end