Files
mcp_screen/scratch/verify_launcher_beep.py
T

85 lines
2.8 KiB
Python

#!/usr/bin/env python3
import sys
import os
import json
import time
import http.server
import threading
# Add PiZeroNoteKeeper to path so we can import kernel
sys.path.append("/Users/adolforeyna/Projects/PiZeroNoteKeeper")
from kernel.system import SystemContext
# Mock HTTP Server to capture the POST request
class MockMCPServer(http.server.BaseHTTPRequestHandler):
received_request = None
def do_POST(self):
if self.path == "/api/mcp":
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
MockMCPServer.received_request = json.loads(post_data.decode('utf-8'))
# Send success response
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({"jsonrpc": "2.0", "result": "OK", "id": "test"}).encode('utf-8'))
else:
self.send_response(404)
self.end_headers()
def log_message(self, format, *args):
# Suppress logging to keep output clean
pass
def run_test():
# Start mock server
server = http.server.HTTPServer(('127.0.0.1', 9999), MockMCPServer)
server_thread = threading.Thread(target=server.serve_forever, daemon=True)
server_thread.start()
print("Mock MCP server running on http://127.0.0.1:9999")
# Initialize SystemContext pointing to mock server
context = SystemContext(target_ip="127.0.0.1", target_port=8081, pin_target=True)
# Set the discovered/active mcp_port
context.mcp_port = 9999
print("Sending play_beep command...")
context.play_beep(frequency=1200, duration_ms=40, volume=30)
# Wait for background thread to execute the HTTP request
timeout = 3.0
start_time = time.time()
while MockMCPServer.received_request is None and (time.time() - start_time) < timeout:
time.sleep(0.1)
# Shutdown server
server.shutdown()
server.server_close()
# Assert and verify
req = MockMCPServer.received_request
if req is None:
print("FAIL: No request received by mock MCP server within timeout.")
sys.exit(1)
print("Received request payload:")
print(json.dumps(req, indent=2))
try:
assert req["jsonrpc"] == "2.0"
assert req["method"] == "tools/call"
assert req["params"]["name"] == "play_tone"
args = req["params"]["arguments"]
assert args["frequency"] == 1200
assert args["duration_ms"] == 40
assert args["volume"] == 30
print("\nSUCCESS: All request fields verified perfectly!")
except AssertionError as e:
print("\nFAIL: Request fields did not match expected values.", e)
sys.exit(1)
if __name__ == "__main__":
run_test()