bigbluebutton-Github/bigbluebutton-tests/puppeteer/stress/stress.js

111 lines
4.2 KiB
JavaScript

const Page = require('../core/page');
const e = require('../core/elements');
const c = require('../core/constants');
const util = require('./util');
class Stress {
constructor() {
this.modPage = new Page();
this.userPages = [];
}
async moderatorAsPresenter(testName) {
try {
const maxFailRate = c.JOIN_AS_MODERATOR_TEST_ROUNDS * c.MAX_JOIN_AS_MODERATOR_FAIL_RATE;
let failureCount = 0;
for (let i = 1; i <= c.JOIN_AS_MODERATOR_TEST_ROUNDS; i++) {
await this.modPage.init(true, true, testName, `Moderator-${i}`);
await this.modPage.waitForSelector(e.userAvatar);
const hasPresenterClass = await this.modPage.page.evaluate(util.checkIncludeClass, e.userAvatar, e.presenterClassName);
await this.modPage.waitAndClick(e.actions);
const canStartPoll = await this.modPage.hasElement(e.polling);
if (!hasPresenterClass || !canStartPoll) {
failureCount++;
await this.modPage.screenshot(testName, `loop-${i}-failure-${testName}`);
}
await this.modPage.close();
await this.modPage.logger(`Loop ${i} of ${c.JOIN_AS_MODERATOR_TEST_ROUNDS} completed`);
if (failureCount > maxFailRate) return false;
}
return true;
} catch (err) {
await this.modPage.logger(err);
return false;
}
}
async breakoutRoomInvitation(testName) {
try {
await this.modPage.init(true, true, testName, 'Moderator');
for (let i = 1; i <= c.BREAKOUT_ROOM_INVITATION_TEST_ROUNDS; i++) {
const userName = `User-${i}`;
const userPage = new Page();
await userPage.init(false, true, testName, userName, this.modPage.meetingId);
await userPage.logger(`${userName} joined`);
this.userPages.push(userPage);
}
// Create breakout rooms with the allow choice option enabled
await this.modPage.bringToFront();
await this.modPage.waitAndClick(e.manageUsers);
await this.modPage.waitAndClick(e.createBreakoutRooms);
await this.modPage.waitAndClick(e.allowChoiceRoom);
await this.modPage.screenshot(testName, '01-modPage-before-create-breakout-rooms-allowing-choice');
await this.modPage.waitAndClick(e.modalConfirmButton);
for (const page of this.userPages) {
await page.bringToFront();
const firstCheck = await page.hasElement(e.modalConfirmButton, c.ELEMENT_WAIT_LONGER_TIME);
const secondCheck = await page.wasRemoved(e.labelGeneratingURL, c.ELEMENT_WAIT_LONGER_TIME);
if (!firstCheck || !secondCheck) {
await page.screenshot(testName, `${page.effectiveParams.fullName}-breakout-modal-failed`);
return false;
}
await page.screenshot(testName, `${page.effectiveParams.fullName}-breakout-modal-allowing-choice-success`);
}
// End breakout rooms
await this.modPage.bringToFront();
await this.modPage.waitAndClick(e.breakoutRoomsItem);
await this.modPage.waitAndClick(e.endBreakoutRoomsButton);
await this.modPage.closeAudioModal();
// Create breakout rooms with the allow choice option NOT enabled (randomly assign)
await this.modPage.waitAndClick(e.manageUsers);
await this.modPage.waitAndClick(e.createBreakoutRooms);
await this.modPage.waitAndClick(e.randomlyAssign);
await this.modPage.screenshot(testName, '02-modPage-before-create-breakout-rooms-not-allowing-choice');
await this.modPage.waitAndClick(e.modalConfirmButton);
for (const page of this.userPages) {
await page.bringToFront();
const check = await page.hasElement(e.modalConfirmButton);
if (!check) {
await page.screenshot(testName, `${page.effectiveParams.fullName}-breakout-modal-not-allowing-choose-failed`);
return false;
}
await page.screenshot(testName, `${page.effectiveParams.fullName}-breakout-modal-not-allowing-choose-success`);
}
return true;
} catch (err) {
await this.modPage.logger(err);
return false;
}
}
async closeUsersPages() {
for (const page of this.userPages) {
try {
await page.close();
} catch (err) {
await this.modPage.logger(err);
}
}
}
}
module.exports = exports = Stress;