Files
tracer-cloud--opensre/tests/e2e/mongodb/test_mongodb_e2e.py
T
wehub-resource-sync 4b6817381b
CI (OpenClaw E2E) / openclaw test (push) Has been cancelled
CI / coverage-report (push) Has been cancelled
CI / test-kubernetes (push) Has been cancelled
CI / should-run-thorough (push) Has been cancelled
CI / test-thorough (cloudwatch-demo) (push) Has been cancelled
CI / test-thorough (flink-ecs) (push) Has been cancelled
CI / test-thorough (upstream-lambda) (push) Has been cancelled
CI / test-thorough (prefect-ecs-fargate) (push) Has been cancelled
Release / build-binaries (zip, opensre.exe, onefile, windows-latest, windows-x64) (push) Has been cancelled
Benchmark image — build + push to ECR (any adapter) / build + push (push) Has been cancelled
CI / quality (ubuntu-latest) (push) Has been cancelled
CI / test (tools-runtime) (push) Has been cancelled
CI / test (e2e-general) (push) Has been cancelled
CI / test (cli-runtime) (push) Has been cancelled
CI / test (e2e-provider-and-openclaw) (push) Has been cancelled
CI / test (integrations-and-misc) (push) Has been cancelled
Release / verify (push) Has been cancelled
Release / build-python-dist (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-15-intel, darwin-x64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-latest, darwin-arm64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04, linux-x64) (push) Has been cancelled
Release / publish-release (push) Has been cancelled
Release / publish-main-release (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-checks (no-LLM) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-live shard ${{ matrix.shard_index }} (push) Has been cancelled
Release / prepare (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04-arm, linux-arm64) (push) Has been cancelled
Synthetic Deterministic Tests / Synthetic offline (deterministic) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:45 +08:00

217 lines
8.2 KiB
Python

"""MongoDB E2E tests verifying integration with investigation pipeline.
Tests:
- MongoDB config resolution from store and env
- MongoDB verification (ping, server info)
- MongoDB source detection in investigation state
- MongoDB tools availability for query execution
"""
from __future__ import annotations
import json
from pathlib import Path
from unittest.mock import MagicMock, patch
import pytest
from integrations.catalog import classify_integrations as _classify_integrations
from integrations.verify import verify_integrations
from tests.e2e.source_helpers import resolve_available_tool_sources
class TestMongoDBIntegrationResolution:
"""Test MongoDB config resolution from multiple sources."""
def test_mongodb_resolution_from_store(self):
"""MongoDB integration correctly resolved from local store."""
integrations = [
{
"id": "mongodb-prod",
"service": "mongodb",
"status": "active",
"credentials": {
"connection_string": "mongodb+srv://user:pass@cluster.example.net",
"database": "production",
"auth_source": "admin",
"tls": True,
},
}
]
resolved = _classify_integrations(integrations)
assert "mongodb" in resolved
assert (
resolved["mongodb"]["connection_string"]
== "mongodb+srv://user:pass@cluster.example.net"
)
assert resolved["mongodb"]["database"] == "production"
assert resolved["mongodb"]["auth_source"] == "admin"
assert resolved["mongodb"]["tls"] is True
def test_mongodb_invalid_config_skipped(self):
"""Invalid MongoDB integration config is safely skipped."""
integrations = [
{
"id": "bad-mongo",
"service": "mongodb",
"status": "active",
"credentials": {
"connection_string": "",
},
}
]
resolved = _classify_integrations(integrations)
# Should not include MongoDB if connection_string is empty
assert resolved.get("mongodb") is None
class TestMongoDBToolSourceAvailability:
"""Test MongoDB source availability in the tool-registry investigation path."""
def test_mongodb_tool_source_available_from_resolved_integration(self):
"""MongoDB source is available when a configured integration exists."""
resolved_integrations = {
"mongodb": {
"connection_string": "mongodb://localhost",
"database": "analytics",
"auth_source": "admin",
"tls": True,
}
}
sources = resolve_available_tool_sources(resolved_integrations)
assert "mongodb" in sources
assert sources["mongodb"]["connection_string"] == "mongodb://localhost"
assert sources["mongodb"]["database"] == "analytics"
def test_mongodb_tool_source_uses_configured_database(self):
"""MongoDB tool params come from the resolved integration config."""
resolved_integrations = {
"mongodb": {
"connection_string": "mongodb://localhost",
"database": "default_db",
"auth_source": "admin",
"tls": True,
}
}
sources = resolve_available_tool_sources(resolved_integrations)
assert "mongodb" in sources
assert sources["mongodb"]["database"] == "default_db"
def test_mongodb_tool_source_unavailable_if_unconfigured(self):
"""MongoDB source is not included if not configured."""
resolved_integrations = {}
sources = resolve_available_tool_sources(resolved_integrations)
assert "mongodb" not in sources
class TestMongoDBVerification:
"""Test MongoDB integration verification flow."""
@patch("integrations.mongodb._get_client")
def test_verify_mongodb_success(self, mock_get_client):
"""MongoDB verification succeeds with valid config."""
mock_client = MagicMock()
mock_client.admin.command.return_value = {"ok": 1}
mock_client.server_info.return_value = {"version": "6.0.5"}
mock_get_client.return_value = mock_client
results = verify_integrations(service="mongodb")
assert len(results) >= 1
mongo_result = next((r for r in results if r["service"] == "mongodb"), None)
assert mongo_result is not None
# Status can be passed or missing depending on env config
assert mongo_result["status"] in ("passed", "missing")
def test_verify_integrations_structure(self):
"""Verify integrations returns expected result structure."""
# Just verify the function exists and can be called - actual verification
# depends on environment setup (MongoDB connection available)
try:
results = verify_integrations(service="mongodb")
assert isinstance(results, list)
for result in results:
if result["service"] == "mongodb":
assert "status" in result
assert "detail" in result
assert result["status"] in ("passed", "missing", "failed")
except Exception as exc:
# If no MongoDB is configured, that's ok - just testing structure
assert exc.__class__.__name__
class TestMongoDBToolsAvailability:
"""Test MongoDB tools are available and configured."""
def test_mongodb_tools_exist_as_modules(self):
"""MongoDB tools modules exist and are properly structured."""
try:
import integrations.mongodb.tools.mongodb_collection_stats_tool as MongoDBCollectionStatsTool
import integrations.mongodb.tools.mongodb_current_ops_tool as MongoDBCurrentOpsTool
import integrations.mongodb.tools.mongodb_profiler_tool as MongoDBProfilerTool
import integrations.mongodb.tools.mongodb_replica_status_tool as MongoDBReplicaStatusTool
import integrations.mongodb.tools.mongodb_server_status_tool as MongoDBServerStatusTool
# All 5 tool modules should be importable
assert MongoDBServerStatusTool is not None
assert MongoDBCurrentOpsTool is not None
assert MongoDBReplicaStatusTool is not None
assert MongoDBProfilerTool is not None
assert MongoDBCollectionStatsTool is not None
except ImportError as e:
pytest.fail(f"Failed to import MongoDB tool modules: {e}")
def test_mongodb_integration_config_has_required_fields(self):
"""MongoDB integration provides required fields in resolved config."""
from integrations.config_models import MongoDBIntegrationConfig
config = MongoDBIntegrationConfig(
connection_string="mongodb://localhost",
database="test_db",
auth_source="admin",
tls=True,
integration_id="test-id",
)
assert config.connection_string == "mongodb://localhost"
assert config.database == "test_db"
assert config.auth_source == "admin"
assert config.tls is True
assert config.integration_id == "test-id"
class TestMongoDBAlertFixture:
"""Test the MongoDB alert fixture is valid and parseable."""
def test_mongodb_alert_fixture_is_valid_json(self):
"""MongoDB alert fixture is valid JSON."""
fixture_path = Path(__file__).parent / "mongodb_alert.json"
assert fixture_path.exists(), f"Alert fixture not found at {fixture_path}"
with fixture_path.open() as f:
alert = json.load(f)
assert isinstance(alert, dict)
assert "state" in alert
assert "commonLabels" in alert
assert "commonAnnotations" in alert
def test_mongodb_alert_fixture_has_mongodb_context(self):
"""MongoDB alert fixture contains MongoDB-specific context."""
fixture_path = Path(__file__).parent / "mongodb_alert.json"
with fixture_path.open() as f:
alert = json.load(f)
labels = alert.get("commonLabels", {})
# Alert should have MongoDB-specific fields for source detection
assert "mongodb_instance" in labels