diff --git a/havre/test/http.test.js b/havre/test/http.test.js new file mode 100644 index 0000000..1100609 --- /dev/null +++ b/havre/test/http.test.js @@ -0,0 +1,22 @@ +import { test } from "node:test"; +import assert from "node:assert/strict"; +import { Client } from "@modelcontextprotocol/sdk/client/index.js"; +import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; +import { createHttpServer } from "../src/http.js"; + +test("health check and MCP over streamable HTTP", async () => { + const http = createHttpServer().listen(0); + await new Promise((r) => http.once("listening", r)); + const base = `http://127.0.0.1:${http.address().port}`; + const client = new Client({ name: "test", version: "0.0.0" }); + try { + assert.equal((await fetch(`${base}/health`)).status, 200); + assert.equal((await fetch(`${base}/nope`)).status, 404); + await client.connect(new StreamableHTTPClientTransport(new URL(`${base}/mcp`))); + assert.equal(client.getServerVersion().name, "havre"); + assert.equal((await client.callTool({ name: "havre_ping", arguments: { message: "hi" } })).content[0].text, "hi"); + } finally { + await client.close(); + http.close(); + } +});