|
9 | 9 | from amazon.opentelemetry.distro.attribute_propagating_span_processor import AttributePropagatingSpanProcessor
|
10 | 10 | from amazon.opentelemetry.distro.aws_metric_attributes_span_exporter import AwsMetricAttributesSpanExporter
|
11 | 11 | from amazon.opentelemetry.distro.aws_opentelemetry_configurator import (
|
| 12 | + ApplicationSignalsExporterProvider, |
12 | 13 | AwsOpenTelemetryConfigurator,
|
13 | 14 | _custom_import_sampler,
|
14 | 15 | _customize_exporter,
|
|
21 | 22 | from amazon.opentelemetry.distro.sampler._aws_xray_sampling_client import _AwsXRaySamplingClient
|
22 | 23 | from amazon.opentelemetry.distro.sampler.aws_xray_remote_sampler import AwsXRayRemoteSampler
|
23 | 24 | from opentelemetry.environment_variables import OTEL_LOGS_EXPORTER, OTEL_METRICS_EXPORTER, OTEL_TRACES_EXPORTER
|
| 25 | +from opentelemetry.exporter.otlp.proto.common._internal.metrics_encoder import OTLPMetricExporterMixin |
| 26 | +from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter as OTLPGrpcOTLPMetricExporter |
| 27 | +from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter as OTLPHttpOTLPMetricExporter |
24 | 28 | from opentelemetry.sdk.environment_variables import OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG
|
25 | 29 | from opentelemetry.sdk.resources import Resource
|
26 | 30 | from opentelemetry.sdk.trace import Span, SpanProcessor, Tracer, TracerProvider
|
|
29 | 33 | from opentelemetry.trace import get_tracer_provider
|
30 | 34 |
|
31 | 35 |
|
32 |
| -# This class setup Tracer Provider Globally, which can only set once |
33 |
| -# if there is another setup for tracer provider, may cause issue |
34 | 36 | class TestAwsOpenTelemetryConfigurator(TestCase):
|
| 37 | + """Tests AwsOpenTelemetryConfigurator and AwsOpenTelemetryDistro |
| 38 | +
|
| 39 | + NOTE: This class setup Tracer Provider Globally, which can only be set once. If there is another setup for tracer |
| 40 | + provider, it may cause issues for those tests. |
| 41 | + """ |
| 42 | + |
35 | 43 | @classmethod
|
36 | 44 | def setUpClass(cls):
|
37 |
| - os.environ.setdefault(OTEL_TRACES_EXPORTER, "none") |
38 |
| - os.environ.setdefault(OTEL_METRICS_EXPORTER, "none") |
39 |
| - os.environ.setdefault(OTEL_LOGS_EXPORTER, "none") |
40 |
| - os.environ.setdefault(OTEL_TRACES_SAMPLER, "traceidratio") |
41 |
| - os.environ.setdefault(OTEL_TRACES_SAMPLER_ARG, "0.01") |
| 45 | + # Run AwsOpenTelemetryDistro to set up environment, then validate expected env values. |
42 | 46 | aws_open_telemetry_distro: AwsOpenTelemetryDistro = AwsOpenTelemetryDistro()
|
43 | 47 | aws_open_telemetry_distro.configure(apply_patches=False)
|
| 48 | + validate_distro_environ() |
| 49 | + |
| 50 | + # Overwrite exporter configs to keep tests clean, set sampler configs for tests |
| 51 | + os.environ[OTEL_TRACES_EXPORTER] = "none" |
| 52 | + os.environ[OTEL_METRICS_EXPORTER] = "none" |
| 53 | + os.environ[OTEL_LOGS_EXPORTER] = "none" |
| 54 | + os.environ[OTEL_TRACES_SAMPLER] = "traceidratio" |
| 55 | + os.environ[OTEL_TRACES_SAMPLER_ARG] = "0.01" |
| 56 | + |
| 57 | + # Run configurator and get trace provider |
44 | 58 | aws_otel_configurator: AwsOpenTelemetryConfigurator = AwsOpenTelemetryConfigurator()
|
45 | 59 | aws_otel_configurator.configure()
|
46 | 60 | cls.tracer_provider: TracerProvider = get_tracer_provider()
|
@@ -249,3 +263,40 @@ def test_customize_span_processors(self):
|
249 | 263 | second_processor: SpanProcessor = mock_tracer_provider.add_span_processor.call_args_list[1].args[0]
|
250 | 264 | self.assertIsInstance(second_processor, AwsSpanMetricsProcessor)
|
251 | 265 | os.environ.pop("OTEL_AWS_APPLICATION_SIGNALS_ENABLED", None)
|
| 266 | + |
| 267 | + def test_application_signals_exporter_provider(self): |
| 268 | + # Check default protocol - HTTP, as specified by AwsOpenTelemetryDistro. |
| 269 | + exporter: OTLPMetricExporterMixin = ApplicationSignalsExporterProvider().create_exporter() |
| 270 | + self.assertIsInstance(exporter, OTLPHttpOTLPMetricExporter) |
| 271 | + self.assertEqual("http://localhost:4316/v1/metrics", exporter._endpoint) |
| 272 | + |
| 273 | + # Overwrite protocol to gRPC. |
| 274 | + os.environ["OTEL_EXPORTER_OTLP_PROTOCOL"] = "grpc" |
| 275 | + exporter: SpanExporter = ApplicationSignalsExporterProvider().create_exporter() |
| 276 | + self.assertIsInstance(exporter, OTLPGrpcOTLPMetricExporter) |
| 277 | + self.assertEqual("localhost:4315", exporter._endpoint) |
| 278 | + |
| 279 | + # Overwrite protocol back to HTTP. |
| 280 | + os.environ["OTEL_EXPORTER_OTLP_PROTOCOL"] = "http/protobuf" |
| 281 | + exporter: SpanExporter = ApplicationSignalsExporterProvider().create_exporter() |
| 282 | + self.assertIsInstance(exporter, OTLPHttpOTLPMetricExporter) |
| 283 | + self.assertEqual("http://localhost:4316/v1/metrics", exporter._endpoint) |
| 284 | + |
| 285 | + |
| 286 | +def validate_distro_environ(): |
| 287 | + tc: TestCase = TestCase() |
| 288 | + # Set by OpenTelemetryDistro |
| 289 | + tc.assertEqual("otlp", os.environ.get("OTEL_TRACES_EXPORTER")) |
| 290 | + tc.assertEqual("otlp", os.environ.get("OTEL_METRICS_EXPORTER")) |
| 291 | + |
| 292 | + # Set by AwsOpenTelemetryDistro |
| 293 | + tc.assertEqual("http/protobuf", os.environ.get("OTEL_EXPORTER_OTLP_PROTOCOL")) |
| 294 | + tc.assertEqual( |
| 295 | + "base2_exponential_bucket_histogram", os.environ.get("OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION") |
| 296 | + ) |
| 297 | + tc.assertEqual("xray,tracecontext,b3,b3multi", os.environ.get("OTEL_PROPAGATORS")) |
| 298 | + tc.assertEqual("xray", os.environ.get("OTEL_PYTHON_ID_GENERATOR")) |
| 299 | + |
| 300 | + # Not set |
| 301 | + tc.assertEqual(None, os.environ.get("OTEL_TRACES_SAMPLER")) |
| 302 | + tc.assertEqual(None, os.environ.get("OTEL_TRACES_SAMPLER_ARG")) |
0 commit comments