instana 1.11.4 → 1.12.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.
@@ -1,4 +1,4 @@
1
-
1
+ require 'sinatra'
2
2
  if defined?(::Sinatra)
3
3
  require 'test_helper'
4
4
  require File.expand_path(File.dirname(__FILE__) + '/../apps/sinatra')
@@ -17,28 +17,50 @@ if defined?(::Sinatra)
17
17
  r = get '/'
18
18
  assert last_response.ok?
19
19
 
20
- assert r.headers.key?("X-Instana-T")
21
- assert r.headers.key?("X-Instana-S")
22
20
 
23
21
  spans = ::Instana.processor.queued_spans
24
22
  assert_equal 1, spans.count
25
23
 
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)
24
+ rack_span = spans.first
25
+ assert_equal :rack, rack_span[:n]
26
+ # ::Instana::Util.pry!
30
27
 
31
- assert first_span[:data][:http].key?(:method)
32
- assert_equal "GET", first_span[:data][:http][:method]
28
+ assert r.headers.key?("X-Instana-T")
29
+ assert r.headers["X-Instana-T"] == ::Instana::Util.id_to_header(rack_span[:t])
30
+ assert r.headers.key?("X-Instana-S")
31
+ assert r.headers["X-Instana-S"] == ::Instana::Util.id_to_header(rack_span[:s])
32
+ assert r.headers.key?("X-Instana-L")
33
+ assert r.headers["X-Instana-L"] == '1'
34
+ assert r.headers.key?("Server-Timing")
35
+ assert r.headers["Server-Timing"] == "intid;desc=#{::Instana::Util.id_to_header(rack_span[:t])}"
36
+
37
+ assert rack_span.key?(:data)
38
+ assert rack_span[:data].key?(:http)
39
+ assert rack_span[:data][:http].key?(:method)
40
+ assert_equal "GET", rack_span[:data][:http][:method]
33
41
 
34
- assert first_span[:data][:http].key?(:url)
35
- assert_equal "/", first_span[:data][:http][:url]
42
+ assert rack_span[:data][:http].key?(:url)
43
+ assert_equal "/", rack_span[:data][:http][:url]
36
44
 
37
- assert first_span[:data][:http].key?(:status)
38
- assert_equal 200, first_span[:data][:http][:status]
45
+ assert rack_span[:data][:http].key?(:status)
46
+ assert_equal 200, rack_span[:data][:http][:status]
39
47
 
40
- assert first_span[:data][:http].key?(:host)
41
- assert_equal "example.org", first_span[:data][:http][:host]
48
+ assert rack_span[:data][:http].key?(:host)
49
+ assert_equal "example.org", rack_span[:data][:http][:host]
50
+ end
51
+
52
+ def test_path_template
53
+ clear_all!
54
+
55
+ r = get '/greet/instana'
56
+ assert last_response.ok?
57
+
58
+ spans = ::Instana.processor.queued_spans
59
+ assert_equal 1, spans.count
60
+
61
+ first_span = spans.first
62
+ assert_equal :rack, first_span[:n]
63
+ assert_equal '/greet/:name', first_span[:data][:http][:path_tpl]
42
64
  end
43
65
  end
44
66
  end
@@ -14,7 +14,7 @@ class GrpcTest < Minitest::Test
14
14
 
15
15
  if error
16
16
  assert_equal true, data[:rpc][:error]
17
- assert_equal "2:RuntimeError: #{error}", data[:log][:message]
17
+ assert data[:log][:message].include?("2:RuntimeError: #{error}")
18
18
  end
19
19
  end
20
20
 
@@ -1,40 +1,44 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class RedisTest < Minitest::Test
4
+ def setup
5
+ if ENV.key?('REDIS_URL')
6
+ @redis_url = ENV['REDIS_URL']
7
+ else
8
+ @redis_url = "redis://localhost:6379"
9
+ end
10
+ @redis_client = Redis.new(url: @redis_url)
11
+ end
12
+
4
13
  def test_normal_call
5
14
  clear_all!
6
- redis_client = create_redis_client
7
15
 
8
16
  Instana.tracer.start_or_continue_trace(:redis_test) do
9
- redis_client.set('hello', 'world')
17
+ @redis_client.set('hello', 'world')
10
18
  end
11
- redis_client.disconnect!
12
19
 
13
20
  assert_redis_trace('SET')
14
21
  end
15
22
 
16
23
  def test_normal_call_with_error
17
24
  clear_all!
18
- redis_client = create_redis_client
19
25
 
20
26
  Instana.tracer.start_or_continue_trace(:redis_test) do
21
27
  begin
