Files
2026-07-13 13:39:12 +08:00

76 lines
2.7 KiB
TypeScript

/**
* Adaptive keepalive threshold — Unit Tests (PR5 of issue #3368)
*
* Run: node --import tsx/esm --test tests/unit/keepalive-threshold.test.ts
*/
import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
resolveKeepaliveThreshold,
SLOW_KEEPALIVE_PROVIDERS,
} from "../../open-sse/utils/keepaliveThreshold.ts";
describe("resolveKeepaliveThreshold", () => {
it("returns 2000ms default for undefined model", () => {
assert.equal(resolveKeepaliveThreshold(undefined), 2000);
});
it("returns 2000ms default for null model", () => {
assert.equal(resolveKeepaliveThreshold(null), 2000);
});
it("returns 2000ms default for empty string", () => {
assert.equal(resolveKeepaliveThreshold(""), 2000);
});
it("returns 2000ms default for model without prefix", () => {
assert.equal(resolveKeepaliveThreshold("gpt-4"), 2000);
});
it("returns 2000ms default for normal API-key provider", () => {
assert.equal(resolveKeepaliveThreshold("openai/gpt-4"), 2000);
assert.equal(resolveKeepaliveThreshold("anthropic/claude-sonnet-4"), 2000);
assert.equal(resolveKeepaliveThreshold("deepseek/deepseek-chat"), 2000);
});
it("returns 15000ms for anonymous fallback provider (pollinations)", () => {
assert.equal(resolveKeepaliveThreshold("pollinations/gpt-5"), 15000);
});
it("returns 15000ms for anonymous fallback provider alias (pol)", () => {
assert.equal(resolveKeepaliveThreshold("pol/gpt-5"), 15000);
});
it("returns 15000ms for anonymous fallback provider (opencode-zen)", () => {
assert.equal(resolveKeepaliveThreshold("opencode-zen/gpt-4"), 15000);
});
it("returns 15000ms for web-session provider (chatgpt-web)", () => {
assert.equal(resolveKeepaliveThreshold("chatgpt-web/gpt-5"), 15000);
});
it("returns 15000ms for web-session provider (grok-web)", () => {
assert.equal(resolveKeepaliveThreshold("grok-web/grok-4"), 15000);
});
it("returns 15000ms for web-session provider (claude-web)", () => {
assert.equal(resolveKeepaliveThreshold("claude-web/claude-sonnet-4"), 15000);
});
it("SLOW_KEEPALIVE_PROVIDERS set contains expected providers", () => {
assert.ok(SLOW_KEEPALIVE_PROVIDERS.has("pollinations"));
assert.ok(SLOW_KEEPALIVE_PROVIDERS.has("pol"));
assert.ok(SLOW_KEEPALIVE_PROVIDERS.has("opencode-zen"));
assert.ok(SLOW_KEEPALIVE_PROVIDERS.has("chatgpt-web"));
assert.ok(SLOW_KEEPALIVE_PROVIDERS.has("grok-web"));
assert.ok(SLOW_KEEPALIVE_PROVIDERS.has("claude-web"));
});
it("SLOW_KEEPALIVE_PROVIDERS does not contain normal providers", () => {
assert.ok(!SLOW_KEEPALIVE_PROVIDERS.has("openai"));
assert.ok(!SLOW_KEEPALIVE_PROVIDERS.has("anthropic"));
assert.ok(!SLOW_KEEPALIVE_PROVIDERS.has("deepseek"));
});
});