Browse Source

Use random port in test webserver

Rob Wu 10 years ago
parent
commit
ff8c334207
  1. 2
      test/test.js
  2. 16
      test/webserver.js

2
test/test.js

@ -60,7 +60,7 @@ function parseOptions() { @@ -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.')

16
test/webserver.js

@ -44,7 +44,7 @@ var defaultMimeType = 'application/octet-stream'; @@ -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;
@ -56,6 +56,7 @@ function WebServer() { @@ -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(
@ -65,6 +66,19 @@ WebServer.prototype = { @@ -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);

Loading…
Cancel
Save