influxdb/e2e/hooks.js

145 lines
4.4 KiB
JavaScript

const fs = require('fs')
var {Before, BeforeAll, After, AfterAll, Status} = require('cucumber')
var {logging} = require('selenium-webdriver');
/*
Before(function (scenario, callback) {
callback();
});
BeforeAll(async function (scenario, callback) {
// await __wdriver.get('chrome://settings/clearBrowserData').then(async () => {
// console.log("DEBUG clearing browser cache");
// await __wdriver.sleep(3000);
// await __wdriver.switchTo().activeElement();
//// await __wdriver.findElement(By.css("* /deep/ #clearBrowsingDataConfirm")).click();
// await __wdriver.findElement(By.css("clearBrowsingDataConfirm")).click();
// await __wdriver.sleep(3000);
// }).catch(async err => {
// console.log("DEBUG caught err " + err);
// throw err;
// });
callback();
})*/
async function writeScreenShot(filename) {
filename = filename.replace(/\s+/g, '_');
return await __wdriver.takeScreenshot().then(async (image, err) => {
await fs.writeFile(filename, image, 'base64', (err) => {
if (err) {
console.log(err)
}
})
return image
})
}
async function writeConsoleLog(filename){
filename = filename.replace(/\s+/g, '_');
await __wdriver.manage().logs().get(logging.Type.BROWSER).then(async logs => {
for(let log in logs){
fs.appendFileSync(filename, `[${(new Date(parseInt(logs[log].timestamp))).toISOString()}]${logs[log].level}:${logs[log].message}\n`);
}
})
}
async function writeDriverLog(filename){
filename = filename.replace(/\s+/g, '_');
await __wdriver.manage().logs().get(logging.Type.DRIVER).then(async logs => {
for(let log in logs){
fs.appendFileSync(filename, `[${(new Date(parseInt(logs[log].timestamp))).toISOString()}]:${logs[log].message}\n`);
}
})
}
let scenarioCt = 0;
let currentFeature = '';
Before(async function (scenario){
//safety kill any live data generator
if(!await scenarioContainsTag(scenario, '@use-live-data') && __liveDataGenRunning){
console.log("killing live generator");
__killLiveDataGen = true;
}
});
async function scenarioContainsTag(scenario, tag){
let match = scenario.pickle.tags.find( elem => elem.name === tag)
//console.log("DEBUG match " + match);
return match !== undefined;
}
After(async function (scenario /*, callback */) {
//__wdriver.sleep(1500) //DEBUG - getting shots out of order
// Handled in cucumber.js
// if(!fs.existsSync(`./${__config.screenshot_dir}`)){
// fs.mkdir(`./${__config.screenshot_dir}`, () => {})
// }
let uri = scenario.sourceLocation.uri
let feature = uri.substring(uri.lastIndexOf("/") + 1).replace('.','-')
let name = scenario.pickle.name.trim().replace(' ', '_');
name = name.replace('/', '-');
name = name.replace('\\', '-');
if(feature !== currentFeature){
scenarioCt = 0;
}
if(scenarioCt === 0){
currentFeature = feature;
}
// let now = new Date()
// let nowStr = now.getFullYear().toString() +
// (now.getMonth() + 1).toString().padStart(2, '0') +
// now.getDate().toString().padStart(2, '0') + "-" +
// now.getHours().toString().padStart(2, '0') +
// now.getMinutes().toString().padStart(2, '0') +
// now.getSeconds().toString().padStart(2, '0')
//let filebase = __config.screenshot_dir + '/' + feature + "-" + nowStr + "-" + name
let filebase = __screenShotDir + "/" + feature + "-" + (scenarioCt++).toString().padStart(2, '0') + "-" + name;
let world = this;
if(scenario.result.status === Status.FAILED){
await writeScreenShot(filebase + "-ERR" + ".png").then(async img => {
await world.attach(img, 'image/png')
});
await writeConsoleLog(filebase + '-ERR-console.log').catch(async e => {
throw('failed to write ' + filebase + '-ERR-console.log\n' + e);
});
await writeDriverLog(filebase + '-ERR-driver.log').catch(async e => {
throw('failed to write ' + filebase + '-ERR-console.log\n' + e);
})
}else {
await writeScreenShot(filebase + "--OK" + ".png").then(async img => {
await world.attach(img, 'image/png')
})
}
//callback()
});
AfterAll(async function ( ) {
if(__liveDataGenRunning) {
console.log("killing live generator");
__killLiveDataGen = true;
}
});