diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx index 1bf1ffe01d536408daaabb37bc2016ebea92f90d..4ee1dabca179bd8fb0d24098b9d0316a6c828686 100755 --- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx @@ -159,7 +159,7 @@ class VideoListItem extends Component { > { !videoIsReady - && <div className={styles.connecting} /> + && <div data-test="webcamConnecting" className={styles.connecting} /> } <div className={styles.videoContainer} diff --git a/bigbluebutton-html5/tests/puppeteer/webcam.test.js b/bigbluebutton-html5/tests/puppeteer/webcam.test.js index 4aaa37f242d7e828a444eeed6dcb7b34e985a3f3..a7fdf455720ea4ff4997eaeb548623e82745dff9 100644 --- a/bigbluebutton-html5/tests/puppeteer/webcam.test.js +++ b/bigbluebutton-html5/tests/puppeteer/webcam.test.js @@ -1,13 +1,13 @@ const Share = require('./webcam/share'); const Check = require('./webcam/check'); -const LoadingTime = require('./webcam/loadtime'); +const Page = require('./core/page'); describe('Webcam', () => { test('Shares webcam', async () => { const test = new Share(); let response; try { - await test.init(); + await test.init(Page.getArgsWithVideo()); response = await test.test(); } catch (e) { console.log(e); @@ -17,25 +17,11 @@ describe('Webcam', () => { expect(response).toBe(true); }); - test('Check Webcam loading time', async () => { - const test = new LoadingTime(); - let response; - try { - await test.init(); - response = await test.test(); - } catch (e) { - console.log(e); - } finally { - await test.close(); - } - expect(response).toBeLessThan(parseInt(process.env.CAMERA_SHARE_FAILED_WAIT_TIME)); - }); - test('Checks content of webcam', async () => { const test = new Check(); let response; try { - await test.init(); + await test.init(Page.getArgsWithVideo()); response = await test.test(); } catch (e) { console.log(e); diff --git a/bigbluebutton-html5/tests/puppeteer/webcam/check.js b/bigbluebutton-html5/tests/puppeteer/webcam/check.js index 61846e1cc7f0e7e3a5e954c61674ae61db9800a5..85af2504aa78f2507e96be83f64cbdcb5fcb15ed 100644 --- a/bigbluebutton-html5/tests/puppeteer/webcam/check.js +++ b/bigbluebutton-html5/tests/puppeteer/webcam/check.js @@ -7,11 +7,9 @@ class Check extends Share { } async test() { - await util.startAndCheckForWebcams(this.page1); - await util.startAndCheckForWebcams(this.page2); - const responseUser1 = await util.webcamContentCheck(this.page1); - const responseUser2 = await util.webcamContentCheck(this.page2); - return responseUser1 && responseUser2; + await util.enableWebcam(this.page); + const respUser = await util.webcamContentCheck(this.page); + return respUser === true; } } module.exports = exports = Check; diff --git a/bigbluebutton-html5/tests/puppeteer/webcam/elements.js b/bigbluebutton-html5/tests/puppeteer/webcam/elements.js index 2f5ecf643175fc17914143b6ba256f8c896a8a99..d265160154120fe4846ccc7eb04b63c9f2e0182b 100644 --- a/bigbluebutton-html5/tests/puppeteer/webcam/elements.js +++ b/bigbluebutton-html5/tests/puppeteer/webcam/elements.js @@ -2,5 +2,4 @@ exports.joinVideo = 'button[data-test="joinVideo"]'; exports.videoPreview = 'video[data-test="videoPreview"]'; exports.startSharingWebcam = 'button[data-test="startSharingWebcam"]'; exports.videoContainer = 'video[data-test="videoContainer"]'; -exports.webcamConnectingStatus = '[data-test="webcamConnectingStatus"]'; -exports.presentationFullscreenButton = '[data-test="presentationFullscreenButton"]'; +exports.webcamConnecting = '[data-test="webcamConnecting"]'; diff --git a/bigbluebutton-html5/tests/puppeteer/webcam/loadtime.js b/bigbluebutton-html5/tests/puppeteer/webcam/loadtime.js deleted file mode 100644 index 1bb96551245a15e06f2cdfed442112765f0f2999..0000000000000000000000000000000000000000 --- a/bigbluebutton-html5/tests/puppeteer/webcam/loadtime.js +++ /dev/null @@ -1,19 +0,0 @@ -const Share = require('./share'); -const util = require('./util'); - -class LoadingTime extends Share { - constructor() { - super('check-webcam-loading-time'); - } - - async test() { - await util.enableWebcam(this.page1); - await util.enableWebcam(this.page2); - const now = new Date().getMilliseconds(); - await util.waitForWebcamsLoading(this.page1); - await util.waitForWebcamsLoading(this.page2); - const end = new Date().getMilliseconds(); - return end - now; - } -} -module.exports = exports = LoadingTime; diff --git a/bigbluebutton-html5/tests/puppeteer/webcam/share.js b/bigbluebutton-html5/tests/puppeteer/webcam/share.js index c0d02cac7d6da04617b8988ebd579fc173b69410..42c52313814e0d69f5c2f37fa4c3d5144f0941f1 100644 --- a/bigbluebutton-html5/tests/puppeteer/webcam/share.js +++ b/bigbluebutton-html5/tests/puppeteer/webcam/share.js @@ -1,29 +1,15 @@ const Page = require('../core/page'); const util = require('./util'); -const params = require('../params'); -class Share { +class Share extends Page{ constructor() { - this.page1 = new Page(); - this.page2 = new Page(); - } - - async init(meetingId) { - await this.page1.init(Page.getArgsWithVideo(), meetingId, { ...params, fullName: 'Streamer1' }); - await this.page2.init(Page.getArgsWithVideo(), this.page1.meetingId, { ...params, fullName: 'Streamer2' }); + super('webcam-test'); } async test() { - await util.enableWebcam(this.page1); - await util.enableWebcam(this.page2); - const responseUser1 = await util.evaluateCheck(this.page1); - const responseUser2 = await util.evaluateCheck(this.page2); - return responseUser1 && responseUser2; - } - - async close() { - await this.page1.close(); - await this.page2.close(); + await util.enableWebcam(this.page); + const response = await util.evaluateCheck(this.page); + return response; } } diff --git a/bigbluebutton-html5/tests/puppeteer/webcam/util.js b/bigbluebutton-html5/tests/puppeteer/webcam/util.js index c48e72a6010bc6e725d152a53dfe595bad71f9bd..c9a429d6a2c7a6165dcfa9e6e34b2ca4acaadd42 100644 --- a/bigbluebutton-html5/tests/puppeteer/webcam/util.js +++ b/bigbluebutton-html5/tests/puppeteer/webcam/util.js @@ -3,10 +3,10 @@ const we = require('./elements'); async function enableWebcam(test) { // Enabling webcam await test.waitForSelector(we.joinVideo); - await test.click(we.joinVideo, true); + await test.click(we.joinVideo); await test.waitForSelector(we.videoPreview); await test.waitForSelector(we.startSharingWebcam); - await test.click(we.startSharingWebcam, true); + await test.click(we.startSharingWebcam); } async function getTestElement(element) { @@ -15,8 +15,7 @@ async function getTestElement(element) { async function evaluateCheck(test) { await test.waitForSelector(we.videoContainer); - await test.waitForSelector(we.webcamConnectingStatus); - const videoContainer = await test.page.evaluate(getTestElement, we.presentationFullscreenButton); + const videoContainer = await test.evaluate(getTestElement, we.presentationFullscreenButton); const response = videoContainer !== null; return response; } @@ -27,35 +26,41 @@ async function startAndCheckForWebcams(test) { return response; } -async function checkCameras() { - const videos = document.querySelectorAll('video'); - const lastVideoColor = document.lastVideoColor || {}; - document.lastVideoColor = lastVideoColor; +async function webcamContentCheck(test) { + await test.waitForSelector(we.videoContainer); + await test.waitForFunction(() => !document.querySelector('[data-test="webcamConnecting"]')); + + const repeats = 5; + let check; + for (let i = repeats; i >= 1; i--) { + console.log(`loop ${i}`); + const checkCameras = function (i) { + const videos = document.querySelectorAll('video'); + const lastVideoColor = document.lastVideoColor || {}; + document.lastVideoColor = lastVideoColor; - for (let v = 0; v < videos.length; v++) { - const video = videos[v]; - const canvas = document.createElement('canvas'); - const context = canvas.getContext('2d'); - context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight); - const pixel = context.getImageData(50, 50, 1, 1).data; - const pixelString = new Array(pixel).join(' ').toString(); + for (let v = 0; v < videos.length; v++) { + const video = videos[v]; + const canvas = document.createElement('canvas'); + const context = canvas.getContext('2d'); + context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight); + const pixel = context.getImageData(50, 50, 1, 1).data; + const pixelString = new Array(pixel).join(' ').toString(); - if (lastVideoColor[v]) { - if (lastVideoColor[v] == pixelString) { - return false; + if (lastVideoColor[v]) { + if (lastVideoColor[v] == pixelString) { + return false; + } + } + lastVideoColor[v] = pixelString; + return true; } - } - return lastVideoColor[v] !== pixelString === true; - } -} + }; -async function webcamContentCheck(test) { - const repeats = 5; - let check; - for (let i = repeats; i >= 0; i--) { - await test.page.waitFor(parseInt(process.env.LOOP_INTERVAL)); - return check = await test.page.evaluate(checkCameras); + check = await test.evaluate(checkCameras, i); + await test.waitFor(parseInt(process.env.LOOP_INTERVAL)); } + return check === true; } exports.startAndCheckForWebcams = startAndCheckForWebcams;