instana 1.10.1-java

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 (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,87 @@
1
+ require 'test_helper'
2
+ require 'active_record'
3
+
4
+ class ActiveRecordTest < Minitest::Test
5
+ def test_config_defaults
6
+ assert ::Instana.config[:active_record].is_a?(Hash)
7
+ assert ::Instana.config[:active_record].key?(:enabled)
8
+ assert_equal true, ::Instana.config[:active_record][:enabled]
9
+ end
10
+
11
+ def test_postgresql
12
+ skip unless ::Instana::Test.postgresql?
13
+
14
+ clear_all!
15
+
16
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/db'))
17
+
18
+ traces = Instana.processor.queued_traces
19
+ assert_equal 1, traces.length
20
+ trace = traces.first
21
+
22
+ assert_equal 6, trace.spans.length
23
+ spans = trace.spans.to_a
24
+ first_span = spans[0]
25
+ second_span = spans[2]
26
+ third_span = spans[3]
27
+ fourth_span = spans[4]
28
+
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
+
34
+ assert_equal "INSERT INTO \"blocks\" (\"name\", \"color\", \"created_at\", \"updated_at\") VALUES ($?, $?, $?, $?) RETURNING \"id\"", second_span[:data][:activerecord][:sql]
35
+ assert_equal "SELECT \"blocks\".* FROM \"blocks\" WHERE \"blocks\".\"name\" = $? ORDER BY \"blocks\".\"id\" ASC LIMIT $?", third_span[:data][:activerecord][:sql]
36
+ assert_equal "DELETE FROM \"blocks\" WHERE \"blocks\".\"id\" = $?", fourth_span[:data][:activerecord][:sql]
37
+
38
+ assert_equal "postgresql", second_span[:data][:activerecord][:adapter]
39
+ assert_equal "postgresql", third_span[:data][:activerecord][:adapter]
40
+ assert_equal "postgresql", fourth_span[:data][:activerecord][:adapter]
41
+
42
+ assert_equal ENV['TRAVIS_PSQL_HOST'], second_span[:data][:activerecord][:host]
43
+ assert_equal ENV['TRAVIS_PSQL_HOST'], third_span[:data][:activerecord][:host]
44
+ assert_equal ENV['TRAVIS_PSQL_HOST'], fourth_span[:data][:activerecord][:host]
45
+
46
+ assert_equal "postgres", second_span[:data][:activerecord][:username]
47
+ assert_equal "postgres", third_span[:data][:activerecord][:username]
48
+ assert_equal "postgres", fourth_span[:data][:activerecord][:username]
49
+ end
50
+
51
+ def test_mysql2
52
+ skip unless ::Instana::Test.mysql2?
53
+
54
+ clear_all!
55
+
56
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/db'))
57
+
58
+ spans = ::Instana.processor.queued_spans
59
+ assert_equal 6, spans.length
60
+
61
+ first_span = spans[5]
62
+ second_span = spans[0]
63
+ third_span = spans[1]
64
+ fourth_span = spans[2]
65
+
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]
70
+
71
+ assert_equal "INSERT INTO `blocks` (`name`, `color`, `created_at`, `updated_at`) VALUES (?, ?, ?, ?)", second_span[:data][:activerecord][:sql]
72
+ assert_equal "SELECT `blocks`.* FROM `blocks` WHERE `blocks`.`name` = ? ORDER BY `blocks`.`id` ASC LIMIT ?", third_span[:data][:activerecord][:sql]
73
+ assert_equal "DELETE FROM `blocks` WHERE `blocks`.`id` = ?", fourth_span[:data][:activerecord][:sql]
74
+
75
+ assert_equal "mysql2", second_span[:data][:activerecord][:adapter]
76
+ assert_equal "mysql2", third_span[:data][:activerecord][:adapter]
77
+ assert_equal "mysql2", fourth_span[:data][:activerecord][:adapter]
78
+
79
+ assert_equal ENV['TRAVIS_MYSQL_HOST'], second_span[:data][:activerecord][:host]
80
+ assert_equal ENV['TRAVIS_MYSQL_HOST'], third_span[:data][:activerecord][:host]
81
+ assert_equal ENV['TRAVIS_MYSQL_HOST'], fourth_span[:data][:activerecord][:host]
82
+
83
+ assert_equal ENV['TRAVIS_MYSQL_USER'], second_span[:data][:activerecord][:username]
84
+ assert_equal ENV['TRAVIS_MYSQL_USER'], third_span[:data][:activerecord][:username]
85
+ assert_equal ENV['TRAVIS_MYSQL_USER'], fourth_span[:data][:activerecord][:username]
86
+ end
87
+ end
@@ -0,0 +1,44 @@
1
+
2
+ if defined?(::Roda)
3
+ require 'test_helper'
4
+ require File.expand_path(File.dirname(__FILE__) + '/../apps/roda')
5
+ require 'rack/test'
6
+
7
+ class RodaTest < Minitest::Test
8
+ include Rack::Test::Methods
9
+
10
+ def app
11
+ InstanaRodaApp
12
+ end
13
+
14
+ def test_basic_get
15
+ clear_all!
16
+
17
+ r = get '/hello'
18
+ assert last_response.ok?
19
+
20
+ assert r.headers.key?("X-Instana-T")
21
+ assert r.headers.key?("X-Instana-S")
22
+
23
+ spans = ::Instana.processor.queued_spans
24
+ assert_equal 1, spans.count
25
+
26
+ first_span = spans.first
27
+ assert_equal :rack, first_span[:n]
28
+ assert first_span.key?(:data)
29
+ assert first_span[:data].key?(:http)
30
+
31
+ assert first_span[:data][:http].key?(:method)
32
+ assert_equal "GET", first_span[:data][:http][:method]
33
+
34
+ assert first_span[:data][:http].key?(:url)
35
+ assert_equal "/hello", first_span[:data][:http][:url]
36
+
37
+ assert first_span[:data][:http].key?(:status)
38
+ assert_equal 200, first_span[:data][:http][:status]
39
+
40
+ assert first_span[:data][:http].key?(:host)
41
+ assert_equal "example.org", first_span[:data][:http][:host]
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+
2
+ if defined?(::Sinatra)
3
+ require 'test_helper'
4
+ require File.expand_path(File.dirname(__FILE__) + '/../apps/sinatra')
5
+ require 'rack/test'
6
+
7
+ class SinatraTest < Minitest::Test
8
+ include Rack::Test::Methods
9
+
10
+ def app
11
+ InstanaSinatraApp
12
+ end
13
+
14
+ def test_basic_get
15
+ clear_all!
16
+
17
+ r = get '/'
18
+ assert last_response.ok?
19
+
20
+ assert r.headers.key?("X-Instana-T")
21
+ assert r.headers.key?("X-Instana-S")
22
+
23
+ spans = ::Instana.processor.queued_spans
24
+ assert_equal 1, spans.count
25
+
26
+ first_span = spans.first
27
+ assert_equal :rack, first_span[:n]
28
+ assert first_span.key?(:data)
29
+ assert first_span[:data].key?(:http)
30
+
31
+ assert first_span[:data][:http].key?(:method)
32
+ assert_equal "GET", first_span[:data][:http][:method]
33
+
34
+ assert first_span[:data][:http].key?(:url)
35
+ assert_equal "/", first_span[:data][:http][:url]
36
+
37
+ assert first_span[:data][:http].key?(:status)
38
+ assert_equal 200, first_span[:data][:http][:status]
39
+
40
+ assert first_span[:data][:http].key?(:host)
41
+ assert_equal "example.org", first_span[:data][:http][:host]
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class InstanaTest < Minitest::Test
4
+ def test_that_it_has_a_version_number
5
+ refute_nil ::Instana::VERSION
6
+ end
7
+
8
+ def test_that_it_has_a_logger
9
+ refute_nil ::Instana.logger
10
+ end
11
+
12
+ def test_that_it_has_an_agent
13
+ refute_nil ::Instana.agent
14
+ end
15
+
16
+ def test_that_it_has_a_collector
17
+ refute_nil ::Instana.collector
18
+ end
19
+
20
+ def test_that_it_has_a_tracer
21
+ refute_nil ::Instana.tracer
22
+ end
23
+
24
+ def test_that_it_has_a_config
25
+ refute_nil ::Instana.config
26
+ end
27
+ end
@@ -0,0 +1,253 @@
1
+ require 'test_helper'
2
+
3
+ class DalliTest < Minitest::Test
4
+ def setup
5
+ @memcached_host = ENV['MEMCACHED_HOST'] || '127.0.0.1:11211'
6
+ @dc = Dalli::Client.new(@memcached_host, :namespace => "instana_test")
7
+ end
8
+
9
+ def test_config_defaults
10
+ assert ::Instana.config[:dalli].is_a?(Hash)
11
+ assert ::Instana.config[:dalli].key?(:enabled)
12
+ assert_equal true, ::Instana.config[:dalli][:enabled]
13
+ end
14
+
15
+ def test_basic_get
16
+ clear_all!
17
+
18
+ @dc.set(:instana, :boom)
19
+
20
+ result = nil
21
+ ::Instana.tracer.start_or_continue_trace(:dalli_test) do
22
+ result = @dc.get(:instana)
23
+ end
24
+
25
+ assert_equal :boom, result
26
+
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]
36
+ assert_equal false, second_span.key?(:error)
37
+ assert second_span[:p] == first_span[:s]
38
+ assert first_span[:t] == first_span[:s]
39
+ assert second_span[:data].key?(:memcache)
40
+ assert second_span[:data][:memcache].key?(:command)
41
+ assert_equal :get, second_span[:data][:memcache][:command]
42
+ assert second_span[:data][:memcache].key?(:key)
43
+ assert_equal :instana, second_span[:data][:memcache][:key]
44
+ assert second_span[:data][:memcache].key?(:namespace)
45
+ assert_equal 'instana_test', second_span[:data][:memcache][:namespace]
46
+ assert second_span[:data][:memcache].key?(:server)
47
+ assert_equal ENV['MEMCACHED_HOST'], second_span[:data][:memcache][:server]
48
+ end
49
+
50
+ def test_basic_set
51
+ clear_all!
52
+
53
+ result = nil
54
+ ::Instana.tracer.start_or_continue_trace(:dalli_test) do
55
+ result = @dc.set(:instana, :rocks)
56
+ end
57
+
58
+ assert result.is_a?(Integer)
59
+
60
+ spans = ::Instana.processor.queued_spans
61
+ assert_equal 2, spans.length
62
+
63
+ first_span = spans[1]
64
+ second_span = spans[0]
65
+
66
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
67
+
68
+ assert_equal :memcache, second_span[:n]
69
+ assert_equal false, second_span.key?(:error)
70
+ assert second_span[:p] == first_span[:s]
71
+ assert first_span[:t] == first_span[:s]
72
+ assert second_span[:data].key?(:memcache)
73
+ assert second_span[:data][:memcache].key?(:command)
74
+ assert_equal :set, second_span[:data][:memcache][:command]
75
+ assert second_span[:data][:memcache].key?(:key)
76
+ assert_equal :instana, second_span[:data][:memcache][:key]
77
+ assert second_span[:data][:memcache].key?(:namespace)
78
+ assert_equal 'instana_test', second_span[:data][:memcache][:namespace]
79
+ assert second_span[:data][:memcache].key?(:server)
80
+ assert_equal ENV['MEMCACHED_HOST'], second_span[:data][:memcache][:server]
81
+ end
82
+
83
+ def test_replace
84
+ clear_all!
85
+
86
+ @dc.set(:instana, :rocks)
87
+ result = nil
88
+ ::Instana.tracer.start_or_continue_trace(:dalli_test) do
89
+ result = @dc.replace(:instana, :rocks)
90
+ end
91
+
92
+ assert result.is_a?(Integer)
93
+
94
+ spans = ::Instana.processor.queued_spans
95
+ assert_equal 2, spans.length
96
+
97
+ first_span = spans[1]
98
+ second_span = spans[0]
99
+
100
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
101
+
102
+ assert_equal :memcache, second_span[:n]
103
+ assert_equal false, second_span.key?(:error)
104
+ assert second_span[:p] == first_span[:s]
105
+ assert first_span[:t] == first_span[:s]
106
+ assert second_span[:data].key?(:memcache)
107
+ assert second_span[:data][:memcache].key?(:command)
108
+ assert_equal :replace, second_span[:data][:memcache][:command]
109
+ assert second_span[:data][:memcache].key?(:key)
110
+ assert_equal :instana, second_span[:data][:memcache][:key]
111
+ assert second_span[:data][:memcache].key?(:namespace)
112
+ assert_equal 'instana_test', second_span[:data][:memcache][:namespace]
113
+ assert second_span[:data][:memcache].key?(:server)
114
+ assert_equal ENV['MEMCACHED_HOST'], second_span[:data][:memcache][:server]
115
+ end
116
+
117
+ def test_delete
118
+ clear_all!
119
+
120
+ @dc.set(:instana, :rocks)
121
+ result = nil
122
+ ::Instana.tracer.start_or_continue_trace(:dalli_test) do
123
+ result = @dc.delete(:instana)
124
+ end
125
+
126
+ assert_equal true, result
127
+
128
+ spans = ::Instana.processor.queued_spans
129
+ assert_equal 2, spans.length
130
+
131
+ first_span = spans[1]
132
+ second_span = spans[0]
133
+
134
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
135
+
136
+ assert_equal :memcache, second_span[:n]
137
+ assert_equal false, second_span.key?(:error)
138
+ assert second_span[:p] == first_span[:s]
139
+ assert first_span[:t] == first_span[:s]
140
+ assert second_span[:data].key?(:memcache)
141
+ assert second_span[:data][:memcache].key?(:command)
142
+ assert_equal :delete, second_span[:data][:memcache][:command]
143
+ assert second_span[:data][:memcache].key?(:key)
144
+ assert_equal :instana, second_span[:data][:memcache][:key]
145
+ assert second_span[:data][:memcache].key?(:namespace)
146
+ assert_equal 'instana_test', second_span[:data][:memcache][:namespace]
147
+ assert second_span[:data][:memcache].key?(:server)
148
+ assert_equal ENV['MEMCACHED_HOST'], second_span[:data][:memcache][:server]
149
+ end
150
+
151
+ def test_incr
152
+ clear_all!
153
+
154
+ result = nil
155
+ @dc.set(:counter, 0, nil, :raw => true)
156
+ ::Instana.tracer.start_or_continue_trace(:dalli_test) do
157
+ result = @dc.incr(:counter, 1, nil, 0)
158
+ end
159
+
160
+ assert_equal 1, result
161
+
162
+ spans = ::Instana.processor.queued_spans
163
+ assert_equal 2, spans.length
164
+
165
+ first_span = spans[1]
166
+ second_span = spans[0]
167
+
168
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
169
+
170
+ assert_equal :memcache, second_span[:n]
171
+ assert_equal false, second_span.key?(:error)
172
+ assert second_span[:p] == first_span[:s]
173
+ assert first_span[:t] == first_span[:s]
174
+ assert second_span[:data].key?(:memcache)
175
+ assert second_span[:data][:memcache].key?(:command)
176
+ assert_equal :incr, second_span[:data][:memcache][:command]
177
+ assert second_span[:data][:memcache].key?(:key)
178
+ assert_equal :counter, second_span[:data][:memcache][:key]
179
+ assert second_span[:data][:memcache].key?(:namespace)
180
+ assert_equal 'instana_test', second_span[:data][:memcache][:namespace]
181
+ assert second_span[:data][:memcache].key?(:server)
182
+ assert_equal ENV['MEMCACHED_HOST'], second_span[:data][:memcache][:server]
183
+ end
184
+
185
+ def test_decr
186
+ clear_all!
187
+
188
+ result = nil
189
+ @dc.set(:counter, 0, nil, :raw => true)
190
+ ::Instana.tracer.start_or_continue_trace(:dalli_test) do
191
+ result = @dc.decr(:counter, 1, nil, 0)
192
+ end
193
+
194
+ assert_equal 0, result
195
+
196
+ spans = ::Instana.processor.queued_spans
197
+ assert_equal 2, spans.length
198
+
199
+ first_span = spans[1]
200
+ second_span = spans[0]
201
+
202
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
203
+
204
+ assert_equal :memcache, second_span[:n]
205
+ assert_equal false, second_span.key?(:error)
206
+ assert second_span[:p] == first_span[:s]
207
+ assert first_span[:t] == first_span[:s]
208
+ assert second_span[:data].key?(:memcache)
209
+ assert second_span[:data][:memcache].key?(:command)
210
+ assert_equal :decr, second_span[:data][:memcache][:command]
211
+ assert second_span[:data][:memcache].key?(:key)
212
+ assert_equal :counter, second_span[:data][:memcache][:key]
213
+ assert second_span[:data][:memcache].key?(:namespace)
214
+ assert_equal 'instana_test', second_span[:data][:memcache][:namespace]
215
+ assert second_span[:data][:memcache].key?(:server)
216
+ assert_equal ENV['MEMCACHED_HOST'], second_span[:data][:memcache][:server]
217
+ end
218
+
219
+ def test_get_multi
220
+ clear_all!
221
+
222
+ @dc.set(:one, 1)
223
+ @dc.set(:three, 3)
224
+
225
+ ::Instana.tracer.start_or_continue_trace(:dalli_test) do
226
+ @dc.get_multi(:one, :two, :three, :four)
227
+ end
228
+
229
+ spans = ::Instana.processor.queued_spans
230
+ assert_equal 2, spans.length
231
+
232
+ first_span = spans[1]
233
+ second_span = spans[0]
234
+
235
+ validate_sdk_span(first_span, {:name => :dalli_test, :type => :intermediate})
236
+
237
+ assert_equal :memcache, second_span[:n]
238
+ assert_equal false, second_span.key?(:error)
239
+ assert second_span[:p] == first_span[:s]
240
+ assert first_span[:t] == first_span[:s]
241
+ assert second_span[:data].key?(:memcache)
242
+ assert second_span[:data][:memcache].key?(:command)
243
+ assert_equal :get_multi, second_span[:data][:memcache][:command]
244
+ assert second_span[:data][:memcache].key?(:keys)
245
+ assert_equal "one, two, three, four", second_span[:data][:memcache][:keys]
246
+ assert second_span[:data][:memcache].key?(:namespace)
247
+ assert_equal 'instana_test', second_span[:data][:memcache][:namespace]
248
+ assert second_span[:data][:memcache].key?(:server)
249
+ assert_equal ENV['MEMCACHED_HOST'], second_span[:data][:memcache][:server]
250
+ assert second_span[:data][:memcache].key?(:hits)
251
+ assert_equal 2, second_span[:data][:memcache][:hits]
252
+ end
253
+ end