SilverSight/scripts/test_concurrency.py
allaun d2ece9d5ad feat: agent-produced extensions to SidonAdapter, UnitDistCandidateGen, and formal infrastructure
- SidonAdapter.lean: updated Singer construction integration
- UnitDistCandidateGen.lean: enhanced golden-angle perturbation
- WeightCandidateGen.lean: cmix weight matrix -> ManifoldShortcut
- ComplexProjectiveSpace.lean: Kaehler geometry scaffolding
- EisensteinSeries.lean: modular forms stub infrastructure
- test scripts: concurrency and Lean LLM integration tests
2026-07-04 01:05:14 -05:00

196 lines
No EOL
5.5 KiB
Python

#!/usr/bin/env python3
"""
Test script to verify MCP server handles concurrent agent requests correctly.
"""
import json
import subprocess
import time
from threading import Thread
from queue import Queue
SILVERSIGHT = "/home/allaun/SilverSight"
def send_mcp_request(request):
"""Send a request to the MCP server and get response."""
proc = subprocess.Popen(
["python3", f"{SILVERSIGHT}/scripts/mcp_autoproof.py", "--stdio"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
cwd=SILVERSIGHT
)
# Send request
proc.stdin.write(json.dumps(request) + "\n")
proc.stdin.flush()
proc.stdin.close()
# Get response
response = proc.stdout.readline()
proc.wait()
return json.loads(response) if response else None
def worker(agent_id, request, results):
"""Worker function for concurrent testing."""
print(f"[Agent {agent_id}] Sending request: {request.get('method')}")
start = time.time()
try:
response = send_mcp_request(request)
elapsed = time.time() - start
if response:
result = response.get("result", {})
status = result.get("content", [{}])[0].get("text", "")
status_json = json.loads(status) if status else {}
results.put({
"agent_id": agent_id,
"elapsed": elapsed,
"status": status_json.get("status", "unknown"),
"message": status_json.get("message", "")[:100]
})
print(f"[Agent {agent_id}] Response in {elapsed:.2f}s: {status_json.get('status')}")
else:
results.put({
"agent_id": agent_id,
"elapsed": elapsed,
"status": "error",
"message": "No response"
})
print(f"[Agent {agent_id}] No response")
except Exception as e:
elapsed = time.time() - start
results.put({
"agent_id": agent_id,
"elapsed": elapsed,
"status": "error",
"message": str(e)[:100]
})
print(f"[Agent {agent_id}] Error: {e}")
def test_concurrent_get_context():
"""Test multiple agents reading the same file."""
print("\n=== Test: Concurrent get_sorry_context ===")
results = Queue()
threads = []
for i in range(3):
request = {
"method": "tools/call",
"params": {
"name": "get_sorry_context",
"arguments": {
"filepath": "formal/CoreFormalism/ComplexProjectiveSpace.lean"
}
}
}
t = Thread(target=worker, args=(i, request, results))
threads.append(t)
t.start()
time.sleep(0.1) # Small delay to stagger requests
for t in threads:
t.join()
print("\nResults:")
while not results.empty():
r = results.get()
print(f" Agent {r['agent_id']}: {r['status']} ({r['elapsed']:.2f}s) - {r['message'][:80]}")
def test_concurrent_check_proof():
"""Test multiple agents checking proofs simultaneously."""
print("\n=== Test: Concurrent check_proof ===")
results = Queue()
threads = []
for i in range(2):
request = {
"method": "tools/call",
"params": {
"name": "check_proof",
"arguments": {
"target": "CoreFormalism.ComplexProjectiveSpace"
}
}
}
t = Thread(target=worker, args=(i, request, results))
threads.append(t)
t.start()
for t in threads:
t.join()
print("\nResults:")
while not results.empty():
r = results.get()
print(f" Agent {r['agent_id']}: {r['status']} ({r['elapsed']:.2f}s) - {r['message'][:80]}")
def test_mixed_operations():
"""Test mixed operations happening concurrently."""
print("\n=== Test: Mixed Operations ===")
results = Queue()
threads = []
requests = [
{
"method": "tools/call",
"params": {
"name": "get_sorry_context",
"arguments": {
"filepath": "formal/CoreFormalism/ComplexProjectiveSpace.lean"
}
}
},
{
"method": "tools/call",
"params": {
"name": "check_proof",
"arguments": {
"target": "CoreFormalism.ComplexProjectiveSpace"
}
}
},
{
"method": "tools/call",
"params": {
"name": "list_tools",
"arguments": {}
}
}
]
for i, request in enumerate(requests):
t = Thread(target=worker, args=(i, request, results))
threads.append(t)
t.start()
time.sleep(0.05)
for t in threads:
t.join()
print("\nResults:")
while not results.empty():
r = results.get()
print(f" Agent {r['agent_id']}: {r['status']} ({r['elapsed']:.2f}s) - {r['message'][:80]}")
def main():
print("MCP Server Concurrency Test Suite")
print("=" * 50)
# Test 1: Concurrent read operations
test_concurrent_get_context()
# Test 2: Concurrent build operations (should serialize)
test_concurrent_check_proof()
# Test 3: Mixed operations
test_mixed_operations()
print("\n" + "=" * 50)
print("All tests completed!")
if __name__ == "__main__":
main()