from importlib import import_module import pytest def test_opentelemetry_imports(): """Test that all required OpenTelemetry modules can be imported. This test verifies that all necessary OpenTelemetry modules can be imported correctly with the current version constraints, ensuring compatibility between different OpenTelemetry packages. """ try: # Test basic imports from opentelemetry import trace from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter from opentelemetry.sdk.resources import SERVICE_NAME, Resource from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.trace import Span, Status, StatusCode # Verify that the imports are from the expected modules assert trace.__name__ == 'opentelemetry.trace' assert OTLPSpanExporter.__module__ == 'opentelemetry.exporter.otlp.proto.http.trace_exporter' assert Resource.__module__ == 'opentelemetry.sdk.resources' assert TracerProvider.__module__ == 'opentelemetry.sdk.trace' assert BatchSpanProcessor.__module__ == 'opentelemetry.sdk.trace.export' assert Span.__module__ == 'opentelemetry.trace.span' assert Status.__module__ == 'opentelemetry.trace.status' assert StatusCode.__module__ == 'opentelemetry.trace.status' except ImportError as e: pytest.fail(f"Failed to import OpenTelemetry modules: {e}") def test_telemetry_class_initialization(): """Test that the Telemetry class can be initialized with current OpenTelemetry versions. This test verifies that the Telemetry class can be properly initialized and that its core attributes are set correctly. It also tests the set_tracer method to ensure it works as expected with the current OpenTelemetry versions. """ try: from src.crewai.telemetry.telemetry import Telemetry # Create an instance of the Telemetry class telemetry = Telemetry() # Check if the telemetry instance is initialized correctly assert hasattr(telemetry, 'ready') assert hasattr(telemetry, 'trace_set') assert telemetry.trace_set is False # Should be False initially # Try to set the tracer telemetry.set_tracer() # After setting the tracer, trace_set should be True if ready is True if telemetry.ready: assert telemetry.trace_set is True except ImportError as e: pytest.fail(f"Failed to import Telemetry class: {e}") def test_telemetry_configuration(): """Test that the Telemetry class can be configured with different options. This test verifies that the Telemetry class respects environment variables for disabling telemetry collection. """ import os from src.crewai.telemetry.telemetry import Telemetry # Test with telemetry disabled via environment variable os.environ["OTEL_SDK_DISABLED"] = "true" telemetry = Telemetry() assert telemetry.ready is False # Reset environment variable os.environ.pop("OTEL_SDK_DISABLED", None)