oboe 2.7.15.1-java → 2.7.16.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.
data/lib/oboe/xtrace.rb CHANGED
@@ -43,6 +43,48 @@ module Oboe
43
43
  Oboe.logger.debug e.backtrace
44
44
  return nil
45
45
  end
46
+
47
+ ##
48
+ # Oboe::XTrace.edge_id
49
+ #
50
+ # Extract and return the edge_id portion of an X-Trace ID
51
+ #
52
+ def edge_id(xtrace)
53
+ return nil unless Oboe::XTrace.valid?(xtrace)
54
+
55
+ xtrace[42..57]
56
+ rescue StandardError => e
57
+ Oboe.logger.debug e.message
58
+ Oboe.logger.debug e.backtrace
59
+ return nil
60
+ end
61
+
62
+ ##
63
+ # continue_service_context
64
+ #
65
+ # In the case of service calls such as external HTTP requests, we
66
+ # pass along X-Trace headers so that request context can be maintained
67
+ # across servers and applications.
68
+ #
69
+ # Remote requests can return a X-Trace header in which case we want
70
+ # to pickup on and continue the context in most cases.
71
+ #
72
+ # @start is the context just before the outgoing request
73
+ #
74
+ # @finish is the context returned to us (as an HTTP response header
75
+ # if that be the case)
76
+ #
77
+ def continue_service_context(start, finish)
78
+ if Oboe::XTrace.valid?(finish) && Oboe.tracing?
79
+
80
+ # Assure that we received back a valid X-Trace with the same task_id
81
+ if Oboe::XTrace.task_id(start) == Oboe::XTrace.task_id(finish)
82
+ Oboe::Context.fromString(finish)
83
+ else
84
+ Oboe.logger.debug "Mismatched returned X-Trace ID: #{finish}"
85
+ end
86
+ end
87
+ end
46
88
  end
47
89
  end
48
90
  end
