Skip to content

Commit 60310e9

Browse files
HoberMinfelixweinberger
authored andcommitted
feat: Add error handling tests for InMemoryTransport
1 parent 6ae4a57 commit 60310e9

File tree

2 files changed

+99
-3
lines changed

2 files changed

+99
-3
lines changed

src/inMemory.test.ts

Lines changed: 96 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,43 @@ describe("InMemoryTransport", () => {
9696
});
9797

9898
test("should throw error when sending after close", async () => {
99-
await clientTransport.close();
99+
const [client, server] = InMemoryTransport.createLinkedPair();
100+
let clientError: Error | undefined;
101+
let serverError: Error | undefined;
102+
103+
client.onerror = (err) => {
104+
clientError = err;
105+
};
106+
107+
server.onerror = (err) => {
108+
serverError = err;
109+
};
110+
111+
await client.close();
112+
113+
// Attempt to send message from client
100114
await expect(
101-
clientTransport.send({ jsonrpc: "2.0", method: "test", id: 1 }),
115+
client.send({
116+
jsonrpc: "2.0",
117+
method: "test",
118+
id: 1,
119+
}),
102120
).rejects.toThrow("Not connected");
121+
122+
// Attempt to send message from server
123+
await expect(
124+
server.send({
125+
jsonrpc: "2.0",
126+
method: "test",
127+
id: 2,
128+
}),
129+
).rejects.toThrow("Not connected");
130+
131+
// Verify that both sides received errors
132+
expect(clientError).toBeDefined();
133+
expect(clientError?.message).toBe("Not connected");
134+
expect(serverError).toBeDefined();
135+
expect(serverError?.message).toBe("Not connected");
103136
});
104137

105138
test("should queue messages sent before start", async () => {
@@ -118,4 +151,65 @@ describe("InMemoryTransport", () => {
118151
await serverTransport.start();
119152
expect(receivedMessage).toEqual(message);
120153
});
154+
155+
describe("error handling", () => {
156+
test("should trigger onerror when sending without connection", async () => {
157+
const transport = new InMemoryTransport();
158+
let error: Error | undefined;
159+
160+
transport.onerror = (err) => {
161+
error = err;
162+
};
163+
164+
await expect(
165+
transport.send({
166+
jsonrpc: "2.0",
167+
method: "test",
168+
id: 1,
169+
}),
170+
).rejects.toThrow("Not connected");
171+
172+
expect(error).toBeDefined();
173+
expect(error?.message).toBe("Not connected");
174+
});
175+
176+
test("should trigger onerror when sending after close", async () => {
177+
const [client, server] = InMemoryTransport.createLinkedPair();
178+
let clientError: Error | undefined;
179+
let serverError: Error | undefined;
180+
181+
client.onerror = (err) => {
182+
clientError = err;
183+
};
184+
185+
server.onerror = (err) => {
186+
serverError = err;
187+
};
188+
189+
await client.close();
190+
191+
// Attempt to send message from client
192+
await expect(
193+
client.send({
194+
jsonrpc: "2.0",
195+
method: "test",
196+
id: 1,
197+
}),
198+
).rejects.toThrow("Not connected");
199+
200+
// Attempt to send message from server
201+
await expect(
202+
server.send({
203+
jsonrpc: "2.0",
204+
method: "test",
205+
id: 2,
206+
}),
207+
).rejects.toThrow("Not connected");
208+
209+
// Verify that both sides received errors
210+
expect(clientError?.message).toBe("Not connected");
211+
expect(serverError).toBeDefined();
212+
expect(serverError?.message).toBe("Not connected");
213+
});
214+
});
121215
});

src/inMemory.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ export class InMemoryTransport implements Transport {
5151
*/
5252
async send(message: JSONRPCMessage, options?: { relatedRequestId?: RequestId, authInfo?: AuthInfo }): Promise<void> {
5353
if (!this._otherTransport) {
54-
throw new Error("Not connected");
54+
const error = new Error("Not connected");
55+
this.onerror?.(error);
56+
throw error;
5557
}
5658

5759
if (this._otherTransport.onmessage) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy