in integration/js/pages/AppPage.js [1005:1084]
async echoAudioCheck(stepInfo, expectedState){
let res = undefined;
try {
res = await this.driver.executeAsyncScript(async (expectedState) => {
const logs = [];
const callback = arguments[arguments.length - 1];
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds));
};
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
let successfulChecks = 0;
let totalChecks = 0;
try {
const stream = document.getElementById('meeting-audio').srcObject;
const source = audioContext.createMediaStreamSource(stream);
const analyser = audioContext.createAnalyser();
source.connect(analyser);
let byteFrequencyData = new Uint8Array(analyser.frequencyBinCount);
await sleep(5000);
// get the average volume from the frequency data
const getAverageVolume = () => {
analyser.getByteFrequencyData(byteFrequencyData);
let values = 0;
let average = 0;
const length = byteFrequencyData.length;
for (const value of byteFrequencyData) {
values += value;
}
average = values / length;
return average;
};
// check the volume for runCount times
const checkVolumeFor = async (runCount) => {
for (let i = 0; i < runCount; ++i){
totalChecks++;
const avgTestVolume = getAverageVolume();
logs.push(`Resulting volume ${avgTestVolume}`);
if (
(expectedState === 'AUDIO_ON' && avgTestVolume > 0) ||
(expectedState === 'AUDIO_OFF' && avgTestVolume === 0)
) {
successfulChecks++;
}
await sleep(100);
}
};
await checkVolumeFor(25);
} catch (e) {
logs.push(`${e}`);
} finally {
logs.push(`Echo test completed`);
await audioContext.close();
callback({
percentage: successfulChecks / totalChecks,
logs
});
}
}, expectedState);
} catch (e) {
this.logger(`Echo Audio Check Failed ${e}`);
} finally {
if (res) {
res.logs.forEach(l => {
this.logger(l);
})
}
}
this.logger(`Echo Audio check success rate: ${res.percentage * 100}%`);
if (res.percentage >= 0.75) {
return true;
}
return false;
}