instana 1.11.4 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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