@@ -0,0 +1,170 @@
1
+ require 'minitest_helper'
2
+ require 'oboe/inst/rack'
3
+ require File.expand_path(File.dirname(__FILE__) + '../../frameworks/apps/sinatra_simple')
4
+
5
+ class ExconTest < Minitest::Test
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ SinatraSimple
10
+ end
11
+
12
+ def test_must_return_xtrace_header
13
+ clear_all_traces
14
+ get "/"
15
+ xtrace = last_response['X-Trace']
16
+ assert xtrace
17
+ assert Oboe::XTrace.valid?(xtrace)
18
+ end
19
+
20
+ def test_reports_version_init
21
+ init_kvs = ::Oboe::Util.build_init_report
22
+ assert init_kvs.key?('Ruby.Excon.Version')
23
+ assert_equal init_kvs['Ruby.Excon.Version'], "Excon-#{::Excon::VERSION}"
24
+ end
25
+
26
+ def test_class_get_request
27
+ clear_all_traces
28
+
29
+ Oboe::API.start_trace('excon_tests') do
30
+ response = Excon.get('http://127.0.0.1:8101/')
31
+ end
32
+
33
+ traces = get_all_traces
34
+ assert_equal traces.count, 7
35
+ validate_outer_layers(traces, "excon_tests")
36
+ valid_edges?(traces)
37
+
38
+ assert_equal traces[1]['IsService'], 1
39
+ assert_equal traces[1]['RemoteHost'], '127.0.0.1'
40
+ assert_equal traces[1]['RemoteProtocol'], 'HTTP'
41
+ assert_equal traces[1]['ServiceArg'], '/'
42
+ assert_equal traces[1]['HTTPMethod'], 'GET'
43
+ assert traces[1].key?('Backtrace')
44
+
45
+ assert_equal traces[5]['Layer'], 'excon'
46
+ assert_equal traces[5]['Label'], 'exit'
47
+ assert_equal traces[5]['HTTPStatus'], 200
48
+ end
49
+
50
+ def test_cross_app_tracing
51
+ clear_all_traces
52
+
53
+ Oboe::API.start_trace('excon_tests') do
54
+ response = Excon.get('http://www.gameface.in/gamers')
55
+ xtrace = response.headers['X-Trace']
56
+ assert xtrace
57
+ assert Oboe::XTrace.valid?(xtrace)
58
+ end
59
+
60
+ traces = get_all_traces
61
+ assert_equal traces.count, 4
62
+ validate_outer_layers(traces, "excon_tests")
63
+
64
+ assert_equal traces[1]['IsService'], 1
65
+ assert_equal traces[1]['RemoteHost'], 'www.gameface.in'
66
+ assert_equal traces[1]['RemoteProtocol'], 'HTTP'
67
+ assert_equal traces[1]['ServiceArg'], '/gamers'
68
+ assert_equal traces[1]['HTTPMethod'], 'GET'
69
+ assert traces[1].key?('Backtrace')
70
+ assert_equal traces[2]['HTTPStatus'], 200
71
+ end
72
+
73
+ def test_persistent_requests
74
+ # Persistence was adding in 0.31.0
75
+ skip if Excon::VERSION < '0.31.0'
76
+
77
+ clear_all_traces
78
+
79
+ Oboe::API.start_trace('excon_tests') do
80
+ connection = Excon.new('http://www.gameface.in/') # non-persistent by default
81
+ connection.get # socket established, then closed
82
+ connection.get(:persistent => true) # socket established, left open
83
+ connection.get # socket reused, then closed
84
+ end
85
+
86
+ traces = get_all_traces
87
+ assert_equal traces.count, 8
88
+ validate_outer_layers(traces, "excon_tests")
89
+
90
+ assert_equal traces[1]['IsService'], 1
91
+ assert_equal traces[1]['RemoteHost'], 'www.gameface.in'
92
+ assert_equal traces[1]['RemoteProtocol'], 'HTTP'
93
+ assert_equal traces[1]['ServiceArg'], '/'
94
+ assert_equal traces[1]['HTTPMethod'], 'GET'
95
+ assert traces[1].key?('Backtrace')
96
+ assert_equal traces[2]['HTTPStatus'], 200
97
+
98
+ assert_equal traces[3]['IsService'], 1
99
+ assert_equal traces[3]['RemoteHost'], 'www.gameface.in'
100
+ assert_equal traces[3]['RemoteProtocol'], 'HTTP'
101
+ assert_equal traces[3]['ServiceArg'], '/'
102
+ assert_equal traces[3]['HTTPMethod'], 'GET'
103
+ assert traces[3].key?('Backtrace')
104
+ assert_equal traces[4]['HTTPStatus'], 200
105
+
106
+ assert_equal traces[5]['IsService'], 1
107
+ assert_equal traces[5]['RemoteHost'], 'www.gameface.in'
108
+ assert_equal traces[5]['RemoteProtocol'], 'HTTP'
109
+ assert_equal traces[5]['ServiceArg'], '/'
110
+ assert_equal traces[5]['HTTPMethod'], 'GET'
111
+ assert traces[5].key?('Backtrace')
112
+ assert_equal traces[6]['HTTPStatus'], 200
113
+ end
114
+
115
+ def test_pipelined_requests
116
+ skip if Excon::VERSION <= '0.17.0'
117
+
118
+ clear_all_traces
119
+
120
+ Oboe::API.start_trace('excon_tests') do
121
+ connection = Excon.new('http://www.gameface.in/')
122
+ connection.requests([{:method => :get}, {:method => :put}])
123
+ end
124
+
125
+ traces = get_all_traces
126
+ assert_equal traces.count, 4
127
+ validate_outer_layers(traces, "excon_tests")
128
+ valid_edges?(traces)
129
+
130
+ assert_equal traces[1]['IsService'], 1
131
+ assert_equal traces[1]['RemoteHost'], 'www.gameface.in'
132
+ assert_equal traces[1]['RemoteProtocol'], 'HTTP'
133
+ assert_equal traces[1]['ServiceArg'], '/'
134
+ assert_equal traces[1]['Pipeline'], 'true'
135
+ assert_equal traces[1]['HTTPMethods'], 'GET, PUT'
136
+ assert traces[1].key?('Backtrace')
137
+ end
138
+
139
+ def test_requests_with_errors
140
+ clear_all_traces
141
+
142
+ begin
143
+ Oboe::API.start_trace('excon_tests') do
144
+ connection = Excon.get('http://asfjalkfjlajfljkaljf/')
145
+ end
146
+ rescue
147
+ end
148
+
149
+ traces = get_all_traces
150
+ assert_equal traces.count, 5
151
+ validate_outer_layers(traces, "excon_tests")
152
+
153
+ assert_equal traces[1]['IsService'], 1
154
+ assert_equal traces[1]['RemoteHost'], 'asfjalkfjlajfljkaljf'
155
+ assert_equal traces[1]['RemoteProtocol'], 'HTTP'
156
+ assert_equal traces[1]['ServiceArg'], '/'
157
+ assert_equal traces[1]['HTTPMethod'], 'GET'
158
+ assert traces[1].key?('Backtrace')
159
+
160
+ assert_equal traces[2]['Layer'], 'excon'
161
+ assert_equal traces[2]['Label'], 'error'
162
+ assert_equal traces[2]['ErrorClass'], "Excon::Errors::SocketError"
163
+ assert traces[2].key?('ErrorMsg')
164
+ assert traces[2].key?('Backtrace')
165
+
166
+ assert_equal traces[3]['Layer'], 'excon'
167
+ assert_equal traces[3]['Label'], 'exit'
168
+ end
169
+ end
170
+
@@ -63,6 +63,7 @@ describe Oboe::Inst::FaradayConnection do
63
63
  traces = get_all_traces
