mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 10:40:44 +00:00
test: require voice-call async gates
This commit is contained in:
@@ -40,12 +40,15 @@ const createDeferred = (): {
|
||||
resolve: () => void;
|
||||
reject: (error: Error) => void;
|
||||
} => {
|
||||
let resolve!: () => void;
|
||||
let reject!: (error: Error) => void;
|
||||
let resolve: (() => void) | undefined;
|
||||
let reject: ((error: Error) => void) | undefined;
|
||||
const promise = new Promise<void>((resolvePromise, rejectPromise) => {
|
||||
resolve = resolvePromise;
|
||||
reject = rejectPromise;
|
||||
});
|
||||
if (!resolve || !reject) {
|
||||
throw new Error("Expected deferred callbacks to be initialized");
|
||||
}
|
||||
return { promise, resolve, reject };
|
||||
};
|
||||
|
||||
@@ -80,10 +83,13 @@ describe("MediaStreamHandler TTS queue", () => {
|
||||
const started: number[] = [];
|
||||
const finished: number[] = [];
|
||||
|
||||
let resolveFirst!: () => void;
|
||||
let resolveFirst: (() => void) | undefined;
|
||||
const firstGate = new Promise<void>((resolve) => {
|
||||
resolveFirst = resolve;
|
||||
});
|
||||
if (!resolveFirst) {
|
||||
throw new Error("Expected first TTS gate resolver to be initialized");
|
||||
}
|
||||
|
||||
const first = handler.queueTts("stream-1", async () => {
|
||||
started.push(1);
|
||||
|
||||
@@ -1081,14 +1081,19 @@ describe("VoiceCallWebhookServer pre-auth webhook guards", () => {
|
||||
const server = new VoiceCallWebhookServer(config, manager, twilioProvider);
|
||||
|
||||
let enteredReads = 0;
|
||||
let releaseReads!: () => void;
|
||||
let unblockReadBodies!: () => void;
|
||||
let releaseReads: (() => void) | undefined;
|
||||
let unblockReadBodies: (() => void) | undefined;
|
||||
const enteredEightReads = new Promise<void>((resolve) => {
|
||||
releaseReads = resolve;
|
||||
});
|
||||
const unblockReads = new Promise<void>((resolve) => {
|
||||
unblockReadBodies = resolve;
|
||||
});
|
||||
if (!releaseReads || !unblockReadBodies) {
|
||||
throw new Error("Expected webhook read gates to be initialized");
|
||||
}
|
||||
const releaseEnteredReads = releaseReads;
|
||||
const unblockStartedReads = unblockReadBodies;
|
||||
const readBodySpy = vi.spyOn(
|
||||
server as unknown as {
|
||||
readBody: (req: unknown, maxBytes: number, timeoutMs?: number) => Promise<string>;
|
||||
@@ -1098,7 +1103,7 @@ describe("VoiceCallWebhookServer pre-auth webhook guards", () => {
|
||||
readBodySpy.mockImplementation(async () => {
|
||||
enteredReads += 1;
|
||||
if (enteredReads === 8) {
|
||||
releaseReads();
|
||||
releaseEnteredReads();
|
||||
}
|
||||
if (enteredReads <= 8) {
|
||||
await unblockReads;
|
||||
@@ -1118,12 +1123,12 @@ describe("VoiceCallWebhookServer pre-auth webhook guards", () => {
|
||||
expect(rejected.status).toBe(429);
|
||||
expect(await rejected.text()).toBe("Too Many Requests");
|
||||
|
||||
unblockReadBodies();
|
||||
unblockStartedReads();
|
||||
|
||||
const settled = await Promise.all(inFlightRequests);
|
||||
expect(settled.map((response) => response.status)).toEqual(Array(8).fill(200));
|
||||
} finally {
|
||||
unblockReadBodies();
|
||||
unblockStartedReads();
|
||||
readBodySpy.mockRestore();
|
||||
await server.stop();
|
||||
}
|
||||
@@ -1148,14 +1153,19 @@ describe("VoiceCallWebhookServer pre-auth webhook guards", () => {
|
||||
).runWebhookPipeline.bind(server);
|
||||
|
||||
let enteredReads = 0;
|
||||
let releaseReads!: () => void;
|
||||
let unblockReadBodies!: () => void;
|
||||
let releaseReads: (() => void) | undefined;
|
||||
let unblockReadBodies: (() => void) | undefined;
|
||||
const enteredEightReads = new Promise<void>((resolve) => {
|
||||
releaseReads = resolve;
|
||||
});
|
||||
const unblockReads = new Promise<void>((resolve) => {
|
||||
unblockReadBodies = resolve;
|
||||
});
|
||||
if (!releaseReads || !unblockReadBodies) {
|
||||
throw new Error("Expected webhook read gates to be initialized");
|
||||
}
|
||||
const releaseEnteredReads = releaseReads;
|
||||
const unblockStartedReads = unblockReadBodies;
|
||||
const readBodySpy = vi.spyOn(
|
||||
server as unknown as {
|
||||
readBody: (req: unknown, maxBytes: number, timeoutMs?: number) => Promise<string>;
|
||||
@@ -1165,7 +1175,7 @@ describe("VoiceCallWebhookServer pre-auth webhook guards", () => {
|
||||
readBodySpy.mockImplementation(async () => {
|
||||
enteredReads += 1;
|
||||
if (enteredReads === 8) {
|
||||
releaseReads();
|
||||
releaseEnteredReads();
|
||||
}
|
||||
await unblockReads;
|
||||
return "CallSid=CA123&SpeechResult=hello";
|
||||
@@ -1193,12 +1203,12 @@ describe("VoiceCallWebhookServer pre-auth webhook guards", () => {
|
||||
expect(rejected.body).toBe("Too Many Requests");
|
||||
expect(readBodySpy).toHaveBeenCalledTimes(8);
|
||||
|
||||
unblockReadBodies();
|
||||
unblockStartedReads();
|
||||
|
||||
const settled = await Promise.all(inFlightRequests);
|
||||
expect(settled.map((response) => response.statusCode)).toEqual(Array(8).fill(200));
|
||||
} finally {
|
||||
unblockReadBodies();
|
||||
unblockStartedReads();
|
||||
readBodySpy.mockRestore();
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user