siesta-lite
Version:
Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers
69 lines (46 loc) • 1.57 kB
JavaScript
/*
Siesta 5.6.1
Copyright(c) 2009-2022 Bryntum AB
https://bryntum.com/contact
https://bryntum.com/products/siesta/license
*/
;!function () {
var properLockFile = require('proper-lockfile')
var fs = require('fs')
Role('Siesta.Launcher.Runner.WebDriverNodeJS.CanLockXvfbDisplayFile', {
does : [
Siesta.Launcher.FileSystem.NodeJS
],
has : {
displayNumber : null,
minDisplayNum : 99,
maxDisplayNum : 599
},
methods : {
getXvfbLockFileName : function (displayNum) {
var path = process.env.HOME + '/.xvfb-locks/display-' + displayNum
this.ensurePathExists(path)
return path
},
lockXvfbFile : function () {
var me = this
return new Promise(function (resolve, reject) {
for (var i = me.minDisplayNum; i < me.maxDisplayNum; i++) {
// avoid opened display
if (fs.existsSync("/tmp/.X" + i + "-lock")) continue;
try {
var release = properLockFile.lockSync(me.getXvfbLockFileName(i), { realpath : false })
resolve({
displayNum : i,
release : release
})
return
} catch (e) {
}
}
reject("Can't acquire Xvfb lock file")
})
}
}
})
}()