Skip to content

Commit

Permalink
Merge pull request #6620 from Rob--W/node-test-random-port
Browse files Browse the repository at this point in the history
Use random port in test webserver
  • Loading branch information
yurydelendik committed Nov 10, 2015
2 parents 3c94ba8 + ff8c334 commit 3674f0d
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
2 changes: 1 addition & 1 deletion test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ function parseOptions() {
.example('$0 --b=firefox -t=issue5567 -t=issue5909',
'Run the reftest identified by issue5567 and issue5909 in Firefox.')
.describe('port', 'The port the HTTP server should listen on.')
.default('port', 8000)
.default('port', 0)
.describe('unitTest', 'Run the unit tests.')
.describe('fontTest', 'Run the font tests.')
.describe('noDownload', 'Skips test PDFs downloading.')
Expand Down
16 changes: 15 additions & 1 deletion test/webserver.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ var defaultMimeType = 'application/octet-stream';
function WebServer() {
this.root = '.';
this.host = 'localhost';
this.port = 8000;
this.port = 0;
this.server = null;
this.verbose = false;
this.cacheExpirationTime = 0;
Expand All @@ -56,6 +56,7 @@ function WebServer() {
}
WebServer.prototype = {
start: function (callback) {
this._ensureNonZeroPort();
this.server = http.createServer(this._handler.bind(this));
this.server.listen(this.port, this.host, callback);
console.log(
Expand All @@ -65,6 +66,19 @@ WebServer.prototype = {
this.server.close(callback);
this.server = null;
},
_ensureNonZeroPort: function () {
if (!this.port) {
// If port is 0, a random port will be chosen instead. Do not set a host
// name to make sure that the port is synchronously set by .listen().
var server = http.createServer().listen(0);
var address = server.address();
// .address().port being available synchronously is merely an
// implementation detail. So we are defensive here and fall back to some
// fixed port when the address is not available yet.
this.port = address ? address.port : 8000;
server.close();
}
},
_handler: function (req, res) {
var url = req.url;
var urlParts = /([^?]*)((?:\?(.*))?)/.exec(url);
Expand Down

0 comments on commit 3674f0d

Please sign in to comment.