11# typed: ignore
22
33require 'spec_helper'
4+ require_relative '../../support/system_helper'
45
56require 'datadog/statsd'
67
2021require 'ddtrace/transport/io/client'
2122require 'ddtrace/transport/traces'
2223
24+ require_relative '../../support/test_access_refinement'
25+
26+ using TestAccessRefinement
27+
2328RSpec . describe 'Tracer integration tests' do
2429 shared_context 'agent-based test' do
2530 before do
4550 it { expect ( stats ) . to include ( traces_flushed : 0 ) }
4651 end
4752
53+ before do
54+ WebMock . disable!
55+ Datadog . configuration . reset!
56+ end
57+
4858 after { tracer . shutdown! }
4959
5060 describe 'agent receives span' do
@@ -57,14 +67,6 @@ def create_trace
5767 end
5868 end
5969
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-
6870 def agent_receives_span_step1
6971 stats = tracer . writer . stats
7072 expect ( stats [ :traces_flushed ] ) . to eq ( 0 )
@@ -78,7 +80,7 @@ def agent_receives_span_step2
7880 create_trace
7981
8082 # Timeout after 3 seconds, waiting for 1 flush
81- wait_for_flush ( :traces_flushed )
83+ tracer . writer . force_flush
8284
8385 stats = tracer . writer . stats
8486 expect ( stats [ :traces_flushed ] ) . to eq ( 1 )
@@ -95,8 +97,8 @@ def agent_receives_span_step2
9597 def agent_receives_span_step3 ( previous_success )
9698 create_trace
9799
98- # Timeout after 3 seconds, waiting for another flush
99- wait_for_flush ( :traces_flushed , 2 )
100+ # Timeout after 3 seconds, waiting for second flush
101+ tracer . writer . force_flush
100102
101103 stats = tracer . writer . stats
102104 expect ( stats [ :traces_flushed ] ) . to eq ( 2 )
@@ -143,24 +145,32 @@ def agent_receives_span_step3(previous_success)
143145 describe 'agent receives short span' do
144146 include_context 'agent-based test'
145147
146- before do
148+ def trace
147149 tracer . trace ( 'my.short.op' ) do |span |
148150 @span = span
149151 span . service = 'my.service'
150152 end
151153
152- @first_shutdown = tracer . shutdown!
154+ tracer . writer . force_flush
153155 end
154156
155157 let ( :stats ) { tracer . writer . stats }
156158
157159 it do
158- expect ( @first_shutdown ) . to be true
160+ trace
161+
159162 expect ( @span . finished? ) . to be true
160163 expect ( stats [ :services_flushed ] ) . to be_nil
161164 end
162165
163- it_behaves_like 'flushed trace'
166+ it 'reuses the same HTTP connection' do
167+ trace
168+ expect { trace } . to_not ( change { SystemHelper . open_fds } )
169+ end
170+
171+ it_behaves_like 'flushed trace' do
172+ before { trace }
173+ end
164174 end
165175
166176 describe 'rule sampler' do
@@ -319,6 +329,8 @@ def agent_receives_span_step3(previous_success)
319329 function . call ( traces )
320330 end
321331
332+ WebMock . enable!
333+
322334 trace # Run test subject
323335 tracer . shutdown! # Ensure trace is flushed, so we can read writer statistics
324336 end
@@ -347,6 +359,7 @@ def agent_receives_span_step3(previous_success)
347359 end
348360
349361 after do
362+ WebMock . disable!
350363 Datadog . configuration . tracing . sampling . reset!
351364 end
352365
@@ -468,6 +481,8 @@ def sample!(trace)
468481 span . service = 'my.service'
469482 end
470483
484+ tracer . writer . force_flush
485+
471486 threads = Array . new ( 10 ) do
472487 Thread . new { tracer . shutdown! }
473488 end
@@ -849,7 +864,7 @@ def sample!(trace)
849864
850865 tracer . trace ( 'name' ) { }
851866
852- try_wait_until ( attempts : 20 ) { tracer . writer . stats [ :traces_flushed ] >= 1 }
867+ tracer . writer . force_flush
853868
854869 stats = tracer . writer . stats
855870 expect ( stats [ :traces_flushed ] ) . to eq ( 1 )
0 commit comments