a18c8c630c
* surface gateway timeout for tailscale * talescale fix #2 - attempt 1 * luke findings fix#1 * add narrow log for clientId * prod safe proxy log * fix log visibility * LAN connection & subagent SOUL|IDENTITY fixes * Initialize missing files for subagent SOUL|IDENTITY * surface missing files in UI * capturing agent - runtime,identity,session * plugin-install fix * fix: recover agent workspace for marketplace installs * fix: recover agent workspace and identity name from file provenance * fix: tolerate webchat session patch blocks during permission updates
70 lines
2.3 KiB
TypeScript
70 lines
2.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { resolveGatewayAutoRetryDelayMs } from "@/lib/gateway/GatewayClient";
|
|
|
|
describe("resolveGatewayAutoRetryDelayMs", () => {
|
|
it("does not retry when upstream gateway url is missing on Studio host", () => {
|
|
const delay = resolveGatewayAutoRetryDelayMs({
|
|
status: "disconnected",
|
|
didAutoConnect: true,
|
|
hasConnectedOnce: true,
|
|
wasManualDisconnect: false,
|
|
gatewayUrl: "wss://remote.example",
|
|
errorMessage: "Gateway error (studio.gateway_url_missing): Upstream gateway URL is missing.",
|
|
connectErrorCode: "studio.gateway_url_missing",
|
|
attempt: 0,
|
|
});
|
|
|
|
expect(delay).toBeNull();
|
|
});
|
|
|
|
it("does not retry when the upstream websocket upgrade fails", () => {
|
|
const delay = resolveGatewayAutoRetryDelayMs({
|
|
status: "disconnected",
|
|
didAutoConnect: true,
|
|
hasConnectedOnce: true,
|
|
wasManualDisconnect: false,
|
|
gatewayUrl: "wss://remote.example",
|
|
errorMessage:
|
|
"Gateway error (studio.upstream_error): Failed to connect to upstream gateway WebSocket.",
|
|
connectErrorCode: "studio.upstream_error",
|
|
attempt: 0,
|
|
});
|
|
|
|
expect(delay).toBeNull();
|
|
});
|
|
|
|
it("does not retry when the upstream websocket handshake times out", () => {
|
|
const delay = resolveGatewayAutoRetryDelayMs({
|
|
status: "disconnected",
|
|
didAutoConnect: true,
|
|
hasConnectedOnce: true,
|
|
wasManualDisconnect: false,
|
|
gatewayUrl: "wss://remote.example",
|
|
errorMessage:
|
|
"Gateway error (studio.upstream_timeout): Timed out connecting Studio to the upstream gateway WebSocket.",
|
|
connectErrorCode: "studio.upstream_timeout",
|
|
attempt: 0,
|
|
});
|
|
|
|
expect(delay).toBeNull();
|
|
});
|
|
|
|
it("does not retry when the upstream gateway explicitly rejects pairing", () => {
|
|
const delay = resolveGatewayAutoRetryDelayMs({
|
|
status: "disconnected",
|
|
didAutoConnect: true,
|
|
hasConnectedOnce: true,
|
|
wasManualDisconnect: false,
|
|
gatewayUrl: "wss://remote.example",
|
|
errorMessage:
|
|
"Gateway error (studio.upstream_rejected): Upstream gateway rejected connect (1008): pairing required.",
|
|
connectErrorCode: "studio.upstream_rejected",
|
|
attempt: 0,
|
|
});
|
|
|
|
expect(delay).toBeNull();
|
|
});
|
|
});
|
|
|