mirror of https://github.com/OpenVidu/openvidu.git
integration-tests: Add test for openvidu active entities fixer
parent
c2d7f01310
commit
a01b1e2a2f
|
@ -0,0 +1,97 @@
|
|||
import {
|
||||
joinParticipantToRoom,
|
||||
killProcess,
|
||||
sleep,
|
||||
startComposeContainer,
|
||||
startLocalDeployment,
|
||||
stopComposeContainer,
|
||||
stopLocalDeployment
|
||||
} from "./utils/helper";
|
||||
import { MongoService } from "./utils/mongodb";
|
||||
import { EntityType } from "./utils/types";
|
||||
|
||||
describe("OpenVidu active entities fixer", () => {
|
||||
const mongoService = MongoService.getInstance();
|
||||
|
||||
beforeEach(async () => {
|
||||
await startLocalDeployment();
|
||||
}, 60000); // 1 minute
|
||||
|
||||
afterEach(() => {
|
||||
stopLocalDeployment();
|
||||
}, 60000); // 1 minute
|
||||
|
||||
it("should fix fake active entities in MongoDB", async () => {
|
||||
console.log("Joining participant to room...");
|
||||
const roomName = "TestRoom";
|
||||
const participantIdentity = "TestParticipant1";
|
||||
const pid = 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;
|
||||
|
||||
stopComposeContainer("openvidu");
|
||||
killProcess(pid);
|
||||
await sleep(5);
|
||||
startComposeContainer("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
|
||||
});
|
Loading…
Reference in New Issue