test: update recording test for avoiding garbage recordings
This commit is contained in:
parent
7532b44043
commit
c51ea8e18c
@ -36,9 +36,9 @@ export interface TestContext {
|
|||||||
* @param withParticipant Whether to join a fake participant in the room.
|
* @param withParticipant Whether to join a fake participant in the room.
|
||||||
* @returns Room data including secrets and cookies.
|
* @returns Room data including secrets and cookies.
|
||||||
*/
|
*/
|
||||||
export const setupSingleRoom = async (withParticipant = false): Promise<RoomData> => {
|
export const setupSingleRoom = async (roomPrefix: string, withParticipant = false): Promise<RoomData> => {
|
||||||
const room = await createRoom({
|
const room = await createRoom({
|
||||||
roomIdPrefix: 'TEST_ROOM'
|
roomIdPrefix: roomPrefix
|
||||||
});
|
});
|
||||||
|
|
||||||
// Extract the room secrets and generate participant tokens, saved as cookies
|
// Extract the room secrets and generate participant tokens, saved as cookies
|
||||||
@ -70,7 +70,7 @@ export const setupMultiRoomTestContext = async (numRooms: number, withParticipan
|
|||||||
const rooms: RoomData[] = [];
|
const rooms: RoomData[] = [];
|
||||||
|
|
||||||
for (let i = 0; i < numRooms; i++) {
|
for (let i = 0; i < numRooms; i++) {
|
||||||
const roomData = await setupSingleRoom(withParticipants);
|
const roomData = await setupSingleRoom('TEST_ROOM', withParticipants);
|
||||||
rooms.push(roomData);
|
rooms.push(roomData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ export const setupSingleRoomWithRecording = async (
|
|||||||
stopRecordingCond = false,
|
stopRecordingCond = false,
|
||||||
stopDelay?: StringValue
|
stopDelay?: StringValue
|
||||||
): Promise<RoomData> => {
|
): Promise<RoomData> => {
|
||||||
const roomData = await setupSingleRoom(true);
|
const roomData = await setupSingleRoom('TEST_ROOM', true);
|
||||||
const response = await startRecording(roomData.room.roomId, roomData.moderatorCookie);
|
const response = await startRecording(roomData.room.roomId, roomData.moderatorCookie);
|
||||||
expectValidStartRecordingResponse(response, roomData.room.roomId);
|
expectValidStartRecordingResponse(response, roomData.room.roomId);
|
||||||
roomData.recordingId = response.body.recordingId;
|
roomData.recordingId = response.body.recordingId;
|
||||||
|
|||||||
@ -79,6 +79,7 @@ describe('Recording API Race Conditions Tests', () => {
|
|||||||
expect(startRoomCompositeSpy).toHaveBeenCalled();
|
expect(startRoomCompositeSpy).toHaveBeenCalled();
|
||||||
console.log('Recording start response:', result.body);
|
console.log('Recording start response:', result.body);
|
||||||
expect(result.status).toBe(500); // Service Unavailable due to failure
|
expect(result.status).toBe(500); // Service Unavailable due to failure
|
||||||
|
expect(result.body.error).toContain('Internal Server Error');
|
||||||
} finally {
|
} finally {
|
||||||
// Cleanup
|
// Cleanup
|
||||||
startRoomCompositeSpy.mockRestore();
|
startRoomCompositeSpy.mockRestore();
|
||||||
@ -95,13 +96,21 @@ describe('Recording API Race Conditions Tests', () => {
|
|||||||
context = await setupMultiRoomTestContext(1, true);
|
context = await setupMultiRoomTestContext(1, true);
|
||||||
const roomData = context.getRoomByIndex(0)!;
|
const roomData = context.getRoomByIndex(0)!;
|
||||||
|
|
||||||
|
// Track active mock promises to ensure we can handle timeouts correctly
|
||||||
|
const activeMockPromises: Promise<any>[] = [];
|
||||||
|
|
||||||
// Mock the startRoomComposite method to simulate a delay
|
// Mock the startRoomComposite method to simulate a delay
|
||||||
// const originalStartRoomComposite = recordingService['livekitService'].startRoomComposite;
|
// const originalStartRoomComposite = recordingService['livekitService'].startRoomComposite;
|
||||||
const startRoomCompositeSpy = jest
|
const startRoomCompositeSpy = jest
|
||||||
.spyOn(recordingService['livekitService'], 'startRoomComposite')
|
.spyOn(recordingService['livekitService'], 'startRoomComposite')
|
||||||
.mockImplementation(async (...args) => {
|
.mockImplementation(async (...args) => {
|
||||||
await sleep('6s'); // Longer than 3s timeout
|
const mockPromise = (async () => {
|
||||||
throw new Error('Request failed with status 503: Service Unavailable');
|
await sleep('4s'); // Longer than 1s timeout
|
||||||
|
throw new Error('Request failed with status 503: Service Unavailable');
|
||||||
|
})();
|
||||||
|
|
||||||
|
activeMockPromises.push(mockPromise);
|
||||||
|
return mockPromise;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Mock the handleRecordingLockTimeout method to prevent actual timeout handling
|
// Mock the handleRecordingLockTimeout method to prevent actual timeout handling
|
||||||
@ -121,13 +130,14 @@ describe('Recording API Race Conditions Tests', () => {
|
|||||||
roomData.room.roomId
|
roomData.room.roomId
|
||||||
);
|
);
|
||||||
expect(releaseLockSpy).toHaveBeenCalled();
|
expect(releaseLockSpy).toHaveBeenCalled();
|
||||||
expect(startRoomCompositeSpy).toHaveBeenCalled();
|
expect(startRoomCompositeSpy).toHaveBeenCalledTimes(1);
|
||||||
|
|
||||||
console.log('Recording start response:', result.body);
|
console.log('Recording start response:', result.body);
|
||||||
expect(result.body.message).toContain('timed out while starting');
|
expect(result.body.message).toContain('timed out while starting');
|
||||||
expect(result.status).toBe(503); // Service Unavailable due to timeout
|
expect(result.status).toBe(503); // Service Unavailable due to timeout
|
||||||
|
await Promise.allSettled(activeMockPromises);
|
||||||
} finally {
|
} finally {
|
||||||
// Cleanup
|
// Cleanup after mock finishes
|
||||||
startRoomCompositeSpy.mockRestore();
|
startRoomCompositeSpy.mockRestore();
|
||||||
handleTimeoutSpy.mockRestore();
|
handleTimeoutSpy.mockRestore();
|
||||||
releaseLockSpy.mockRestore();
|
releaseLockSpy.mockRestore();
|
||||||
@ -159,7 +169,7 @@ describe('Recording API Race Conditions Tests', () => {
|
|||||||
if (callCount === 1) {
|
if (callCount === 1) {
|
||||||
// First call (room1) - timeout
|
// First call (room1) - timeout
|
||||||
await sleep('5s');
|
await sleep('5s');
|
||||||
return originalStartRoomComposite.apply(recordingService['livekitService'], args);
|
throw new Error('Request failed with status 503: Service Unavailable');
|
||||||
} else {
|
} else {
|
||||||
// Subsequent calls - work normally
|
// Subsequent calls - work normally
|
||||||
return originalStartRoomComposite.apply(recordingService['livekitService'], args);
|
return originalStartRoomComposite.apply(recordingService['livekitService'], args);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user