64
64
  traces.count.must_equal 8
65
65
 
66
+ valid_edges?(traces)
66
67
  validate_outer_layers(traces, 'faraday_test')
67
68
 
68
69
  traces[1]['Layer'].must_equal 'faraday'
@@ -94,6 +95,7 @@ describe Oboe::Inst::FaradayConnection do
94
95
  traces = get_all_traces
95
96
  traces.count.must_equal 8
96
97
 
98
+ valid_edges?(traces)
97
99
  validate_outer_layers(traces, 'faraday_test')
98
100
 
99
101
  traces[1]['Layer'].must_equal 'faraday'
@@ -126,25 +128,36 @@ describe Oboe::Inst::FaradayConnection do
126
128
  end
127
129
 
128
130
  traces = get_all_traces
129
- traces.count.must_equal 5
131
+ traces.count.must_equal 7
130
132
 
133
+ valid_edges?(traces)
131
134
  validate_outer_layers(traces, 'faraday_test')
132
135
 
133
136
  traces[1]['Layer'].must_equal 'faraday'
134
137
  traces[1].key?('Backtrace').must_equal Oboe::Config[:faraday][:collect_backtraces]
135
138
 
139
+ traces[2]['Layer'].must_equal 'excon'
140
+ traces[2]['Label'].must_equal 'entry'
136
141
  traces[2]['IsService'].must_equal 1
137
142
  traces[2]['RemoteProtocol'].must_equal 'HTTP'
138
143
  traces[2]['RemoteHost'].must_equal 'www.curlmyip.de'
139
144
  traces[2]['ServiceArg'].must_equal '/?q=1'
140
- traces[2]['HTTPMethod'].downcase.must_equal 'get'
145
+ traces[2]['HTTPMethod'].must_equal 'GET'
141
146
 
142
- traces[2]['Layer'].must_equal 'faraday'
143
- traces[2]['Label'].must_equal 'info'
144
- traces[2]['HTTPStatus'].must_equal 200
145
-
146
- traces[3]['Layer'].must_equal 'faraday'
147
+ traces[3]['Layer'].must_equal 'excon'
147
148
  traces[3]['Label'].must_equal 'exit'
149
+ traces[3]['HTTPStatus'].must_equal 200
150
+
151
+ traces[4]['Layer'].must_equal 'faraday'
152
+ traces[4]['Label'].must_equal 'info'
153
+ unless RUBY_VERSION < '1.9.3'
154
+ # FIXME: Ruby 1.8 is reporting an object instance instead of
155
+ # an array
156
+ traces[4]['Middleware'].must_equal '[Faraday::Adapter::Excon]'
157
+ end
158
+
159
+ traces[5]['Layer'].must_equal 'faraday'
160
+ traces[5]['Label'].must_equal 'exit'
148
161
  end
149
162
 
150
163
  it 'should obey :collect_backtraces setting when true' do
@@ -34,6 +34,10 @@ describe Oboe::Inst do
34
34
  traces = get_all_traces
35
35
  traces.count.must_equal 5
36
36
 
37
+ # FIXME: We need to switch from making external calls to an internal test
38
+ # stack instead so we can validate cross-app traces.
39
+ # valid_edges?(traces).must_equal true
40
+
37
41
  validate_outer_layers(traces, 'net-http_test')
38
42
 
39
43
  traces[1]['Layer'].must_equal 'net-http'
@@ -55,6 +59,7 @@ describe Oboe::Inst do
55
59
 
56
60
  traces = get_all_traces
57
61
  traces.count.must_equal 5
62
+ valid_edges?(traces).must_equal true
58
63
 
59
64
  validate_outer_layers(traces, 'net-http_test')
60
65
 
