Implement notetaking app, ST7796 display with touch support, audio beep navigation, and video streaming
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user