Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/check-started.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ async function checkStarted(seleniumArgs) {
retry: 0,
};

let attempts = 10;
let attempts = 20;
const startTime = Date.now();
while (attempts > 0 && Date.now() - startTime < 60000) {
await sleep(500);
Expand Down
29 changes: 19 additions & 10 deletions lib/install-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const fs = require('fs');
const got = require('got');
const merge = require('lodash.merge');
const debug = require('debug')('selenium-standalone:install');
const { logError } = require('./log-error');

const installers = ['selenium', 'chrome', 'ie', 'firefox', 'edge', 'chromiumedge'];

Expand Down Expand Up @@ -58,7 +59,7 @@ const chmod = (where) =>
debug('chmod 0755 on', where);
fs.chmod(where, '0755', (err) => {
if (err) {
return reject(err);
return reject(logError('chmod', err));
}
resolve();
});
Expand Down Expand Up @@ -117,7 +118,9 @@ function isUpToDate(url, requestOpts, hash, cb) {
cb(false);
})
.catch((err) => {
return cb(new Error(`Could not request headers from ${url}: ${err.response.statusCode}`));
return cb(
new Error(`Could not request headers from ${url}: ${err.response ? err.response.statusCode : err.message}`)
);
});
}

Expand All @@ -131,22 +134,26 @@ async function uncompressDownloadedFile(zipFilePath) {
return new Promise((resolve, reject) =>
yauzl.open(zipFilePath, function onOpenZipFile(err, zipFile) {
if (err) {
return reject(err);
return reject(logError('uncompressDownloadedFile:yauzl.open', err));
}
zipFile.on('entry', (entry) => {
if (/.*\/.*/.test(entry.fileName)) {
return; // ignore folders, i.e. release notes folder in edge driver zip
}
zipFile.openReadStream(entry, { autoClose: true }, function onOpenZipFileEntryReadStream(errRead, readStream) {
if (errRead) {
return reject(errRead);
return reject(logError('uncompressDownloadedFile:zipFile.openReadStream', err));
}
const extractPath = path.join(
path.dirname(zipFilePath),
isBrowserDriver(entry.fileName) ? path.basename(zipFilePath, '.zip') : entry.fileName
);
const extractWriteStream = fs.createWriteStream(extractPath).once('error', reject);
readStream.pipe(extractWriteStream).once('error', reject);
const extractWriteStream = fs
.createWriteStream(extractPath)
.once('error', (errWs) => reject(logError('uncompressDownloadedFile:readStream.pipe', errWs)));
readStream
.pipe(extractWriteStream)
.once('error', (errPipe) => reject(logError('uncompressDownloadedFile:readStream.pipe', errPipe)));
});
});
zipFile.on('close', resolve);
Expand All @@ -157,7 +164,9 @@ async function uncompressDownloadedFile(zipFilePath) {
async function uncompressGzippedFile(from, gzipFilePath) {
return new Promise((resolve, reject) => {
const extractPath = path.join(path.dirname(gzipFilePath), path.basename(gzipFilePath, '.gz'));
const writeStream = fs.createWriteStream(extractPath).once('error', reject);
const writeStream = fs
.createWriteStream(extractPath)
.once('error', (err) => reject(logError('uncompressGzippedFile:createWriteStream', err)));
const gunzippedContent = fs.createReadStream(gzipFilePath).pipe(gunzip).once('error', reject);

if (from.substr(-7) === '.tar.gz') {
Expand Down Expand Up @@ -210,7 +219,7 @@ async function runInstaller(installerFile, from, to) {
runner.on('exit', () => {
fs.readFile(logFile, 'utf16le', (err, data) => {
if (err) {
return reject(err);
return reject(logError('runInstaller:readFile', err));
}

const installDir = data
Expand All @@ -230,11 +239,11 @@ async function runInstaller(installerFile, from, to) {
})
.pipe(fs.createWriteStream(to, { autoClose: true }))
.once('finish', resolve)
.once('error', reject);
.once('error', (errWs) => reject(logError('runInstaller:createWriteStream', errWs)));
});
});

runner.on('error', reject);
runner.on('error', (errRunner) => reject(logError('runInstaller:runner', errRunner)));
});
}

Expand Down
25 changes: 16 additions & 9 deletions lib/install.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const {
runInstaller,
} = require('./install-utils');
const { checkArgs } = require('./check-args');
const { logError } = require('./log-error');

/**
* used ONLY to deal with progress bar.
Expand Down Expand Up @@ -69,7 +70,7 @@ async function install(_opts, _cb) {
delete opts.drivers.chromiumedge;
}

const requestOpts = Object.assign({ timeout: 60000 }, opts.requestOpts);
const requestOpts = Object.assign({ timeout: 90000 }, opts.requestOpts);
if (opts.proxy) {
requestOpts.proxy = opts.proxy;
}
Expand Down Expand Up @@ -204,7 +205,10 @@ async function install(_opts, _cb) {
const stream = await getDownloadStream(from);

return new Promise((resolve, reject) =>
stream.pipe(fs.createWriteStream(to)).once('error', reject).once('finish', resolve)
stream
.pipe(fs.createWriteStream(to))
.once('error', (err) => reject(logError('installSingleFile', err)))
.once('finish', resolve)
);
}

Expand All @@ -217,7 +221,9 @@ async function install(_opts, _cb) {
const installerFile = getTempFileName('installer.msi');

await new Promise((resolve, reject) => {
const msiWriteStream = fs.createWriteStream(installerFile).once('error', reject);
const msiWriteStream = fs
.createWriteStream(installerFile)
.once('error', (err) => reject(logError('downloadInstallerFile', err)));
stream.pipe(msiWriteStream);

msiWriteStream.once('finish', resolve);
Expand Down Expand Up @@ -251,7 +257,9 @@ async function install(_opts, _cb) {

// Store downloaded compressed file
await new Promise((resolve, reject) => {
const gzipWriteStream = fs.createWriteStream(to).once('error', reject);
const gzipWriteStream = fs
.createWriteStream(to)
.once('error', (err) => reject(logError('installGzippedFile', err)));
stream.pipe(gzipWriteStream);

gzipWriteStream.once('finish', resolve);
Expand All @@ -265,7 +273,9 @@ async function install(_opts, _cb) {

await new Promise((resolve, reject) => {
// Store downloaded compressed file
const zipWriteStream = fs.createWriteStream(to).once('error', reject);
const zipWriteStream = fs
.createWriteStream(to)
.once('error', (err) => reject(logError('installZippedFile', err)));
stream.pipe(zipWriteStream);

// Uncompress downloaded file
Expand Down Expand Up @@ -298,10 +308,7 @@ async function install(_opts, _cb) {
.once('end', () => {
downloadStreams.delete(downloadStream);
})
.once('error', (err) => {
console.error(err);
reject(new Error('Could not download ' + downloadUrl));
});
.once('error', (err) => reject(logError('getDownloadStream', err, 'Could not download ' + downloadUrl)));
});
}
}
Expand Down
14 changes: 14 additions & 0 deletions lib/log-error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const logError = (fnName, error, message = '') => {
console.error(`Error in "${fnName}". ${message}\nSee more details below:`);
if (error) {
if (error.response) {
console.log(error.response.statusCode, error.response.url);
}
console.error(error.message || error);
}
return error;
};

module.exports = {
logError,
};