From 92e2d9491e90750760107b95a86597447bbbe95d Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 14 Mar 2025 10:32:05 +0000 Subject: [PATCH] Enhance tests and refine OpenTelemetry version constraints Co-Authored-By: Joe Moura --- pyproject.toml | 6 +- .../test_opentelemetry_compatibility.py | 90 +++++++++++++------ 2 files changed, 68 insertions(+), 28 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7279a4f14..123744369 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,9 +17,9 @@ dependencies = [ "pdfplumber>=0.11.4", "regex>=2024.9.11", # Telemetry and Monitoring - "opentelemetry-api>=1.22.0,<2.0.0", - "opentelemetry-sdk>=1.22.0,<2.0.0", - "opentelemetry-exporter-otlp-proto-http>=1.22.0,<2.0.0", + "opentelemetry-api>=1.22.0,<1.32.0", + "opentelemetry-sdk>=1.22.0,<1.32.0", + "opentelemetry-exporter-otlp-proto-http>=1.22.0,<1.32.0", # Data Handling "chromadb>=0.5.23", "openpyxl>=3.1.5", diff --git a/tests/telemetry/test_opentelemetry_compatibility.py b/tests/telemetry/test_opentelemetry_compatibility.py index 6138dba36..fee6dc513 100644 --- a/tests/telemetry/test_opentelemetry_compatibility.py +++ b/tests/telemetry/test_opentelemetry_compatibility.py @@ -4,35 +4,75 @@ import pytest def test_opentelemetry_imports(): - """Test that all required OpenTelemetry modules can be imported.""" - # 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 + """Test that all required OpenTelemetry modules can be imported. - # 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' + 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.""" + """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 - # Create an instance of the Telemetry class + # Test with telemetry disabled via environment variable + os.environ["OTEL_SDK_DISABLED"] = "true" telemetry = Telemetry() + assert telemetry.ready is False - # Check if the telemetry instance is initialized correctly - assert hasattr(telemetry, 'ready') - assert hasattr(telemetry, 'trace_set') - - # Try to set the tracer - telemetry.set_tracer() + # Reset environment variable + os.environ.pop("OTEL_SDK_DISABLED", None)