mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-08 15:48:29 +00:00
- Remove unused imports: pathlib.Path, opentelemetry modules - Remove unused variable assignment for context - All ruff checks now pass locally Co-Authored-By: João <joao@crewai.com>
92 lines
3.8 KiB
Python
92 lines
3.8 KiB
Python
"""Tests for dependency compatibility, specifically for issue #3413.
|
|
|
|
This module tests that CrewAI can be installed alongside Google Cloud SDKs
|
|
without protobuf dependency conflicts.
|
|
"""
|
|
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
import pytest
|
|
|
|
|
|
class TestDependencyCompatibility:
|
|
"""Test dependency compatibility with Google Cloud SDKs."""
|
|
|
|
def test_opentelemetry_protobuf_compatibility(self):
|
|
"""Test that opentelemetry versions work with protobuf<5.0."""
|
|
try:
|
|
from opentelemetry.sdk.trace import TracerProvider
|
|
|
|
tracer_provider = TracerProvider()
|
|
tracer = tracer_provider.get_tracer("test")
|
|
|
|
with tracer.start_as_current_span("test_span") as span:
|
|
span.set_attribute("test", "value")
|
|
assert span is not None
|
|
|
|
except ImportError as e:
|
|
pytest.fail(f"Failed to import opentelemetry modules: {e}")
|
|
|
|
def test_google_cloud_sdk_compatibility_simulation(self):
|
|
"""Simulate Google Cloud SDK protobuf requirements."""
|
|
try:
|
|
import google.protobuf
|
|
version_parts = google.protobuf.__version__.split('.')
|
|
major_version = int(version_parts[0])
|
|
|
|
assert major_version < 5, f"protobuf version {google.protobuf.__version__} should be <5.0 for Google Cloud SDK compatibility"
|
|
|
|
except ImportError:
|
|
pytest.skip("protobuf not installed, skipping compatibility test")
|
|
|
|
def test_crewai_telemetry_functionality(self):
|
|
"""Test that CrewAI telemetry functionality works with downgraded opentelemetry."""
|
|
try:
|
|
from crewai.telemetry.telemetry import Telemetry
|
|
from crewai.utilities.crew.crew_context import get_crew_context
|
|
|
|
telemetry = Telemetry()
|
|
assert telemetry is not None
|
|
|
|
get_crew_context()
|
|
|
|
except ImportError as e:
|
|
pytest.fail(f"Failed to import CrewAI telemetry modules: {e}")
|
|
|
|
def test_dry_run_installation_compatibility(self):
|
|
"""Test that CrewAI and Google Cloud SDKs can be installed together."""
|
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
try:
|
|
result = subprocess.run([
|
|
sys.executable, "-m", "pip", "install", "--dry-run", "--quiet",
|
|
"opentelemetry-api>=1.27.0,<1.30.0",
|
|
"opentelemetry-sdk>=1.27.0,<1.30.0",
|
|
"opentelemetry-exporter-otlp-proto-http>=1.27.0,<1.30.0",
|
|
"google-cloud-storage"
|
|
], capture_output=True, text=True, cwd=temp_dir)
|
|
|
|
assert result.returncode == 0, f"Dry run installation failed: {result.stderr}"
|
|
|
|
assert "protobuf" in result.stdout.lower(), "protobuf should be in installation plan"
|
|
|
|
except Exception as e:
|
|
pytest.fail(f"Dry run installation test failed: {e}")
|
|
|
|
def test_protobuf_version_constraint_resolution(self):
|
|
"""Test that protobuf version constraints are properly resolved."""
|
|
try:
|
|
import google.protobuf
|
|
version = google.protobuf.__version__
|
|
|
|
version_parts = [int(x) for x in version.split('.')]
|
|
major, minor = version_parts[0], version_parts[1]
|
|
|
|
assert major >= 3, f"protobuf version {version} should be >=3.19"
|
|
if major == 3:
|
|
assert minor >= 19, f"protobuf version {version} should be >=3.19"
|
|
assert major < 5, f"protobuf version {version} should be <5.0 for Google Cloud SDK compatibility"
|
|
|
|
except ImportError:
|
|
pytest.skip("protobuf not installed, skipping version constraint test")
|