





















@@ -1,12 +1,19 @@
1-import { beforeEach, describe, expect, it, vi } from "vitest";
1+import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
22import {
33__testing,
44registerSessionBindingAdapter,
55type SessionBindingAdapter,
66type SessionBindingRecord,
77} from "../../infra/outbound/session-binding-service.js";
88import type { ResolvedAgentRoute } from "../../routing/resolve-route.js";
9-import { resolveRuntimeConversationBindingRoute } from "./binding-routing.js";
9+import {
10+ensureConfiguredBindingRouteReady,
11+resolveRuntimeConversationBindingRoute,
12+} from "./binding-routing.js";
13+import {
14+registerStatefulBindingTargetDriver,
15+unregisterStatefulBindingTargetDriver,
16+} from "./stateful-target-drivers.js";
10171118function createRoute(): ResolvedAgentRoute {
1219return {
@@ -112,3 +119,35 @@ describe("runtime conversation binding route", () => {
112119expect(result.route).toBe(route);
113120});
114121});
122+123+describe("ensureConfiguredBindingRouteReady", () => {
124+afterEach(() => {
125+vi.useRealTimers();
126+unregisterStatefulBindingTargetDriver("slow");
127+});
128+129+it("returns a bounded failure when target readiness never settles", async () => {
130+vi.useFakeTimers();
131+registerStatefulBindingTargetDriver({
132+id: "slow",
133+ensureReady: async () => await new Promise<never>(() => {}),
134+ensureSession: async () => ({
135+ok: false,
136+sessionKey: "agent:slow:binding",
137+error: "not used",
138+}),
139+});
140+141+const resultPromise = ensureConfiguredBindingRouteReady({
142+cfg: {} as never,
143+bindingResolution: { statefulTarget: { driverId: "slow" } } as never,
144+});
145+146+await vi.advanceTimersByTimeAsync(30_000);
147+148+await expect(resultPromise).resolves.toEqual({
149+ok: false,
150+error: "Configured binding route ready check timed out",
151+});
152+});
153+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。