22
- redis_client.zadd('hello', 'invalid', 'value')
28
+ @redis_client.zadd('hello', 'invalid', 'value')
23
29
  rescue; end
24
30
  end
25
- redis_client.disconnect!
26
31
 
27
32
  assert_redis_trace('ZADD', with_error: 'ERR value is not a valid float')
28
33
  end
29
34
 
30
35
  def test_pipeline_call
31
36
  clear_all!
32
- redis_client = create_redis_client
33
37
 
34
38
  Instana.tracer.start_or_continue_trace(:redis_test) do
35
- redis_client.pipelined do
36
- redis_client.set('hello', 'world')
37
- redis_client.set('other', 'world')
39
+ @redis_client.pipelined do
40
+ @redis_client.set('hello', 'world')
41
+ @redis_client.set('other', 'world')
38
42
  end
39
43
  end
40
44
 
@@ -43,13 +47,12 @@ class RedisTest < Minitest::Test
43
47
 
44
48
  def test_pipeline_call_with_error
45
49
  clear_all!
46
- redis_client = create_redis_client
47
50
 
48
51
  Instana.tracer.start_or_continue_trace(:redis_test) do
49
52
  begin
50
- redis_client.pipelined do
51
- redis_client.set('other', 'world')
52
- redis_client.call('invalid')
53
+ @redis_client.pipelined do
54
+ @redis_client.set('other', 'world')
55
+ @redis_client.call('invalid')
53
56
  end
54
57
  rescue; end
55
58
  end
@@ -59,12 +62,11 @@ class RedisTest < Minitest::Test
59
62
 
60
63
  def test_multi_call
61
64
  clear_all!
62
- redis_client = create_redis_client
63
65
 
64
66
  Instana.tracer.start_or_continue_trace(:redis_test) do
65
- redis_client.multi do
66
- redis_client.set('hello', 'world')
67
- redis_client.set('other', 'world')
67
+ @redis_client.multi do
68
+ @redis_client.set('hello', 'world')
69
+ @redis_client.set('other', 'world')
68
70
  end
69
71
  end
70
72
 
@@ -73,13 +75,12 @@ class RedisTest < Minitest::Test
73
75
 
74
76
  def test_multi_call_with_error
75
77
  clear_all!
76
- redis_client = create_redis_client
77
78
 
78
79
  Instana.tracer.start_or_continue_trace(:redis_test) do
79
80
  begin
80
- redis_client.multi do
81
- redis_client.set('other', 'world')
82
- redis_client.call('invalid')
81
+ @redis_client.multi do
82
+ @redis_client.set('other', 'world')
83
+ @redis_client.call('invalid')
83
84
  end
84
85
  rescue; end
85
86
  end
@@ -89,10 +90,6 @@ class RedisTest < Minitest::Test
89
90
 
90
91
  private
91
92
 
92
- def create_redis_client
93
- Redis.new(url: ENV['I_REDIS_URL'])
94
- end
95
-
96
93
  def assert_redis_trace(command, with_error: nil)
97
94
  spans = ::Instana.processor.queued_spans
98
95
  assert_equal 2, spans.length
@@ -105,10 +102,10 @@ class RedisTest < Minitest::Test
105
102
 
106
103
  data = second_span[:data]
107
104
 
108
- uri = URI.parse(ENV['I_REDIS_URL'])
105
+ uri = URI.parse(@redis_url)
109
106
  assert_equal "#{uri.host}:#{uri.port}", data[:redis][:connection]
110
107
 
111
- assert_equal 0, data[:redis][:db]
108
+ assert_equal "0", data[:redis][:db]
112
109
  assert_equal command, data[:redis][:command]
113
110
 
114
111
  if with_error
@@ -5,8 +5,8 @@ require 'resque'
5
5
 
6
6
  if ENV.key?('REDIS_URL')
7
7
  ::Resque.redis = ENV['REDIS_URL']
8
- elsif ENV.key?('I_REDIS_URL')
9
- ::Resque.redis = ENV['I_REDIS_URL']
8
+ elsif ENV.key?('REDIS_URL')
9
+ ::Resque.redis = ENV['REDIS_URL']
10
10
  else
11
11
  ::Resque.redis = 'localhost:6379'
12
12
  end
@@ -23,16 +23,15 @@ class ResqueClientTest < Minitest::Test
23
23
  end
24
24
 
25
25
  def test_enqueue
26
- ::Instana.tracer.start_or_continue_trace('resque-client_test') do
26
+ ::Instana.tracer.start_or_continue_trace(:'resque-client_test') do
27
27
  ::Resque.enqueue(FastJob)
28
28
  end
29
29
 
30
30
  spans = ::Instana.processor.queued_spans
31
- assert_equal 3, spans.length
31
+ assert_equal 2, spans.length
32
32
 
