11# typed: ignore
22
33require 'spec_helper'
4+ require_relative '../../support/system_helper'
45
56require 'datadog/statsd'
67
4546 it { expect ( stats ) . to include ( traces_flushed : 0 ) }
4647 end
4748
49+ before do
50+ WebMock . disable!
51+ Datadog . configuration . reset!
52+ end
53+
4854 after { tracer . shutdown! }
4955
56+ def wait_for_flush ( stat , num = 1 )
57+ test_repeat . times do
58+ break if tracer . writer . stats [ stat ] >= num
59+
60+ sleep ( 0.1 )
61+ end
62+ end
63+
5064 describe 'agent receives span' do
5165 include_context 'agent-based test'
5266
@@ -57,14 +71,6 @@ def create_trace
5771 end
5872 end
5973
60- def wait_for_flush ( stat , num = 1 )
61- test_repeat . times do
62- break if tracer . writer . stats [ stat ] >= num
63-
64- sleep ( 0.1 )
65- end
66- end
67-
6874 def agent_receives_span_step1
6975 stats = tracer . writer . stats
7076 expect ( stats [ :traces_flushed ] ) . to eq ( 0 )
@@ -143,24 +149,32 @@ def agent_receives_span_step3(previous_success)
143149 describe 'agent receives short span' do
144150 include_context 'agent-based test'
145151
146- before do
152+ def trace
147153 tracer . trace ( 'my.short.op' ) do |span |
148154 @span = span
149155 span . service = 'my.service'
150156 end
151157
152- @first_shutdown = tracer . shutdown!
158+ wait_for_flush ( :traces_flushed )
153159 end
154160
155161 let ( :stats ) { tracer . writer . stats }
156162
157163 it do
158- expect ( @first_shutdown ) . to be true
164+ trace
165+
159166 expect ( @span . finished? ) . to be true
160167 expect ( stats [ :services_flushed ] ) . to be_nil
161168 end
162169
163- it_behaves_like 'flushed trace'
170+ it 'reuses the same HTTP connection' do
171+ trace
172+ expect { trace } . to_not ( change { SystemHelper . open_fds } )
173+ end
174+
175+ it_behaves_like 'flushed trace' do
176+ before { trace }
177+ end
164178 end
165179
166180 describe 'rule sampler' do
@@ -319,6 +333,8 @@ def agent_receives_span_step3(previous_success)
319333 function . call ( traces )
320334 end
321335
336+ WebMock . enable!
337+
322338 trace # Run test subject
323339 tracer . shutdown! # Ensure trace is flushed, so we can read writer statistics
324340 end
@@ -347,6 +363,7 @@ def agent_receives_span_step3(previous_success)
347363 end
348364
349365 after do
366+ WebMock . disable!
350367 Datadog . configuration . tracing . sampling . reset!
351368 end
352369
@@ -468,6 +485,8 @@ def sample!(trace)
468485 span . service = 'my.service'
469486 end
470487
488+ wait_for_flush ( :traces_flushed )
489+
471490 threads = Array . new ( 10 ) do
472491 Thread . new { tracer . shutdown! }
473492 end
0 commit comments