From 2c8e9fe79cc553a6b24d75f9ea09b75e9161cca1 Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Wed, 13 Apr 2022 17:43:38 +0200 Subject: [PATCH] test: add e2e tests for change-codecs and negotiate-timing and fix a whitespace error in the first page --- .../peerconnection/change-codecs/js/main.js | 4 +- .../peerconnection/change-codecs/js/test.js | 68 ++++++++++++++++++ .../negotiate-timing/js/test.js | 70 +++++++++++++++++++ 3 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 src/content/peerconnection/change-codecs/js/test.js create mode 100644 src/content/peerconnection/negotiate-timing/js/test.js diff --git a/src/content/peerconnection/change-codecs/js/main.js b/src/content/peerconnection/change-codecs/js/main.js index cbf62150c..5d2ad9452 100644 --- a/src/content/peerconnection/change-codecs/js/main.js +++ b/src/content/peerconnection/change-codecs/js/main.js @@ -40,7 +40,7 @@ remoteVideo.addEventListener('resize', () => { } }); -const codecPreferences = document.querySelector('#codecPreferences'); +const codecPreferences = document.getElementById('codecPreferences'); const supportsSetCodecPreferences = window.RTCRtpTransceiver && 'setCodecPreferences' in window.RTCRtpTransceiver.prototype; @@ -214,7 +214,7 @@ async function onCreateAnswerSuccess(desc) { } const codec = stats.get(stat.codecId); document.getElementById('actualCodec').innerText = 'Using ' + codec.mimeType + - ' ' + (codec.sdpFmtpLine ? codec.sdpFmtpLine + ' ' : '') + + (codec.sdpFmtpLine ? ' ' + codec.sdpFmtpLine + ' ' : '') + ', payloadType=' + codec.payloadType + '. Encoder: ' + stat.encoderImplementation; }); }, 1000); diff --git a/src/content/peerconnection/change-codecs/js/test.js b/src/content/peerconnection/change-codecs/js/test.js new file mode 100644 index 000000000..566c14833 --- /dev/null +++ b/src/content/peerconnection/change-codecs/js/test.js @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2022 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node, mocha */ + +'use strict'; +const webdriver = require('selenium-webdriver'); +const seleniumHelpers = require('../../../../../test/webdriver'); +const {expect} = require('chai'); + +let driver; +const path = '/src/content/peerconnection/change-codecs/index.html'; +const url = `${process.env.BASEURL ? process.env.BASEURL : ('file://' + process.cwd())}${path}`; + +describe('peerconnection with setCodecPreferences', () => { + before(() => { + driver = seleniumHelpers.buildDriver(); + }); + after(() => { + return driver.quit(); + }); + + beforeEach(() => { + return driver.get(url); + }); + + ['video/VP8'].forEach(codec => { + it('establishes a connection', async () => { + await driver.findElement(webdriver.By.id('startButton')).click(); + + await driver.wait(() => driver.executeScript(() => { + return localStream !== null; // eslint-disable-line no-undef + })); + await driver.wait(() => driver.executeScript(() => { + return codecPreferences.disabled === false; // eslint-disable-line no-undef + })); + await driver.findElement(webdriver.By.id('codecPreferences')).click(); + await driver.findElement(webdriver.By.css('option[value=\'video/VP8\']')).click(); + + await driver.wait(() => driver.findElement(webdriver.By.id('callButton')).isEnabled()); + await driver.findElement(webdriver.By.id('callButton')).click(); + + await Promise.all([ + await driver.wait(() => driver.executeScript(() => { + return pc1 && pc1.connectionState === 'connected'; // eslint-disable-line no-undef + })), + await driver.wait(() => driver.executeScript(() => { + return pc2 && pc2.connectionState === 'connected'; // eslint-disable-line no-undef + })), + ]); + + await driver.wait(() => driver.executeScript(() => { + return document.getElementById('remoteVideo').readyState === HTMLMediaElement.HAVE_ENOUGH_DATA; + })); + + await driver.wait(() => driver.executeScript(() => { + return document.getElementById('actualCodec').innerText !== ''; + })); + const actualCodec = await driver.findElement(webdriver.By.id('actualCodec')).getAttribute('innerText'); + expect(actualCodec.startsWith('Using ' + codec)).to.be.true; + }); + }); +}); + diff --git a/src/content/peerconnection/negotiate-timing/js/test.js b/src/content/peerconnection/negotiate-timing/js/test.js new file mode 100644 index 000000000..fa9db3663 --- /dev/null +++ b/src/content/peerconnection/negotiate-timing/js/test.js @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2022 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node, mocha */ + +'use strict'; +const webdriver = require('selenium-webdriver'); +const seleniumHelpers = require('../../../../../test/webdriver'); +const {expect} = require('chai'); + +let driver; +const path = '/src/content/peerconnection/negotiate-timing/index.html'; +const url = `${process.env.BASEURL ? process.env.BASEURL : ('file://' + process.cwd())}${path}`; + +describe('peerconnection with negotiation timing', () => { + before(() => { + driver = seleniumHelpers.buildDriver(); + }); + after(() => { + return driver.quit(); + }); + + beforeEach(() => { + return driver.get(url); + }); + + it('establishes a connection, renegotiates and hangs up', async () => { + await driver.findElement(webdriver.By.id('startButton')).click(); + + await driver.wait(() => driver.executeScript(() => { + return localStream !== null; // eslint-disable-line no-undef + })); + + await driver.wait(() => driver.findElement(webdriver.By.id('callButton')).isEnabled()); + await driver.findElement(webdriver.By.id('callButton')).click(); + + await Promise.all([ + await driver.wait(() => driver.executeScript(() => { + return pc1 && pc1.connectionState === 'connected'; // eslint-disable-line no-undef + })), + await driver.wait(() => driver.executeScript(() => { + return pc2 && pc2.connectionState === 'connected'; // eslint-disable-line no-undef + })), + ]); + + await driver.wait(() => driver.executeScript(() => { + return document.getElementById('remoteVideo').readyState === HTMLMediaElement.HAVE_ENOUGH_DATA; + })); + + await driver.wait(() => driver.findElement(webdriver.By.id('renegotiateButton')).isEnabled()); + await driver.findElement(webdriver.By.id('renegotiateButton')).click(); + + await driver.wait(() => driver.executeScript(() => { + return document.getElementById('log').innerText !== 'Log goes here'; + })); + const logText = await driver.findElement(webdriver.By.id('log')).getAttribute('innerText'); + expect(logText.split('\n')).to.have.lengthOf(2); + + await driver.findElement(webdriver.By.id('hangupButton')).click(); + + await driver.wait(() => driver.executeScript(() => { + return pc1 === null; // eslint-disable-line no-undef + })); + }); +}); +