UNPKG

testarmada-magellan

Version:

Massively parallel automated testing

64 lines (54 loc) 1.64 kB
"use strict"; const _ = require("lodash"); const request = require("request"); const portscanner = require("portscanner"); const logger = require("../logger"); const PORT_STATUS_IN_USE = 0; const PORT_STATUS_AVAILABLE = 1; const checkPortStatus = (desiredPort, callback) => { request("http://127.0.0.1:" + desiredPort + "/wd/hub/static/resource/hub.html", (seleniumErr) => { if (seleniumErr && seleniumErr.code === "ECONNREFUSED") { portscanner.checkPortStatus(desiredPort, "127.0.0.1", (error, portStatus) => { if (portStatus === "open") { return callback(PORT_STATUS_IN_USE); } else { return callback(PORT_STATUS_AVAILABLE); } }); } else { logger.log( "Found selenium HTTP server at port " + desiredPort + ", port is in use."); return callback(PORT_STATUS_IN_USE); } }); }; // // Given an array portNumbers of the form: // // [1234, 5678, ...] // // checkPortRange will call callback() with a list of port statuses in the form: // // [{ port: number, available: boolean }] // const checkPortRange = (portNumbers, callback) => { portNumbers = _.cloneDeep(portNumbers); const statuses = []; const checkNextPort = () => { if (portNumbers.length > 0) { const portToCheck = portNumbers.shift(); checkPortStatus(portToCheck, (portStatus) => { statuses.push({ port: portToCheck, available: portStatus === PORT_STATUS_AVAILABLE }); checkNextPort(); }); } else { return callback(statuses); } }; checkNextPort(); }; module.exports = checkPortRange;