@@ -263,6 +263,94 @@ def test_sampling_rule_init():
263263 assert rule .name == name_regex
264264
265265
266+ @pytest .mark .parametrize (
267+ "rule_1,rule_2,expected" ,
268+ [
269+ # Sample rate only
270+ (SamplingRule (sample_rate = 1.0 ), SamplingRule (sample_rate = 1.0 ), True ),
271+ (SamplingRule (sample_rate = 0.5 ), SamplingRule (sample_rate = 0.5 ), True ),
272+ (SamplingRule (sample_rate = 0.0 ), SamplingRule (sample_rate = 0.0 ), True ),
273+ (SamplingRule (sample_rate = 0.5 ), SamplingRule (sample_rate = 1.0 ), False ),
274+ # Sample rate, and service name
275+ (SamplingRule (sample_rate = 1.0 , service = "my-svc" ), SamplingRule (sample_rate = 1.0 , service = "my-svc" ), True ),
276+ (
277+ SamplingRule (sample_rate = 1.0 , service = re .compile ("my-svc" )),
278+ SamplingRule (sample_rate = 1.0 , service = re .compile ("my-svc" )),
279+ True ,
280+ ),
281+ (SamplingRule (sample_rate = 1.0 , service = "my-svc" ), SamplingRule (sample_rate = 1.0 , service = "other-svc" ), False ),
282+ (SamplingRule (sample_rate = 1.0 , service = "my-svc" ), SamplingRule (sample_rate = 0.5 , service = "my-svc" ), False ),
283+ (
284+ SamplingRule (sample_rate = 1.0 , service = re .compile ("my-svc" )),
285+ SamplingRule (sample_rate = 0.5 , service = re .compile ("my-svc" )),
286+ False ,
287+ ),
288+ (
289+ SamplingRule (sample_rate = 1.0 , service = re .compile ("my-svc" )),
290+ SamplingRule (sample_rate = 1.0 , service = re .compile ("other" )),
291+ False ,
292+ ),
293+ # Sample rate, and operation name
294+ (
295+ SamplingRule (sample_rate = 1.0 , name = "span.name" ),
296+ SamplingRule (sample_rate = 1.0 , name = "span.name" ),
297+ True ,
298+ ),
299+ (
300+ SamplingRule (sample_rate = 1.0 , name = re .compile ("span.name" )),
301+ SamplingRule (sample_rate = 1.0 , name = re .compile ("span.name" )),
302+ True ,
303+ ),
304+ (
305+ SamplingRule (sample_rate = 1.0 , name = re .compile ("span.name" )),
306+ SamplingRule (sample_rate = 1.0 , name = re .compile ("span.other" )),
307+ False ,
308+ ),
309+ (
310+ SamplingRule (sample_rate = 1.0 , name = "span.name" ),
311+ SamplingRule (sample_rate = 0.5 , name = "span.name" ),
312+ False ,
313+ ),
314+ (SamplingRule (sample_rate = 1.0 , name = "span.name" ), SamplingRule (sample_rate = 1.0 , name = "span.other" ), False ),
315+ (SamplingRule (sample_rate = 1.0 , name = "span.name" ), SamplingRule (sample_rate = 0.5 , name = "span.name" ), False ),
316+ # Sample rate, service, and operation name
317+ (
318+ SamplingRule (sample_rate = 1.0 , service = "my-svc" , name = "span.name" ),
319+ SamplingRule (sample_rate = 1.0 , service = "my-svc" , name = "span.name" ),
320+ True ,
321+ ),
322+ (
323+ SamplingRule (sample_rate = 1.0 , service = "my-svc" , name = re .compile ("span.name" )),
324+ SamplingRule (sample_rate = 1.0 , service = "my-svc" , name = re .compile ("span.name" )),
325+ True ,
326+ ),
327+ (
328+ SamplingRule (sample_rate = 1.0 , service = re .compile ("my-svc" ), name = re .compile ("span.name" )),
329+ SamplingRule (sample_rate = 1.0 , service = re .compile ("my-svc" ), name = re .compile ("span.name" )),
330+ True ,
331+ ),
332+ (
333+ SamplingRule (sample_rate = 1.0 , service = "my-svc" , name = "span.name" ),
334+ SamplingRule (sample_rate = 0.5 , service = "my-svc" , name = "span.name" ),
335+ False ,
336+ ),
337+ (
338+ SamplingRule (sample_rate = 1.0 , service = "my-svc" , name = "span.name" ),
339+ SamplingRule (sample_rate = 1.0 , service = "other" , name = "span.name" ),
340+ False ,
341+ ),
342+ (
343+ SamplingRule (sample_rate = 1.0 , service = "my-svc" , name = "span.name" ),
344+ SamplingRule (sample_rate = 1.0 , service = "my-svc" , name = "span.other" ),
345+ False ,
346+ ),
347+ ],
348+ )
349+ def test_sampling_rule_eq (rule_1 , rule_2 , expected ):
350+ result = rule_1 == rule_2
351+ assert result == expected
352+
353+
266354def test_sampling_rule_init_via_env ():
267355 # Testing single sampling rule
268356 with override_env (dict (DD_TRACE_SAMPLING_RULES = '[{"sample_rate":1.0,"service":"xyz","name":"abc"}]' )):
@@ -534,39 +622,39 @@ def test_datadog_sampler_init():
534622 assert sampler .rules == []
535623 assert isinstance (sampler .limiter , RateLimiter )
536624 assert sampler .limiter .rate_limit == DatadogSampler .DEFAULT_RATE_LIMIT
537- assert isinstance (sampler .default_sampler , RateByServiceSampler )
625+ assert isinstance (sampler ._agent_sampler , RateByServiceSampler )
538626
539627 # With rules
540628 rule = SamplingRule (sample_rate = 1 )
541629 sampler = DatadogSampler (rules = [rule ])
542630 assert sampler .rules == [rule ]
543631 assert sampler .limiter .rate_limit == DatadogSampler .DEFAULT_RATE_LIMIT
544- assert isinstance (sampler .default_sampler , RateByServiceSampler )
632+ assert isinstance (sampler ._agent_sampler , RateByServiceSampler )
545633
546634 # With rate limit
547635 sampler = DatadogSampler (rate_limit = 10 )
548636 assert sampler .limiter .rate_limit == 10
549- assert isinstance (sampler .default_sampler , RateByServiceSampler )
637+ assert isinstance (sampler ._agent_sampler , RateByServiceSampler )
550638
551639 # With default_sample_rate
552640 sampler = DatadogSampler (default_sample_rate = 0.5 )
553641 assert sampler .limiter .rate_limit == DatadogSampler .DEFAULT_RATE_LIMIT
554- assert isinstance ( sampler .default_sampler , SamplingRule )
555- assert sampler .default_sampler . sample_rate == 0.5
642+ assert sampler .rules == [ SamplingRule ( sample_rate = 0.5 )]
643+ assert isinstance ( sampler ._agent_sampler , RateByServiceSampler )
556644
557645 # From env variables
558646 with override_env (dict (DD_TRACE_SAMPLE_RATE = "0.5" , DD_TRACE_RATE_LIMIT = "10" )):
559647 sampler = DatadogSampler ()
560648 assert sampler .limiter .rate_limit == 10
561- assert isinstance ( sampler .default_sampler , SamplingRule )
562- assert sampler .default_sampler . sample_rate == 0.5
649+ assert sampler .rules == [ SamplingRule ( sample_rate = 0.5 )]
650+ assert isinstance ( sampler ._agent_sampler , RateByServiceSampler )
563651
564652 # DD_TRACE_SAMPLE_RATE=0
565653 with override_env (dict (DD_TRACE_SAMPLE_RATE = "0" )):
566654 sampler = DatadogSampler ()
567655 assert sampler .limiter .rate_limit == DatadogSampler .DEFAULT_RATE_LIMIT
568- assert isinstance ( sampler .default_sampler , SamplingRule )
569- assert sampler .default_sampler . sample_rate == 0
656+ assert sampler .rules == [ SamplingRule ( sample_rate = 0 )]
657+ assert isinstance ( sampler ._agent_sampler , RateByServiceSampler )
570658
571659 # Invalid env vars
572660 with override_env (dict (DD_TRACE_SAMPLE_RATE = "asdf" )):
@@ -590,6 +678,10 @@ def test_datadog_sampler_init():
590678 sampler = DatadogSampler (rules = [rule_1 , rule_2 , rule_3 ])
591679 assert sampler .rules == [rule_1 , rule_2 , rule_3 ]
592680
681+ # Ensure default rule is appended
682+ sampler = DatadogSampler (rules = [rule_1 , rule_2 , rule_3 ], default_sample_rate = 0.75 )
683+ assert sampler .rules == [rule_1 , rule_2 , rule_3 , SamplingRule (sample_rate = 0.75 )]
684+
593685
594686@mock .patch ("ddtrace.sampler.RateByServiceSampler.sample" )
595687def test_datadog_sampler_sample_no_rules (mock_sample , dummy_tracer ):
@@ -838,7 +930,7 @@ def test_datadog_sampler_update_rate_by_service_sample_rates(dummy_tracer):
838930 for case in cases :
839931 sampler .update_rate_by_service_sample_rates (case )
840932 rates = {}
841- for k , v in iteritems (sampler .default_sampler ._by_service_samplers ):
933+ for k , v in iteritems (sampler ._agent_sampler ._by_service_samplers ):
842934 rates [k ] = v .sample_rate
843935 assert case == rates , "%s != %s" % (case , rates )
844936
@@ -848,6 +940,6 @@ def test_datadog_sampler_update_rate_by_service_sample_rates(dummy_tracer):
848940 for case in cases :
849941 sampler .update_rate_by_service_sample_rates (case )
850942 rates = {}
851- for k , v in iteritems (sampler .default_sampler ._by_service_samplers ):
943+ for k , v in iteritems (sampler ._agent_sampler ._by_service_samplers ):
852944 rates [k ] = v .sample_rate
853945 assert case == rates , "%s != %s" % (case , rates )
0 commit comments