Skip to content

Commit 2e10ffe

Browse files
committed
test(perf): bound google meet retry waits
1 parent 298cae6 commit 2e10ffe

3 files changed

Lines changed: 46 additions & 36 deletions

File tree

extensions/google-meet/index.test.ts

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2885,11 +2885,14 @@ describe("google-meet plugin", () => {
28852885
}) => Promise<void>)
28862886
| undefined;
28872887
const respond = vi.fn();
2888+
vi.useFakeTimers();
28882889

2889-
await handler?.({
2890+
const run = handler?.({
28902891
params: { url: "https://meet.google.com/abc-defg-hij" },
28912892
respond,
28922893
});
2894+
await vi.advanceTimersByTimeAsync(2_000);
2895+
await run;
28932896

28942897
expect(respond.mock.calls[0]?.[1]).toMatchObject({
28952898
spoken: false,
@@ -2905,6 +2908,7 @@ describe("google-meet plugin", () => {
29052908
});
29062909
expect(inspectCount).toBeGreaterThanOrEqual(2);
29072910
} finally {
2911+
vi.useRealTimers();
29082912
Object.defineProperty(process, "platform", { value: originalPlatform });
29092913
}
29102914
});
@@ -4831,6 +4835,7 @@ describe("google-meet plugin", () => {
48314835
});
48324836

48334837
it("stops paired-node realtime audio after repeated input pull failures", async () => {
4838+
vi.useFakeTimers();
48344839
const bridge = {
48354840
connect: vi.fn(async () => {}),
48364841
sendAudio: vi.fn(),
@@ -4860,38 +4865,42 @@ describe("google-meet plugin", () => {
48604865
},
48614866
};
48624867

4863-
const handle = await startNodeRealtimeAudioBridge({
4864-
config: resolveGoogleMeetConfig({
4865-
realtime: { provider: "openai", model: "gpt-realtime" },
4866-
}),
4867-
fullConfig: {} as never,
4868-
runtime: runtime as never,
4869-
meetingSessionId: "meet-1",
4870-
nodeId: "node-1",
4871-
bridgeId: "bridge-1",
4872-
logger: noopLogger,
4873-
providers: [provider],
4874-
});
4875-
4876-
await vi.waitFor(
4877-
() => {
4878-
expect(bridge.close).toHaveBeenCalled();
4879-
},
4880-
{ timeout: 3_000 },
4881-
);
4882-
expect(handle.getHealth()).toMatchObject({
4883-
bridgeClosed: true,
4884-
consecutiveInputErrors: 5,
4885-
lastInputError: "node invoke timeout",
4886-
});
4887-
expect(runtime.nodes.invoke).toHaveBeenCalledWith(
4888-
expect.objectContaining({
4868+
try {
4869+
const handle = await startNodeRealtimeAudioBridge({
4870+
config: resolveGoogleMeetConfig({
4871+
realtime: { provider: "openai", model: "gpt-realtime" },
4872+
}),
4873+
fullConfig: {} as never,
4874+
runtime: runtime as never,
4875+
meetingSessionId: "meet-1",
48894876
nodeId: "node-1",
4890-
command: "googlemeet.chrome",
4891-
params: { action: "stop", bridgeId: "bridge-1" },
4892-
timeoutMs: 5_000,
4893-
}),
4894-
);
4877+
bridgeId: "bridge-1",
4878+
logger: noopLogger,
4879+
providers: [provider],
4880+
});
4881+
4882+
await vi.waitFor(
4883+
() => {
4884+
expect(bridge.close).toHaveBeenCalled();
4885+
},
4886+
{ timeout: 3_000 },
4887+
);
4888+
expect(handle.getHealth()).toMatchObject({
4889+
bridgeClosed: true,
4890+
consecutiveInputErrors: 5,
4891+
lastInputError: "node invoke timeout",
4892+
});
4893+
expect(runtime.nodes.invoke).toHaveBeenCalledWith(
4894+
expect.objectContaining({
4895+
nodeId: "node-1",
4896+
command: "googlemeet.chrome",
4897+
params: { action: "stop", bridgeId: "bridge-1" },
4898+
timeoutMs: 5_000,
4899+
}),
4900+
);
4901+
} finally {
4902+
vi.useRealTimers();
4903+
}
48954904
});
48964905

48974906
it("exposes node-host list and stop-by-url bridge actions", async () => {

extensions/google-meet/src/runtime.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ export class GoogleMeetRuntime {
634634
);
635635
const deadline = Date.now() + waitMs;
636636
while (Date.now() < deadline) {
637-
await sleep(250);
637+
await sleep(Math.min(250, Math.max(0, deadline - Date.now())));
638638
result = await this.speak(session.id, instructions);
639639
if (result.spoken) {
640640
return true;

extensions/google-meet/src/transports/chrome.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -753,10 +753,11 @@ async function openMeetWithBrowserRequest(params: {
753753
};
754754
break;
755755
}
756-
if (Date.now() <= deadline) {
757-
await new Promise((resolve) => setTimeout(resolve, 750));
756+
const remainingWaitMs = deadline - Date.now();
757+
if (remainingWaitMs > 0) {
758+
await new Promise((resolve) => setTimeout(resolve, Math.min(750, remainingWaitMs)));
758759
}
759-
} while (Date.now() <= deadline);
760+
} while (Date.now() < deadline);
760761
return { launched: true, browser };
761762
}
762763

0 commit comments

Comments
 (0)