ClaudeFlow ported, needs cleanup
This commit is contained in:
+161
-2
@@ -1,7 +1,22 @@
|
||||
"""Behave test environment setup."""
|
||||
"""
|
||||
Behave test environment setup for CleverClaude.
|
||||
|
||||
This module configures the testing environment for BDD scenarios,
|
||||
providing fixtures, test data, and integration with the CleverClaude system.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from behave import fixture, use_fixture
|
||||
from behave.runner import Context
|
||||
|
||||
|
||||
def before_all(context):
|
||||
@@ -14,8 +29,152 @@ def before_all(context):
|
||||
|
||||
context.project_root = project_root
|
||||
|
||||
# Initialize test context for CleverClaude testing
|
||||
context.test_context = TestContext()
|
||||
|
||||
def before_scenario(context, _scenario):
|
||||
# Set testing environment
|
||||
os.environ["CLEVERCLAUDE_ENVIRONMENT"] = "testing"
|
||||
os.environ["CLEVERCLAUDE_DEBUG"] = "true"
|
||||
os.environ["CLEVERCLAUDE_MONITORING_LOG_LEVEL"] = "DEBUG"
|
||||
|
||||
print("Starting CleverClaude BDD test suite")
|
||||
|
||||
|
||||
def before_scenario(context, scenario):
|
||||
"""Reset context before each scenario."""
|
||||
context.runner = None
|
||||
context.result = None
|
||||
|
||||
# Setup for CleverClaude testing
|
||||
print(f"Starting scenario: {scenario.name}")
|
||||
|
||||
# Setup fixtures for each scenario
|
||||
use_fixture(temp_directory, context)
|
||||
use_fixture(event_loop, context)
|
||||
|
||||
# Clear test results
|
||||
context.test_context.test_results.clear()
|
||||
context.test_context.created_agents.clear()
|
||||
context.test_context.created_swarms.clear()
|
||||
|
||||
|
||||
def after_scenario(context, scenario):
|
||||
"""Cleanup after each scenario."""
|
||||
print(f"Completed scenario: {scenario.name} - {scenario.status.name}")
|
||||
|
||||
# Additional cleanup if needed
|
||||
if hasattr(context.test_context, "temp_dir") and context.test_context.temp_dir:
|
||||
try:
|
||||
if context.test_context.temp_dir.exists():
|
||||
shutil.rmtree(context.test_context.temp_dir, ignore_errors=True)
|
||||
except Exception as e:
|
||||
print(f"Error cleaning up temp directory: {e}")
|
||||
|
||||
|
||||
def after_all(_context):
|
||||
"""Global cleanup after all tests."""
|
||||
print("CleverClaude BDD test suite completed")
|
||||
|
||||
# Clean up environment variables
|
||||
for var in ["CLEVERCLAUDE_ENVIRONMENT", "CLEVERCLAUDE_DEBUG", "CLEVERCLAUDE_CONFIG_DIR"]:
|
||||
if var in os.environ:
|
||||
del os.environ[var]
|
||||
|
||||
|
||||
class TestContext:
|
||||
"""Test context for CleverClaude BDD scenarios."""
|
||||
|
||||
def __init__(self):
|
||||
self.app: Any | None = None
|
||||
self.agent_manager: Any | None = None
|
||||
self.swarm_coordinator: Any | None = None
|
||||
self.mcp_client: Any | None = None
|
||||
self.temp_dir: Path | None = None
|
||||
self.config_dir: Path | None = None
|
||||
self.created_agents: list[str] = []
|
||||
self.created_swarms: list[str] = []
|
||||
self.test_results: dict[str, Any] = {}
|
||||
self.event_loop: asyncio.AbstractEventLoop | None = None
|
||||
|
||||
|
||||
@fixture
|
||||
def temp_directory(context: Context):
|
||||
"""Create a temporary directory for test files."""
|
||||
temp_dir = Path(tempfile.mkdtemp(prefix="cleverclaude_test_"))
|
||||
context.test_context.temp_dir = temp_dir
|
||||
|
||||
# Create config directory structure
|
||||
config_dir = temp_dir / ".cleverclaude"
|
||||
config_dir.mkdir(exist_ok=True)
|
||||
(config_dir / "data").mkdir(exist_ok=True)
|
||||
(config_dir / "logs").mkdir(exist_ok=True)
|
||||
(config_dir / "cache").mkdir(exist_ok=True)
|
||||
|
||||
context.test_context.config_dir = config_dir
|
||||
|
||||
# Create basic test config
|
||||
test_config = f"""
|
||||
# Test CleverClaude Configuration
|
||||
app:
|
||||
name: "CleverClaude Test"
|
||||
version: "2.0.0"
|
||||
environment: "testing"
|
||||
debug: true
|
||||
|
||||
database:
|
||||
url: "sqlite+aiosqlite:///{config_dir}/test.db"
|
||||
echo: false
|
||||
|
||||
redis:
|
||||
url: "redis://localhost:6379/15" # Test database
|
||||
|
||||
agents:
|
||||
max_agents: 10
|
||||
default_timeout: 30
|
||||
health_check_interval: 5
|
||||
|
||||
swarm:
|
||||
default_topology: "mesh"
|
||||
max_swarm_size: 5
|
||||
coordination_timeout: 30
|
||||
|
||||
api:
|
||||
host: "127.0.0.1"
|
||||
port: 8080 # Different port for testing
|
||||
docs_enabled: false
|
||||
|
||||
monitoring:
|
||||
metrics_enabled: false
|
||||
log_level: "DEBUG"
|
||||
log_format: "json"
|
||||
"""
|
||||
|
||||
(config_dir / "config.yaml").write_text(test_config)
|
||||
|
||||
yield temp_dir
|
||||
|
||||
# Cleanup
|
||||
if temp_dir.exists():
|
||||
shutil.rmtree(temp_dir, ignore_errors=True)
|
||||
|
||||
|
||||
@fixture
|
||||
def event_loop(context: Context):
|
||||
"""Create an event loop for async tests."""
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
context.test_context.event_loop = loop
|
||||
|
||||
yield loop
|
||||
|
||||
# Cleanup pending tasks
|
||||
try:
|
||||
pending = asyncio.all_tasks(loop)
|
||||
if pending:
|
||||
for task in pending:
|
||||
task.cancel()
|
||||
loop.run_until_complete(asyncio.gather(*pending, return_exceptions=True))
|
||||
except Exception as e:
|
||||
print(f"Error cleaning up tasks: {e}")
|
||||
finally:
|
||||
loop.close()
|
||||
|
||||
Reference in New Issue
Block a user