mcp: refactor for testability and add comprehensive test suite

- Refactor mcp.Server and router to accept injected I/O streams.
- Implement McpHarness for high-fidelity MCP integration testing.
- Add unit tests for protocol, tools, and resources modules.
- Add integration tests covering initialization, tool/resource execution, and error handling.
- Improve error reporting for malformed JSON requests.
This commit is contained in:
Adrià Arrufat
2026-03-02 15:50:29 +09:00
parent 8a1795d56f
commit 64107f5957
8 changed files with 371 additions and 6 deletions

View File

@@ -322,3 +322,33 @@ fn performGoto(server: *Server, url: [:0]const u8, id: std.json.Value) !void {
_ = server.session.wait(5000);
}
const testing = @import("../testing.zig");
test "tool_list contains expected tools" {
try testing.expect(tool_list.len >= 6);
try testing.expectString("goto", tool_list[0].name);
}
test "parseParams - valid" {
var arena = std.heap.ArenaAllocator.init(testing.allocator);
defer arena.deinit();
const aa = arena.allocator();
const arguments = try std.json.parseFromSlice(std.json.Value, aa, "{\"url\": \"https://example.com\"}", .{});
const args = try parseParamsOptional(GotoParams, aa, arguments.value);
try testing.expect(args != null);
try testing.expectString("https://example.com", args.?.url);
}
test "parseParams - invalid" {
var arena = std.heap.ArenaAllocator.init(testing.allocator);
defer arena.deinit();
const aa = arena.allocator();
const arguments = try std.json.parseFromSlice(std.json.Value, aa, "{\"not_url\": \"foo\"}", .{});
const args = try parseParamsOptional(GotoParams, aa, arguments.value);
try testing.expect(args == null);
}