@@ -0,0 +1,302 @@
1
+ require 'minitest_helper'
2
+
3
+ if RUBY_VERSION >= '1.9.3'
4
+ describe Oboe::Inst::RestClientRequest do
5
+ before do
6
+ clear_all_traces
7
+ @collect_backtraces = Oboe::Config[:rest_client][:collect_backtraces]
8
+ end
9
+
10
+ after do
11
+ Oboe::Config[:rest_client][:collect_backtraces] = @collect_backtraces
12
+ end
13
+
14
+ it 'RestClient should be defined and ready' do
15
+ defined?(::RestClient).wont_match nil
16
+ end
17
+
18
+ it 'RestClient should have oboe methods defined' do
19
+ [ :execute_with_oboe ].each do |m|
20
+ ::RestClient::Request.method_defined?(m).must_equal true
21
+ end
22
+ end
23
+
24
+ it "should report rest-client version in __Init" do
25
+ init_kvs = ::Oboe::Util.build_init_report
26
+
27
+ init_kvs.key?('Ruby.RestClient.Version').must_equal true
28
+ init_kvs['Ruby.RestClient.Version'].must_equal "RestClient-#{::RestClient::VERSION}"
29
+ end
30
+
31
+ it "should trace a request to an instr'd app" do
32
+ response = nil
33
+
34
+ Oboe::API.start_trace('rest_client_test') do
35
+ response = RestClient.get 'http://gameface.in/gamers'
36
+ end
37
+
38
+ traces = get_all_traces
39
+ traces.count.must_equal 7
40
+
41
+ # FIXME: We need to switch from making external calls to an internal test
42
+ # stack instead so we can validate cross-app traces.
43
+ # valid_edges?(traces).must_equal true
44
+ validate_outer_layers(traces, 'rest_client_test')
45
+
46
+ traces[1]['Layer'].must_equal 'rest-client'
47
+ traces[1]['Label'].must_equal 'entry'
48
+
49
+ traces[2]['Layer'].must_equal 'net-http'
50
+ traces[2]['Label'].must_equal 'entry'
51
+
52
+ traces[3]['Layer'].must_equal 'net-http'
53
+ traces[3]['Label'].must_equal 'info'
54
+ traces[3]['IsService'].must_equal 1
55
+ traces[3]['RemoteProtocol'].must_equal 'HTTP'
56
+ traces[3]['RemoteHost'].must_equal 'gameface.in'
57
+ traces[3]['ServiceArg'].must_equal '/gamers'
58
+ traces[3]['HTTPMethod'].must_equal 'GET'
59
+ traces[3]['HTTPStatus'].must_equal "200"
60
+ traces[3].key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
61
+
62
+ traces[4]['Layer'].must_equal 'net-http'
63
+ traces[4]['Label'].must_equal 'exit'
64
+
65
+ traces[5]['Layer'].must_equal 'rest-client'
66
+ traces[5]['Label'].must_equal 'exit'
67
+
68
+ response.headers.key?(:x_trace).wont_equal nil
69
+ xtrace = response.headers[:x_trace]
70
+ Oboe::XTrace.valid?(xtrace).must_equal true
71
+ end
72
+
73
+ it 'should trace a raw GET request' do
74
+ response = nil
75
+
76
+ Oboe::API.start_trace('rest_client_test') do
77
+ response = RestClient.get 'http://www.appneta.com/products/traceview/?a=1'
78
+ end
79
+
80
+ traces = get_all_traces
81
+ traces.count.must_equal 7
82
+
83
+ # FIXME: We need to switch from making external calls to an internal test
84
+ # stack instead so we can validate cross-app traces.
85
+ # valid_edges?(traces).must_equal true
86
+ validate_outer_layers(traces, 'rest_client_test')
87
+
88
+ traces[1]['Layer'].must_equal 'rest-client'
89
+ traces[1]['Label'].must_equal 'entry'
90
+
91
+ traces[2]['Layer'].must_equal 'net-http'
92
+ traces[2]['Label'].must_equal 'entry'
93
+
94
+ traces[3]['Layer'].must_equal 'net-http'
95
+ traces[3]['Label'].must_equal 'info'
96
+ traces[3]['IsService'].must_equal 1
97
+ traces[3]['RemoteProtocol'].must_equal 'HTTP'
98
+ traces[3]['RemoteHost'].must_equal 'www.appneta.com'
99
+ traces[3]['ServiceArg'].must_equal '/products/traceview/?a=1'
100
+ traces[3]['HTTPMethod'].must_equal 'GET'
101
+ traces[3]['HTTPStatus'].must_equal "200"
102
+ traces[3].key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
103
+
104
+ traces[4]['Layer'].must_equal 'net-http'
105
+ traces[4]['Label'].must_equal 'exit'
106
+
107
+ traces[5]['Layer'].must_equal 'rest-client'
108
+ traces[5]['Label'].must_equal 'exit'
109
+ end
110
+
111
+ it 'should trace a raw POST request' do
112
+ response = nil
113
+
114
+ Oboe::API.start_trace('rest_client_test') do
115
+ response = RestClient.post 'http://www.appneta.com/', :param1 => 'one', :nested => { :param2 => 'two' }
116
+ end
117
+
118
+ traces = get_all_traces
119
+ traces.count.must_equal 7
120
+
121
+ # FIXME: We need to switch from making external calls to an internal test
122
+ # stack instead so we can validate cross-app traces.
123
+ # valid_edges?(traces).must_equal true
124
+ validate_outer_layers(traces, 'rest_client_test')
125
+
126
+ traces[1]['Layer'].must_equal 'rest-client'
127
+ traces[1]['Label'].must_equal 'entry'
128
+
129
+ traces[2]['Layer'].must_equal 'net-http'
130
+ traces[2]['Label'].must_equal 'entry'
131
+
132
+ traces[3]['Layer'].must_equal 'net-http'
133
+ traces[3]['Label'].must_equal 'info'
134
+ traces[3]['IsService'].must_equal 1
135
+ traces[3]['RemoteProtocol'].must_equal 'HTTP'
136
+ traces[3]['RemoteHost'].must_equal 'www.appneta.com'
137
+ traces[3]['ServiceArg'].must_equal '/'
138
+ traces[3]['HTTPMethod'].must_equal 'POST'
139
+ traces[3]['HTTPStatus'].must_equal "200"
140
+ traces[3].key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
141
+
142
+ traces[4]['Layer'].must_equal 'net-http'
143
+ traces[4]['Label'].must_equal 'exit'
144
+
145
+ traces[5]['Layer'].must_equal 'rest-client'
146
+ traces[5]['Label'].must_equal 'exit'
147
+ end
148
+
149
+ it 'should trace a ActiveResource style GET request' do
150
+ response = nil
151
+
152
+ Oboe::API.start_trace('rest_client_test') do
153
+ resource = RestClient::Resource.new 'http://www.appneta.com/products/traceview/?a=1'
154
+ response = resource.get
155
+ end
156
+
157
+ traces = get_all_traces
158
+ traces.count.must_equal 7
159
+
160
+ # FIXME: We need to switch from making external calls to an internal test
161
+ # stack instead so we can validate cross-app traces.
162
+ # valid_edges?(traces).must_equal true
163
+ validate_outer_layers(traces, 'rest_client_test')
164
+
165
+ traces[1]['Layer'].must_equal 'rest-client'
166
+ traces[1]['Label'].must_equal 'entry'
167
+
168
+ traces[2]['Layer'].must_equal 'net-http'
169
+ traces[2]['Label'].must_equal 'entry'
170
+
171
+ traces[3]['Layer'].must_equal 'net-http'
172
+ traces[3]['Label'].must_equal 'info'
173
+ traces[3]['IsService'].must_equal 1
174
+ traces[3]['RemoteProtocol'].must_equal 'HTTP'
175
+ traces[3]['RemoteHost'].must_equal 'www.appneta.com'
176
+ traces[3]['ServiceArg'].must_equal '/products/traceview/?a=1'
177
+ traces[3]['HTTPMethod'].must_equal 'GET'
178
+ traces[3]['HTTPStatus'].must_equal "200"
179
+ traces[3].key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
180
+
181
+ traces[4]['Layer'].must_equal 'net-http'
182
+ traces[4]['Label'].must_equal 'exit'
183
+
184
+ traces[5]['Layer'].must_equal 'rest-client'
185
+ traces[5]['Label'].must_equal 'exit'
186
+ end
187
+
188
+ it 'should trace requests with redirects' do
189
+ response = nil
190
+
191
+ Oboe::API.start_trace('rest_client_test') do
192
+ resource = RestClient::Resource.new 'http://www.appneta.com/products/traceview?a=1'
193
+ response = resource.get
194
+ end
195
+
196
+ traces = get_all_traces
197
+ traces.count.must_equal 12
198
+
199
+ # FIXME: We need to switch from making external calls to an internal test
200
+ # stack instead so we can validate cross-app traces.
201
+ # valid_edges?(traces).must_equal true
202
+ validate_outer_layers(traces, 'rest_client_test')
203
+
204
+ traces[1]['Layer'].must_equal 'rest-client'
205
+ traces[1]['Label'].must_equal 'entry'
206
+
207
+ traces[2]['Layer'].must_equal 'net-http'
208
+ traces[2]['Label'].must_equal 'entry'
209
+
210
+ traces[3]['Layer'].must_equal 'net-http'
211
+ traces[3]['Label'].must_equal 'info'
212
+ traces[3]['IsService'].must_equal 1
213
+ traces[3]['RemoteProtocol'].must_equal 'HTTP'
214
+ traces[3]['RemoteHost'].must_equal 'www.appneta.com'
215
+ traces[3]['ServiceArg'].must_equal '/products/traceview?a=1'
216
+ traces[3]['HTTPMethod'].must_equal 'GET'
217
+ traces[3]['HTTPStatus'].must_equal "301"
218
+ traces[3].key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
219
+
220
+ traces[4]['Layer'].must_equal 'net-http'
221
+ traces[4]['Label'].must_equal 'exit'
222
+
223
+ traces[5]['Layer'].must_equal 'rest-client'
224
+ traces[5]['Label'].must_equal 'entry'
225
+
226
+ traces[6]['Layer'].must_equal 'net-http'
227
+ traces[6]['Label'].must_equal 'entry'
228
+
229
+ traces[7]['Layer'].must_equal 'net-http'
230
+ traces[7]['Label'].must_equal 'info'
231
+ traces[7]['IsService'].must_equal 1
232
+ traces[7]['RemoteProtocol'].must_equal 'HTTP'
233
+ traces[7]['RemoteHost'].must_equal 'www.appneta.com'
234
+ traces[7]['ServiceArg'].must_equal '/products/traceview/?a=1'
235
+ traces[7]['HTTPMethod'].must_equal 'GET'
236
+ traces[7]['HTTPStatus'].must_equal "200"
237
+ traces[7].key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
238
+
239
+ traces[8]['Layer'].must_equal 'net-http'
240
+ traces[8]['Label'].must_equal 'exit'
241
+
242
+ traces[9]['Layer'].must_equal 'rest-client'
243
+ traces[9]['Label'].must_equal 'exit'
244
+
245
+ traces[10]['Layer'].must_equal 'rest-client'
246
+ traces[10]['Label'].must_equal 'exit'
247
+ end
248
+
249
+ it 'should trace and capture raised exceptions' do
250
+ response = nil
251
+
252
+ Oboe::API.start_trace('rest_client_test') do
253
+ begin
254
+ RestClient.get 'http://s6KTgaz7636z/resource'
255
+ rescue
256
+ # We want an exception to be raised. Just don't raise
257
+ # it beyond this point.
258
+ end
259
+ end
260
+
261
+ traces = get_all_traces
262
+ traces.count.must_equal 5
263
+
264
+ valid_edges?(traces).must_equal true
265
+ validate_outer_layers(traces, 'rest_client_test')
266
+
267
+ traces[1]['Layer'].must_equal 'rest-client'
268
+ traces[1]['Label'].must_equal 'entry'
269
+
270
+ traces[2]['Layer'].must_equal 'rest-client'
271
+ traces[2]['Label'].must_equal 'error'
272
+ traces[2]['ErrorClass'].must_equal 'SocketError'
273
+ traces[2].key?('ErrorMsg').must_equal true
274
+ traces[2].key?('Backtrace').must_equal true
275
+
276
+ traces[3]['Layer'].must_equal 'rest-client'
277
+ traces[3]['Label'].must_equal 'exit'
278
+ end
279
+
280
+ it 'should obey :collect_backtraces setting when true' do
281
+ Oboe::Config[:rest_client][:collect_backtraces] = true
282
+
283
+ Oboe::API.start_trace('rest_client_test') do
284
+ RestClient.get('http://www.appneta.com', {:a => 1})
285
+ end
286
+
287
+ traces = get_all_traces
288
+ layer_has_key(traces, 'rest-client', 'Backtrace')
289
+ end
290
+
291
+ it 'should obey :collect_backtraces setting when false' do
292
+ Oboe::Config[:rest_client][:collect_backtraces] = false
293
+
294
+ Oboe::API.start_trace('rest_client_test') do
295
+ RestClient.get('http://www.appneta.com', {:a => 1})
296
+ end
297
+
298
+ traces = get_all_traces
299
+ layer_doesnt_have_key(traces, 'rest-client', 'Backtrace')
300
+ end
301
+ end
302
+ end