session-recovery.test.ts 1022 B

123456789101112131415161718192021222324252627
  1. import path from "node:path"
  2. import { describe, expect, test } from "bun:test"
  3. describe("mcp session recovery", () => {
  4. test("reinitializes and retries once after a session-bound POST returns 404", async () => {
  5. const child = Bun.spawn([process.execPath, path.join(import.meta.dir, "../fixture/mcp-session-recovery.ts")], {
  6. cwd: path.join(import.meta.dir, "../.."),
  7. stdout: "pipe",
  8. stderr: "pipe",
  9. })
  10. const [code, stdout, stderr] = await Promise.all([
  11. child.exited,
  12. Bun.readableStreamToText(child.stdout),
  13. Bun.readableStreamToText(child.stderr),
  14. ])
  15. expect(code, stderr).toBe(0)
  16. expect(JSON.parse(stdout)).toEqual([
  17. { method: "initialize", session: null },
  18. { method: "notifications/initialized", session: "expired" },
  19. { method: "ping", session: "expired" },
  20. { method: "initialize", session: null },
  21. { method: "notifications/initialized", session: "replacement" },
  22. { method: "ping", session: "replacement" },
  23. ])
  24. })
  25. })