|
3 | 3 | import os
|
4 | 4 | import time
|
5 | 5 | from unittest import TestCase
|
6 |
| -from unittest.mock import patch |
| 6 | +from unittest.mock import MagicMock, patch |
7 | 7 |
|
| 8 | +from amazon.opentelemetry.distro.always_record_sampler import AlwaysRecordSampler |
| 9 | +from amazon.opentelemetry.distro.attribute_propagating_span_processor import AttributePropagatingSpanProcessor |
| 10 | +from amazon.opentelemetry.distro.aws_metric_attributes_span_exporter import AwsMetricAttributesSpanExporter |
8 | 11 | from amazon.opentelemetry.distro.aws_opentelemetry_configurator import (
|
9 | 12 | AwsOpenTelemetryConfigurator,
|
10 | 13 | _custom_import_sampler,
|
| 14 | + _customize_exporter, |
| 15 | + _customize_sampler, |
| 16 | + _customize_span_processors, |
| 17 | + _is_app_signals_enabled, |
11 | 18 | )
|
12 | 19 | from amazon.opentelemetry.distro.aws_opentelemetry_distro import AwsOpenTelemetryDistro
|
| 20 | +from amazon.opentelemetry.distro.aws_span_metrics_processor import AwsSpanMetricsProcessor |
13 | 21 | from amazon.opentelemetry.distro.sampler._aws_xray_sampling_client import _AwsXRaySamplingClient
|
14 | 22 | from amazon.opentelemetry.distro.sampler.aws_xray_remote_sampler import AwsXRayRemoteSampler
|
15 | 23 | from opentelemetry.environment_variables import OTEL_LOGS_EXPORTER, OTEL_METRICS_EXPORTER, OTEL_TRACES_EXPORTER
|
16 | 24 | from opentelemetry.sdk.environment_variables import OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG
|
17 |
| -from opentelemetry.sdk.trace import Span, Tracer, TracerProvider |
| 25 | +from opentelemetry.sdk.resources import Resource |
| 26 | +from opentelemetry.sdk.trace import Span, SpanProcessor, Tracer, TracerProvider |
| 27 | +from opentelemetry.sdk.trace.export import SpanExporter |
18 | 28 | from opentelemetry.sdk.trace.sampling import Sampler
|
19 | 29 | from opentelemetry.trace import get_tracer_provider
|
20 | 30 |
|
@@ -183,3 +193,51 @@ def test_not_using_xray_sampler_does_not_modify_url_exclusion_env_vars(self):
|
183 | 193 | _: Sampler = _custom_import_sampler("traceidratio", resource=None)
|
184 | 194 | self.assertEqual(os.environ.get("OTEL_PYTHON_REQUESTS_EXCLUDED_URLS", None), ",,,target_A,target_B,,,")
|
185 | 195 | self.assertEqual(os.environ.get("OTEL_PYTHON_URLLIB3_EXCLUDED_URLS", None), "target_C,target_D")
|
| 196 | + |
| 197 | + def test_is_app_signals_enabled(self): |
| 198 | + os.environ.setdefault("OTEL_AWS_APP_SIGNALS_ENABLED", "True") |
| 199 | + self.assertTrue(_is_app_signals_enabled()) |
| 200 | + os.environ.pop("OTEL_AWS_APP_SIGNALS_ENABLED", None) |
| 201 | + |
| 202 | + os.environ.setdefault("OTEL_AWS_APP_SIGNALS_ENABLED", "False") |
| 203 | + self.assertFalse(_is_app_signals_enabled()) |
| 204 | + os.environ.pop("OTEL_AWS_APP_SIGNALS_ENABLED", None) |
| 205 | + self.assertFalse(_is_app_signals_enabled()) |
| 206 | + |
| 207 | + def test_customize_sampler(self): |
| 208 | + mock_sampler: Sampler = MagicMock() |
| 209 | + customized_sampler: Sampler = _customize_sampler(mock_sampler) |
| 210 | + self.assertEqual(mock_sampler, customized_sampler) |
| 211 | + |
| 212 | + os.environ.setdefault("OTEL_AWS_APP_SIGNALS_ENABLED", "True") |
| 213 | + customized_sampler = _customize_sampler(mock_sampler) |
| 214 | + self.assertNotEqual(mock_sampler, customized_sampler) |
| 215 | + self.assertIsInstance(customized_sampler, AlwaysRecordSampler) |
| 216 | + self.assertEqual(mock_sampler, customized_sampler._root_sampler) |
| 217 | + os.environ.pop("OTEL_AWS_APP_SIGNALS_ENABLED", None) |
| 218 | + |
| 219 | + def test_customize_exporter(self): |
| 220 | + mock_exporter: SpanExporter = MagicMock() |
| 221 | + customized_exporter: SpanExporter = _customize_exporter(mock_exporter, Resource.get_empty()) |
| 222 | + self.assertEqual(mock_exporter, customized_exporter) |
| 223 | + |
| 224 | + os.environ.setdefault("OTEL_AWS_APP_SIGNALS_ENABLED", "True") |
| 225 | + customized_exporter = _customize_exporter(mock_exporter, Resource.get_empty()) |
| 226 | + self.assertNotEqual(mock_exporter, customized_exporter) |
| 227 | + self.assertIsInstance(customized_exporter, AwsMetricAttributesSpanExporter) |
| 228 | + self.assertEqual(mock_exporter, customized_exporter._delegate) |
| 229 | + os.environ.pop("OTEL_AWS_APP_SIGNALS_ENABLED", None) |
| 230 | + |
| 231 | + def test_customize_span_processors(self): |
| 232 | + mock_tracer_provider: TracerProvider = MagicMock() |
| 233 | + _customize_span_processors(mock_tracer_provider, Resource.get_empty()) |
| 234 | + self.assertEqual(mock_tracer_provider.add_span_processor.call_count, 0) |
| 235 | + |
| 236 | + os.environ.setdefault("OTEL_AWS_APP_SIGNALS_ENABLED", "True") |
| 237 | + _customize_span_processors(mock_tracer_provider, Resource.get_empty()) |
| 238 | + self.assertEqual(mock_tracer_provider.add_span_processor.call_count, 2) |
| 239 | + first_processor: SpanProcessor = mock_tracer_provider.add_span_processor.call_args_list[0].args[0] |
| 240 | + self.assertIsInstance(first_processor, AttributePropagatingSpanProcessor) |
| 241 | + second_processor: SpanProcessor = mock_tracer_provider.add_span_processor.call_args_list[1].args[0] |
| 242 | + self.assertIsInstance(second_processor, AwsSpanMetricsProcessor) |
| 243 | + os.environ.pop("OTEL_AWS_APP_SIGNALS_ENABLED", None) |
0 commit comments