Skip to content

Commit 596dda6

Browse files
XinRanZhAWSADOT Patch workflow
andauthored
Implement tests for builder and move tracer provider tests to correct location (#48)
*Description of changes:* Implement tests for builder and move tracer provider tests to correct location By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. --------- Co-authored-by: ADOT Patch workflow <[email protected]>
1 parent 96d67f7 commit 596dda6

File tree

4 files changed

+65
-59
lines changed

4 files changed

+65
-59
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
11
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
# SPDX-License-Identifier: Apache-2.0
33
from unittest import TestCase
4+
from unittest.mock import MagicMock
45

6+
from amazon.opentelemetry.distro.attribute_propagating_span_processor import AttributePropagatingSpanProcessor
57
from amazon.opentelemetry.distro.attribute_propagating_span_processor_builder import (
68
AttributePropagatingSpanProcessorBuilder,
79
)
10+
from opentelemetry.sdk.trace import ReadableSpan
811

912

1013
class TestAttributePropagatingSpanProcessorBuilder(TestCase):
1114
def test_basic(self):
1215
builder: AttributePropagatingSpanProcessorBuilder = AttributePropagatingSpanProcessorBuilder()
1316
self.assertIs(builder.set_propagation_data_key("test"), builder)
17+
18+
def mock_extractor(_: ReadableSpan) -> str:
19+
return "test"
20+
21+
self.assertIs(builder.set_propagation_data_extractor(mock_extractor), builder)
22+
self.assertIs(builder.set_attributes_keys_to_propagate(["test"]), builder)
23+
span_processor: AttributePropagatingSpanProcessor = builder.build()
24+
self.assertIs(span_processor._propagation_data_key, "test")
25+
self.assertEqual(span_processor._propagation_data_extractor(MagicMock()), "test")
26+
self.assertEqual(span_processor._attribute_keys_to_propagate, tuple(["test"]))
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
# SPDX-License-Identifier: Apache-2.0
33
from unittest import TestCase
4+
from unittest.mock import MagicMock
45

56
from amazon.opentelemetry.distro._aws_metric_attribute_generator import _AwsMetricAttributeGenerator
7+
from amazon.opentelemetry.distro.aws_metric_attributes_span_exporter import AwsMetricAttributesSpanExporter
68
from amazon.opentelemetry.distro.aws_metric_attributes_span_exporter_builder import (
79
AwsMetricAttributesSpanExporterBuilder,
810
)
911

1012

1113
class TestAwsMetricAttributesSpanExporterBuilder(TestCase):
1214
def test_basic(self):
13-
generator: _AwsMetricAttributeGenerator = _AwsMetricAttributeGenerator()
15+
generator: _AwsMetricAttributeGenerator = MagicMock()
16+
generator.test_key = "test"
1417
builder: AwsMetricAttributesSpanExporterBuilder = AwsMetricAttributesSpanExporterBuilder(None, None)
1518
self.assertIs(builder.set_generator(generator), builder)
19+
exporter: AwsMetricAttributesSpanExporter = builder.build()
20+
self.assertIs(exporter._generator.test_key, "test")
Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,54 @@
11
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
# SPDX-License-Identifier: Apache-2.0
3+
import os
4+
import time
35
from unittest import TestCase
46

57
from amazon.opentelemetry.distro.aws_opentelemetry_configurator import AwsOpenTelemetryConfigurator
6-
from opentelemetry.sdk._configuration import _OTelSDKConfigurator
8+
from amazon.opentelemetry.distro.aws_opentelemetry_distro import AwsOpenTelemetryDistro
9+
from opentelemetry.environment_variables import OTEL_LOGS_EXPORTER, OTEL_METRICS_EXPORTER, OTEL_TRACES_EXPORTER
10+
from opentelemetry.sdk.environment_variables import OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG
11+
from opentelemetry.sdk.trace import Span, Tracer, TracerProvider
12+
from opentelemetry.trace import get_tracer_provider
713

814

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

aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_tracer_configurer.py

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)