33
33
  sdk_span = find_first_span_by_name(spans, :'resque-client_test')
34
34
  resque_span = find_first_span_by_name(spans, :'resque-client')
35
- redis_span = find_first_span_by_name(spans, :redis)
36
35
 
37
36
  assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
38
37
 
@@ -40,48 +39,42 @@ class ResqueClientTest < Minitest::Test
40
39
  assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
41
40
  assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
42
41
  assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
43
-
44
- assert_equal :redis, redis_span[:n]
45
42
  end
46
43
 
47
44
  def test_enqueue_to
48
- ::Instana.tracer.start_or_continue_trace('resque-client_test') do
45
+ ::Instana.tracer.start_or_continue_trace(:'resque-client_test') do
49
46
  ::Resque.enqueue_to(:critical, FastJob)
50
47
  end
51
48
 
52
49
  spans = ::Instana.processor.queued_spans
53
- assert_equal 3, spans.length
50
+ assert_equal 2, spans.length
54
51
 
55
52
  sdk_span = find_first_span_by_name(spans, :'resque-client_test')
56
53
  resque_span = find_first_span_by_name(spans, :'resque-client')
57
- redis_span = find_first_span_by_name(spans, :redis)
58
54
 
59
55
  assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
60
56
  assert_equal :"resque-client", resque_span[:n]
61
57
  assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
62
58
  assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
63
59
  assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
64
- assert_equal :redis, redis_span[:n]
65
60
  end
66
61
 
67
62
  def test_dequeue
68
- ::Instana.tracer.start_or_continue_trace('resque-client_test', '', {}) do
63
+ ::Instana.tracer.start_or_continue_trace(:'resque-client_test', '', {}) do
69
64
  ::Resque.dequeue(FastJob, { :generate => :farfalla })
70
65
  end
71
66
 
72
67
  spans = ::Instana.processor.queued_spans
73
- assert_equal 3, spans.length
68
+ assert_equal 2, spans.length
74
69
 
75
70
  sdk_span = find_first_span_by_name(spans, :'resque-client_test')
76
71
  resque_span = find_first_span_by_name(spans, :'resque-client')
77
- redis_span = find_first_span_by_name(spans, :redis)
78
72
 
79
73
  assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
80
- assert_equal :"resque-client", spans[1][:n]
74
+ assert_equal :"resque-client", resque_span[:n]
81
75
  assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
82
76
  assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
83
77
  assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
84
- assert_equal :redis, redis_span[:n]
85
78
  end
86
79
 
87
80
  def test_worker_job
@@ -1,6 +1,13 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class SidekiqClientTest < Minitest::Test
4
+ def setup
5
+ Sidekiq.configure_client do |config|
6
+ config.redis = { url: ENV["REDIS_URL"] }
7
+ end
8
+ ::Sidekiq::Queue.new('some_random_queue').clear
9
+ end
10
+
4
11
  def test_config_defaults
5
12
  assert ::Instana.config[:'sidekiq-client'].is_a?(Hash)
6
13
  assert ::Instana.config[:'sidekiq-client'].key?(:enabled)
@@ -1,6 +1,12 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class SidekiqServerTest < Minitest::Test
4
+ def setup
5
+ Sidekiq.configure_client do |config|
6
+ config.redis = { url: ENV["REDIS_URL"] }
7
+ end
8
+ end
9
+
4
10
  def test_config_defaults
5
11
  assert ::Instana.config[:'sidekiq-worker'].is_a?(Hash)
6
12
  assert ::Instana.config[:'sidekiq-worker'].key?(:enabled)
@@ -7,8 +7,8 @@ class ErrorJob
7
7
  def self.perform
8
8
  if ENV.key?('REDIS_URL')
9
9
  redis = Redis.new(:url => ENV['REDIS_URL'])
10
- elsif ENV.key?('I_REDIS_URL')
11
- redis = Redis.new(:url => ENV['I_REDIS_URL'])
10
+ elsif ENV.key?('REDIS_URL')
11
+ redis = Redis.new(:url => ENV['REDIS_URL'])
12
12
  else
13
13
  redis = Redis.new(:url => 'localhost:6379')
14
14
  end
@@ -7,8 +7,8 @@ class FastJob
7
7
  def self.perform
8
8
  if ENV.key?('REDIS_URL')
9
9
  redis = Redis.new(:url => ENV['REDIS_URL'])
10
- elsif ENV.key?('I_REDIS_URL')
11
- redis = Redis.new(:url => ENV['I_REDIS_URL'])
10
+ elsif ENV.key?('REDIS_URL')
11
+ redis = Redis.new(:url => ENV['REDIS_URL'])
12
12
  else
