summaryrefslogtreecommitdiffhomepage
path: root/packages/mcp/src/manager.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/mcp/src/manager.test.ts')
-rw-r--r--packages/mcp/src/manager.test.ts25
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/mcp/src/manager.test.ts b/packages/mcp/src/manager.test.ts
index 7cc53b8..d6179b7 100644
--- a/packages/mcp/src/manager.test.ts
+++ b/packages/mcp/src/manager.test.ts
@@ -213,4 +213,29 @@ describe("McpManager", () => {
expect(manager.getClient("nonexistent")).toBeUndefined();
});
+
+ it("forwards the abort signal: a hanging initialize is interrupted", async () => {
+ // A connection whose initialize never resolves (a misbehaving /
+ // framing-incompatible server). Without a signal this hangs forever.
+ const hangingConn: Connection = {
+ send: () => new Promise(() => {}),
+ notify: () => {},
+ onNotification: () => {},
+ close: () => {},
+ pid: 300,
+ };
+ const manager = makeManager(() => {
+ return { connection: hangingConn, promise: Promise.resolve() };
+ });
+
+ const controller = new AbortController();
+ const connectPromise = manager.ensureConnected(testServer, "/tmp", controller.signal);
+
+ // Abort mid-connect — the signal must reach initialize() and break it.
+ controller.abort();
+
+ await expect(connectPromise).rejects.toThrow();
+ // The server is recorded as broken (not silently wedged).
+ expect(manager.status([testServer])[0].state).toBe("error");
+ });
});