|
14 | 14 | from opentelemetry.trace import get_tracer_provider
|
15 | 15 |
|
16 | 16 |
|
| 17 | +# This class setup Tracer Provider Globally, which can only set once |
| 18 | +# if there is another setup for tracer provider, may cause issue |
17 | 19 | class TestAwsTracerConfigurer(TestCase):
|
18 |
| - def setUp(self): |
| 20 | + @classmethod |
| 21 | + def setUpClass(cls): |
19 | 22 | os.environ.setdefault(OTEL_TRACES_EXPORTER, "none")
|
20 | 23 | os.environ.setdefault(OTEL_METRICS_EXPORTER, "none")
|
21 | 24 | os.environ.setdefault(OTEL_LOGS_EXPORTER, "none")
|
22 | 25 | os.environ.setdefault(OTEL_TRACES_SAMPLER, "traceidratio")
|
23 | 26 | os.environ.setdefault(OTEL_TRACES_SAMPLER_ARG, "0.01")
|
24 |
| - self.span_exporter: InMemorySpanExporter = InMemorySpanExporter() |
25 |
| - self.simple_span_processor: SimpleSpanProcessor = SimpleSpanProcessor(self.span_exporter) |
26 |
| - self.aws_otel_configurator: AwsOpenTelemetryConfigurator = AwsOpenTelemetryConfigurator() |
27 |
| - self.aws_otel_configurator.configure() |
28 |
| - self.tracer_provider: TracerProvider = get_tracer_provider() |
29 |
| - self.aws_open_telemetry_distro: AwsOpenTelemetryDistro = AwsOpenTelemetryDistro() |
30 |
| - self.aws_open_telemetry_distro.configure() |
| 27 | + aws_open_telemetry_distro: AwsOpenTelemetryDistro = AwsOpenTelemetryDistro() |
| 28 | + aws_open_telemetry_distro.configure() |
| 29 | + aws_otel_configurator: AwsOpenTelemetryConfigurator = AwsOpenTelemetryConfigurator() |
| 30 | + aws_otel_configurator.configure() |
| 31 | + cls.tracer_provider: TracerProvider = get_tracer_provider() |
31 | 32 |
|
| 33 | + # Sanity check that the trace ID ratio sampler works fine with the x-ray generator. |
32 | 34 | def test_provide_generate_xray_ids(self):
|
33 | 35 | for _ in range(20):
|
34 | 36 | tracer: Tracer = self.tracer_provider.get_tracer("test")
|
35 | 37 | start_time_sec: int = int(time.time())
|
36 | 38 | span: Span = tracer.start_span("test")
|
37 | 39 | trace_id: int = span.get_span_context().trace_id
|
38 |
| - self.assertGreater(trace_id, start_time_sec) |
| 40 | + trace_id_4_byte_hex: str = hex(trace_id)[2:10] |
| 41 | + trace_id_4_byte_int: int = int(trace_id_4_byte_hex, 16) |
| 42 | + self.assertGreaterEqual(trace_id_4_byte_int, start_time_sec) |
39 | 43 |
|
| 44 | + # Sanity check that the trace ID ratio sampler works fine with the x-ray generator. |
40 | 45 | def test_trace_id_ratio_sampler(self):
|
41 | 46 | for _ in range(20):
|
42 |
| - num_spans: int = 10000 |
| 47 | + num_spans: int = 100000 |
43 | 48 | num_sampled: int = 0
|
44 | 49 | tracer: Tracer = self.tracer_provider.get_tracer("test")
|
45 | 50 | for _ in range(num_spans):
|
46 | 51 | span: Span = tracer.start_span("test")
|
47 | 52 | if span.get_span_context().trace_flags.sampled:
|
48 | 53 | num_sampled += 1
|
49 | 54 | span.end()
|
| 55 | + # Configured for 1%, confirm there are at most 5% to account for randomness and reduce test flakiness. |
50 | 56 | self.assertGreater(0.05, num_sampled / num_spans)
|
0 commit comments