13
13
  redis = Redis.new(:url => 'redis://localhost:6379')
14
14
  end
@@ -39,27 +39,23 @@ when /libraries/
39
39
  end
40
40
  end
41
41
 
42
- ENV['I_REDIS_URL'] ||= 'redis://127.0.0.1:6379'
42
+ ENV['REDIS_URL'] ||= 'redis://127.0.0.1:6379'
43
43
 
44
44
  # Configure redis for sidekiq client
45
45
  Sidekiq.configure_client do |config|
46
- config.redis = { url: ENV['I_REDIS_URL'] }
46
+ config.redis = { url: ENV['REDIS_URL'] }
47
47
  end
48
48
 
49
49
  # Configure redis for sidekiq worker
50
50
  $sidekiq_mode = :server
51
51
  ::Sidekiq.configure_server do |config|
52
- config.redis = { url: ENV['I_REDIS_URL'] }
52
+ config.redis = { url: ENV['REDIS_URL'] }
53
53
  end
54
54
  $sidekiq_mode = :client
55
55
 
56
56
  require './test/servers/sidekiq/worker'
57
57
  end
58
58
 
59
- if defined?(::Redis)
60
- $redis = Redis.new(url: ENV['I_REDIS_URL'])
61
- end
62
-
63
59
  Minitest::Reporters.use! MiniTest::Reporters::SpecReporter.new
64
60
 
65
61
  # Used to reset the gem to boot state. It clears out any queued and/or staged
@@ -68,7 +64,6 @@ Minitest::Reporters.use! MiniTest::Reporters::SpecReporter.new
68
64
  def clear_all!
69
65
  ::Instana.processor.clear!
70
66
  ::Instana.tracer.clear!
71
- $redis.flushall if $redis
72
67
  nil
73
68
  end
74
69
 
@@ -332,4 +332,25 @@ class OpenTracerTest < Minitest::Test
332
332
  assert_equal({:my_bag=>1}, ac_span.context.baggage)
333
333
  assert_equal(nil, av_span.context.baggage)
334
334
  end
335
+
336
+ def test_start_active_span
337
+ clear_all!
338
+
339
+ span = OpenTracing.start_active_span(:rack)
340
+ assert_equal ::Instana::Tracer.current_span, span
341
+
342
+ sleep 0.1
343
+
344
+ span.finish
345
+
346
+ spans = ::Instana.processor.queued_spans
347
+ assert_equal 1, spans.length
348
+ end
349
+
350
+ def test_active_span
351
+ clear_all!
352
+
353
+ span = OpenTracing.start_active_span(:rack)
354
+ assert_equal OpenTracing.active_span, span
355
+ end
335
356
  end
@@ -46,6 +46,37 @@ class TracerTest < Minitest::Test
46
46
  assert_equal ::Instana.agent.agent_uuid, first_span[:f][:h]
47
47
  end
48
48
 
49
+ def test_exotic_tag_types
50
+ clear_all!
51
+
52
+ assert_equal false, ::Instana.tracer.tracing?
53
+
54
+ require 'resolv'
55
+ r = Resolv::DNS.new
56
+ ipv4 = r.getaddress("www.pwpush.com")
57
+
58
+ ::Instana.tracer.start_or_continue_trace(:rack, {:ipaddr => ipv4}) do
59
+ assert_equal true, ::Instana.tracer.tracing?
60
+ sleep 0.1
61
+ end
62
+
63
+ spans = ::Instana.processor.queued_spans
64
+ assert_equal 1, spans.length
65
+
66
+ first_span = spans.first
67
+ assert_equal :rack, first_span[:n]
68
+ assert first_span[:ts].is_a?(Integer)
69
+ assert first_span[:d].is_a?(Integer)
70
+ assert first_span[:d].between?(100, 130)
71
+ assert first_span.key?(:data)
72
+ assert first_span[:data].key?(:ipaddr)
73
+ assert first_span[:data][:ipaddr].is_a?(String)
74
+ assert first_span.key?(:f)
75
+ assert first_span[:f].key?(:e)
76
+ assert first_span[:f].key?(:h)
77
+ assert_equal ::Instana.agent.agent_uuid, first_span[:f][:h]
78
+ end
79
+
49
80
  def test_errors_are_properly_propagated
50
81
  clear_all!
51
82
  exception_raised = false
@@ -198,7 +229,6 @@ class TracerTest < Minitest::Test
198
229
  assert_equal sdk_span[:k], 3
199
230
  assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_task_info], 1
200
231
  assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_task_exit_info], 1
201
-
202
232
  end
203
233
 
204
234
  def test_block_tracing_error_capture