openvidu/openvidu-test-integration/tests/openvidu-active-entities-fi...

96 lines
3.7 KiB
TypeScript
Raw Permalink Normal View History

import { killProcess, sleep } from "./utils/helper";
import { Livekit } from "./utils/livekit";
import { LocalDeployment } from "./utils/local-deployment";
import { MongoService } from "./utils/mongodb";
import { EntityType } from "./utils/types";
describe("OpenVidu active entities fixer", () => {
const mongoService = MongoService.getInstance();
beforeEach(async () => {
await LocalDeployment.start();
}, 60000); // 1 minute
afterEach(() => {
LocalDeployment.stop();
}, 60000); // 1 minute
afterAll(async () => {
await mongoService.disconnect();
});
it("should fix fake active entities in MongoDB", async () => {
console.log("Joining participant to room...");
const roomName = "TestRoom";
const participantIdentity = "TestParticipant1";
const pid = Livekit.joinParticipantToRoom(participantIdentity, roomName);
await sleep(5);
const roomStartedEvent = await mongoService.findStartEvent(EntityType.ROOM, roomName);
if (!roomStartedEvent) {
throw new Error("ROOM_CREATED event not found");
}
const participantActiveEvent = await mongoService.findStartEvent(EntityType.PARTICIPANT, participantIdentity);
if (!participantActiveEvent) {
throw new Error("PARTICIPANT_ACTIVE event not found");
}
const roomId = roomStartedEvent.room.sid;
const participantId = participantActiveEvent.participant_id;
LocalDeployment.stopContainer("openvidu");
killProcess(pid);
await sleep(5);
LocalDeployment.startContainer("openvidu");
// Check if there is a fake close event for room and participant in MongoDB
// and the active entities are removed
let roomEndedEvent;
let participantLeftEvent;
let isRoomActive: boolean;
let isParticipantActive: boolean;
do {
console.log("Waiting for fake close events in MongoDB...");
await sleep(10);
roomEndedEvent = await mongoService.findCloseEvent(EntityType.ROOM, roomId);
participantLeftEvent = await mongoService.findCloseEvent(EntityType.PARTICIPANT, participantId);
isRoomActive = await mongoService.isActiveEntity(roomId);
isParticipantActive = await mongoService.isActiveEntity(participantId);
} while (!roomEndedEvent || !participantLeftEvent || isRoomActive || isParticipantActive);
// Check properties of fake ROOM_ENDED event
expect(isRoomActive).toBeFalsy();
expect(roomEndedEvent).not.toBeNull();
expect(roomEndedEvent).toMatchObject({
room_id: roomId,
room: {
sid: roomId,
name: roomName,
creation_time: roomStartedEvent.room.creation_time
}
});
expect(roomEndedEvent!.timestamp.seconds).toBeGreaterThan(roomStartedEvent.room.creation_time);
expect(roomEndedEvent!.openvidu_expire_at).toBeDefined();
// Check properties of fake PARTICIPANT_LEFT event
expect(isParticipantActive).toBeFalsy();
expect(participantLeftEvent).not.toBeNull();
expect(participantLeftEvent).toMatchObject({
room_id: roomId,
room: {
sid: roomId
},
participant_id: participantId,
participant: {
sid: participantId,
identity: participantIdentity,
joined_at: participantActiveEvent.participant.joined_at
}
});
expect(participantLeftEvent!.timestamp.seconds).toBeGreaterThan(participantActiveEvent.participant.joined_at);
expect(participantLeftEvent!.openvidu_expire_at).toBeDefined();
}, 300000); // 5 minutes
});