Tests for request timeout
This commit is contained in:
parent
35396f4a8d
commit
437a870029
1 changed files with 126 additions and 0 deletions
|
|
@ -14,6 +14,7 @@ import {
|
|||
ListToolsRequestSchema,
|
||||
CreateMessageRequestSchema,
|
||||
ListRootsRequestSchema,
|
||||
ErrorCode,
|
||||
} from "../types.js";
|
||||
import { Transport } from "../shared/transport.js";
|
||||
import { Server } from "../server/index.js";
|
||||
|
|
@ -491,3 +492,58 @@ test("should handle client cancelling a request", async () => {
|
|||
// Request should be rejected
|
||||
await expect(listResourcesPromise).rejects.toBe("Cancelled by test");
|
||||
});
|
||||
|
||||
test("should handle request timeout", async () => {
|
||||
const server = new Server(
|
||||
{
|
||||
name: "test server",
|
||||
version: "1.0",
|
||||
},
|
||||
{
|
||||
capabilities: {
|
||||
resources: {},
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
// Set up server with a delayed response
|
||||
server.setRequestHandler(
|
||||
ListResourcesRequestSchema,
|
||||
async (_request, extra) => {
|
||||
const timer = new Promise((resolve) => {
|
||||
const timeout = setTimeout(resolve, 100);
|
||||
extra.signal.addEventListener("abort", () => clearTimeout(timeout));
|
||||
});
|
||||
|
||||
await timer;
|
||||
return {
|
||||
resources: [],
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
const [clientTransport, serverTransport] =
|
||||
InMemoryTransport.createLinkedPair();
|
||||
|
||||
const client = new Client(
|
||||
{
|
||||
name: "test client",
|
||||
version: "1.0",
|
||||
},
|
||||
{
|
||||
capabilities: {},
|
||||
},
|
||||
);
|
||||
|
||||
await Promise.all([
|
||||
client.connect(clientTransport),
|
||||
server.connect(serverTransport),
|
||||
]);
|
||||
|
||||
// Request with 0 msec timeout should fail immediately
|
||||
await expect(
|
||||
client.listResources(undefined, { timeout: 0 }),
|
||||
).rejects.toMatchObject({
|
||||
code: ErrorCode.RequestTimeout,
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue