41 lines
1.7 KiB
TypeScript
41 lines
1.7 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
const { isClientDisconnectError } = await import("../../open-sse/utils/streamHandler.ts");
|
|
|
|
test("client disconnect: AbortError is a client disconnect, not a provider failure", () => {
|
|
const err = new Error("aborted");
|
|
err.name = "AbortError";
|
|
assert.equal(isClientDisconnectError(err), true);
|
|
});
|
|
|
|
test("client disconnect: ResponseAborted is a client disconnect", () => {
|
|
const err = new Error("The response was aborted");
|
|
err.name = "ResponseAborted";
|
|
assert.equal(isClientDisconnectError(err), true);
|
|
});
|
|
|
|
test("client disconnect: 'Controller is already closed' TypeError is a client disconnect", () => {
|
|
// Thrown when OmniRoute enqueues into a response stream the client already closed.
|
|
// name is "TypeError", so this must be matched by message, not name.
|
|
const err = new TypeError("Invalid state: Controller is already closed");
|
|
assert.equal(isClientDisconnectError(err), true);
|
|
});
|
|
|
|
test("client disconnect: a real provider 502/500 is NOT a client disconnect", () => {
|
|
const err = Object.assign(new Error("Upstream stream failed"), { statusCode: 502 });
|
|
assert.equal(isClientDisconnectError(err), false);
|
|
});
|
|
|
|
test("client disconnect: a rate-limit (429) error is NOT a client disconnect", () => {
|
|
const err = Object.assign(new Error("rate_limit_error"), { statusCode: 429 });
|
|
assert.equal(isClientDisconnectError(err), false);
|
|
});
|
|
|
|
test("client disconnect: null / string / plain object are NOT client disconnects", () => {
|
|
assert.equal(isClientDisconnectError(null), false);
|
|
assert.equal(isClientDisconnectError(undefined), false);
|
|
assert.equal(isClientDisconnectError("Controller is already closed"), false);
|
|
assert.equal(isClientDisconnectError({}), false);
|
|
});
|