Add tests for issuing cancellation notifications
This commit is contained in:
parent
1451d0ea24
commit
6ec4c09325
2 changed files with 123 additions and 0 deletions
|
|
@ -436,3 +436,58 @@ test("should typecheck", () => {
|
|||
},
|
||||
});
|
||||
});
|
||||
|
||||
test("should handle client cancelling a request", async () => {
|
||||
const server = new Server(
|
||||
{
|
||||
name: "test server",
|
||||
version: "1.0",
|
||||
},
|
||||
{
|
||||
capabilities: {
|
||||
resources: {},
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
// Set up server to delay responding to listResources
|
||||
server.setRequestHandler(
|
||||
ListResourcesRequestSchema,
|
||||
async (request, extra) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
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),
|
||||
]);
|
||||
|
||||
// Set up abort controller
|
||||
const controller = new AbortController();
|
||||
|
||||
// Issue request but cancel it immediately
|
||||
const listResourcesPromise = client.listResources(undefined, {
|
||||
signal: controller.signal,
|
||||
});
|
||||
controller.abort("Cancelled by test");
|
||||
|
||||
// Request should be rejected
|
||||
await expect(listResourcesPromise).rejects.toBe("Cancelled by test");
|
||||
});
|
||||
|
|
|
|||
|
|
@ -407,3 +407,71 @@ test("should typecheck", () => {
|
|||
},
|
||||
);
|
||||
});
|
||||
|
||||
test("should handle server cancelling a request", async () => {
|
||||
const server = new Server(
|
||||
{
|
||||
name: "test server",
|
||||
version: "1.0",
|
||||
},
|
||||
{
|
||||
capabilities: {
|
||||
sampling: {},
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
const client = new Client(
|
||||
{
|
||||
name: "test client",
|
||||
version: "1.0",
|
||||
},
|
||||
{
|
||||
capabilities: {
|
||||
sampling: {},
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
// Set up client to delay responding to createMessage
|
||||
client.setRequestHandler(
|
||||
CreateMessageRequestSchema,
|
||||
async (_request, extra) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
return {
|
||||
model: "test",
|
||||
role: "assistant",
|
||||
content: {
|
||||
type: "text",
|
||||
text: "Test response",
|
||||
},
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
const [clientTransport, serverTransport] =
|
||||
InMemoryTransport.createLinkedPair();
|
||||
|
||||
await Promise.all([
|
||||
client.connect(clientTransport),
|
||||
server.connect(serverTransport),
|
||||
]);
|
||||
|
||||
// Set up abort controller
|
||||
const controller = new AbortController();
|
||||
|
||||
// Issue request but cancel it immediately
|
||||
const createMessagePromise = server.createMessage(
|
||||
{
|
||||
messages: [],
|
||||
maxTokens: 10,
|
||||
},
|
||||
{
|
||||
signal: controller.signal,
|
||||
},
|
||||
);
|
||||
controller.abort("Cancelled by test");
|
||||
|
||||
// Request should be rejected
|
||||
await expect(createMessagePromise).rejects.toBe("Cancelled by test");
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue