2021-11-03 00:45:52 +08:00
require ( 'dotenv' ) . config ( ) ;
const sha1 = require ( 'sha1' ) ;
const axios = require ( 'axios' ) ;
2023-02-14 21:59:46 +08:00
const { test , expect } = require ( '@playwright/test' ) ;
2022-09-06 11:45:53 +08:00
const xml2js = require ( 'xml2js' ) ;
2023-06-09 01:27:18 +08:00
const { runScript } = require ( './util' ) ;
2023-07-11 03:29:30 +08:00
const { env } = require ( 'node:process' ) ;
2022-09-06 11:45:53 +08:00
const parameters = require ( './parameters' ) ;
2021-11-03 00:45:52 +08:00
function getRandomInt ( min , max ) {
min = Math . ceil ( min ) ;
max = Math . floor ( max ) ;
return Math . floor ( Math . random ( ) * ( max - min ) ) + min ;
}
2022-10-10 03:10:05 +08:00
function apiCallUrl ( name , callParams ) {
2022-09-06 11:45:53 +08:00
const query = new URLSearchParams ( callParams ) . toString ( ) ;
2023-02-14 21:59:46 +08:00
const apiCall = ` ${ name } ${ query } ${ parameters . secret } ` ;
const checksum = sha1 ( apiCall ) ;
2022-09-06 11:45:53 +08:00
const url = ` ${ parameters . server } / ${ name } ? ${ query } &checksum= ${ checksum } ` ;
2022-10-10 03:10:05 +08:00
return url ;
}
function apiCall ( name , callParams ) {
const url = apiCallUrl ( name , callParams ) ;
2022-12-15 02:51:26 +08:00
return axios . get ( url , { adapter : 'http' } ) . then ( response => xml2js . parseStringPromise ( response . data ) ) ;
2022-09-06 11:45:53 +08:00
}
2023-07-11 03:29:30 +08:00
function createMeetingUrl ( params , createParameter , customMeetingId ) {
2023-02-14 21:59:46 +08:00
const meetingID = ( customMeetingId ) ? customMeetingId : ` random- ${ getRandomInt ( 1000000 , 10000000 ) . toString ( ) } ` ;
2021-11-03 00:45:52 +08:00
const mp = params . moderatorPW ;
const ap = params . attendeePW ;
2023-02-14 21:59:46 +08:00
const baseQuery = ` name= ${ meetingID } &meetingID= ${ meetingID } &attendeePW= ${ ap } &moderatorPW= ${ mp } `
2021-12-15 01:10:44 +08:00
+ ` &allowStartStopRecording=true&autoStartRecording=false&welcome= ${ params . welcome } ` ;
2023-07-11 03:29:30 +08:00
const query = createParameter !== undefined ? ` ${ baseQuery } & ${ createParameter } ` : baseQuery ;
2023-02-14 21:59:46 +08:00
const apiCall = ` create ${ query } ${ params . secret } ` ;
const checksum = sha1 ( apiCall ) ;
2021-11-03 00:45:52 +08:00
const url = ` ${ params . server } /create? ${ query } &checksum= ${ checksum } ` ;
2022-10-10 03:10:05 +08:00
return url ;
}
2023-07-11 03:29:30 +08:00
function createMeetingPromise ( params , createParameter , customMeetingId ) {
const url = createMeetingUrl ( params , createParameter , customMeetingId ) ;
2022-12-15 02:51:26 +08:00
return axios . get ( url , { adapter : 'http' } ) ;
2022-10-10 03:10:05 +08:00
}
2023-07-11 03:29:30 +08:00
async function createMeeting ( params , createParameter , page ) {
const promise = createMeetingPromise ( params , createParameter ) ;
2022-11-08 05:59:16 +08:00
const response = await promise ;
2022-11-08 07:22:14 +08:00
expect ( response . status ) . toEqual ( 200 ) ;
2023-02-14 21:59:46 +08:00
const xmlResponse = await xml2js . parseStringPromise ( response . data ) ;
2023-07-11 03:29:30 +08:00
if ( env . CONSOLE !== undefined ) {
const CONSOLE _strings = env . CONSOLE . split ( ',' ) . map ( opt => opt . trim ( ) . toLowerCase ( ) ) ;
const CONSOLE _options = {
colorize : CONSOLE _strings . includes ( 'color' ) || CONSOLE _strings . includes ( 'colour' ) ,
drop _references : CONSOLE _strings . includes ( 'norefs' ) ,
drop _timestamps : CONSOLE _strings . includes ( 'nots' ) ,
line _label : CONSOLE _strings . includes ( 'label' ) ? this . username + " " : undefined ,
noClientLogger : CONSOLE _strings . includes ( 'nocl' ) || CONSOLE _strings . includes ( 'noclientlogger' ) ,
} ;
page . on ( 'console' , async ( msg ) => console . log ( await console _format ( msg , CONSOLE _options ) ) ) ;
}
2023-02-14 21:59:46 +08:00
return xmlResponse . response . meetingID [ 0 ] ;
2021-11-03 00:45:52 +08:00
}
2023-07-11 03:29:30 +08:00
function getJoinURL ( meetingID , params , moderator , joinParameter ) {
2021-11-03 00:45:52 +08:00
const pw = moderator ? params . moderatorPW : params . attendeePW ;
2023-02-14 21:59:46 +08:00
const baseQuery = ` fullName= ${ params . fullName } &meetingID= ${ meetingID } &password= ${ pw } ` ;
2023-07-11 03:29:30 +08:00
const query = joinParameter !== undefined ? ` ${ baseQuery } & ${ joinParameter } ` : baseQuery ;
2023-02-14 21:59:46 +08:00
const apiCall = ` join ${ query } ${ params . secret } ` ;
const checksum = sha1 ( apiCall ) ;
2021-11-03 00:45:52 +08:00
return ` ${ params . server } /join? ${ query } &checksum= ${ checksum } ` ;
}
2023-06-09 01:27:18 +08:00
async function checkRootPermission ( ) {
const checkSudo = await runScript ( 'timeout -k 1 1 sudo id' , {
handleOutput : ( output ) => output ? true : false
} )
await expect ( checkSudo , 'Sudo failed: need to run this test with root permission (can be fixed by running "sudo -v" and entering the password)' ) . toBeTruthy ( ) ;
}
2022-12-01 21:43:36 +08:00
function linkIssue ( issueNumber ) {
test . info ( ) . annotations . push ( {
type : 'Issue/PR' ,
description : ` https://github.com/bigbluebutton/bigbluebutton/issues/ ${ issueNumber } ` ,
} ) ;
}
2021-11-27 04:01:41 +08:00
function sleep ( time ) {
return new Promise ( ( resolve ) => {
setTimeout ( resolve , time ) ;
} ) ;
}
2021-11-03 00:45:52 +08:00
exports . getRandomInt = getRandomInt ;
2022-10-10 03:10:05 +08:00
exports . apiCallUrl = apiCallUrl ;
2022-09-06 11:45:53 +08:00
exports . apiCall = apiCall ;
2022-10-10 03:10:05 +08:00
exports . createMeetingUrl = createMeetingUrl ;
exports . createMeetingPromise = createMeetingPromise ;
2021-11-03 00:45:52 +08:00
exports . createMeeting = createMeeting ;
exports . getJoinURL = getJoinURL ;
2023-06-09 01:27:18 +08:00
exports . checkRootPermission = checkRootPermission ;
2022-12-01 21:43:36 +08:00
exports . linkIssue = linkIssue ;
2021-11-27 04:01:41 +08:00
exports . sleep = sleep ;