Spaces:
No application file
No application file
| #!/usr/bin/env python3 | |
| """Validate that the MVP system is working correctly""" | |
| import requests | |
| import time | |
| import json | |
| import sys | |
| MCP_URL = "http://localhost:8000/mcp" | |
| API_KEY = "dev-key-123" | |
| def call_mcp(tool, params=None): | |
| response = requests.post( | |
| MCP_URL, | |
| headers={"X-API-Key": API_KEY, "Content-Type": "application/json"}, | |
| json={"tool": tool, "params": params or {}} | |
| ) | |
| return response.json() | |
| def validate_step(step_name, validation_func): | |
| """Run a validation step and report results""" | |
| print(f"Validating: {step_name}...", end=" ") | |
| try: | |
| result = validation_func() | |
| if result: | |
| print("✅ PASSED") | |
| return True | |
| else: | |
| print("❌ FAILED") | |
| return False | |
| except Exception as e: | |
| print(f"❌ ERROR: {e}") | |
| return False | |
| def check_neo4j(): | |
| """Check Neo4j is accessible via MCP""" | |
| result = call_mcp("get_schema") | |
| return "labels" in result | |
| def check_postgres(): | |
| """Check PostgreSQL has sample data""" | |
| result = call_mcp("query_postgres", {"query": "SELECT COUNT(*) as count FROM customers"}) | |
| return result.get("data", [{}])[0].get("count", 0) > 0 | |
| def check_schema_discovery(): | |
| """Check schema can be discovered""" | |
| result = call_mcp("discover_postgres_schema") | |
| schema = result.get("schema", {}) | |
| return "customers" in schema and "orders" in schema | |
| def create_test_workflow(): | |
| """Create a test workflow""" | |
| # Create workflow | |
| workflow = call_mcp("write_graph", { | |
| "action": "create_node", | |
| "label": "Workflow", | |
| "properties": { | |
| "id": "validation-workflow", | |
| "name": "Validation Test", | |
| "status": "active" | |
| } | |
| }) | |
| # Create test instruction | |
| instruction = call_mcp("write_graph", { | |
| "action": "create_node", | |
| "label": "Instruction", | |
| "properties": { | |
| "id": "validation-inst-1", | |
| "type": "generate_sql", | |
| "sequence": 1, | |
| "status": "pending", | |
| "pause_duration": 5, # Short pause for testing | |
| "parameters": json.dumps({"question": "Count all customers"}) | |
| } | |
| }) | |
| # Link instruction to workflow | |
| call_mcp("query_graph", { | |
| "query": """ | |
| MATCH (w:Workflow {id: 'validation-workflow'}), | |
| (i:Instruction {id: 'validation-inst-1'}) | |
| CREATE (w)-[:HAS_INSTRUCTION]->(i) | |
| """ | |
| }) | |
| return workflow.get("created") is not None | |
| def check_instruction_execution(): | |
| """Check if instruction gets executed""" | |
| # Wait for agent to pick it up (max 60 seconds) | |
| for _ in range(12): | |
| result = call_mcp("query_graph", { | |
| "query": """ | |
| MATCH (i:Instruction {id: 'validation-inst-1'}) | |
| RETURN i.status as status | |
| """ | |
| }) | |
| status = result["data"][0]["status"] if result.get("data") else "unknown" | |
| if status in ["executing", "complete"]: | |
| return True | |
| time.sleep(5) | |
| return False | |
| def check_execution_logged(): | |
| """Check if execution was logged""" | |
| result = call_mcp("query_graph", { | |
| "query": """ | |
| MATCH (i:Instruction {id: 'validation-inst-1'})-[:EXECUTED_AS]->(e:Execution) | |
| RETURN e | |
| """ | |
| }) | |
| return len(result.get("data", [])) > 0 | |
| def check_frontend(): | |
| """Check if frontend is accessible""" | |
| try: | |
| response = requests.get("http://localhost:3000") | |
| return response.status_code == 200 | |
| except: | |
| return False | |
| def main(): | |
| print("=" * 50) | |
| print("MVP SYSTEM VALIDATION") | |
| print("=" * 50) | |
| print() | |
| # Track results | |
| all_passed = True | |
| # Core services | |
| all_passed &= validate_step("Neo4j accessible via MCP", check_neo4j) | |
| all_passed &= validate_step("PostgreSQL has sample data", check_postgres) | |
| all_passed &= validate_step("Frontend is accessible", check_frontend) | |
| # Functionality | |
| all_passed &= validate_step("Schema discovery works", check_schema_discovery) | |
| all_passed &= validate_step("Workflow creation works", create_test_workflow) | |
| print() | |
| print("Waiting for agent to process instruction...") | |
| all_passed &= validate_step("Instruction gets executed", check_instruction_execution) | |
| all_passed &= validate_step("Execution is logged", check_execution_logged) | |
| # Final verification | |
| print() | |
| print("=" * 50) | |
| if all_passed: | |
| print("✅ ALL VALIDATIONS PASSED!") | |
| print("The MVP system is working correctly.") | |
| # Show sample query result | |
| result = call_mcp("query_graph", { | |
| "query": """ | |
| MATCH (n) | |
| RETURN labels(n)[0] as label, count(n) as count | |
| ORDER BY count DESC | |
| """ | |
| }) | |
| print() | |
| print("Graph Statistics:") | |
| for item in result.get("data", []): | |
| print(f" - {item['label']}: {item['count']} nodes") | |
| else: | |
| print("❌ SOME VALIDATIONS FAILED") | |
| print("Please check the logs and fix issues.") | |
| sys.exit(1) | |
| print("=" * 50) | |
| if __name__ == "__main__": | |
| main() | |