Use random port in test webserver
This commit is contained in:
		
							parent
							
								
									1280b7b76b
								
							
						
					
					
						commit
						ff8c334207
					
				@ -60,7 +60,7 @@ function parseOptions() {
 | 
				
			|||||||
    .example('$0 --b=firefox -t=issue5567 -t=issue5909',
 | 
					    .example('$0 --b=firefox -t=issue5567 -t=issue5909',
 | 
				
			||||||
      'Run the reftest identified by issue5567 and issue5909 in Firefox.')
 | 
					      'Run the reftest identified by issue5567 and issue5909 in Firefox.')
 | 
				
			||||||
    .describe('port', 'The port the HTTP server should listen on.')
 | 
					    .describe('port', 'The port the HTTP server should listen on.')
 | 
				
			||||||
    .default('port', 8000)
 | 
					    .default('port', 0)
 | 
				
			||||||
    .describe('unitTest', 'Run the unit tests.')
 | 
					    .describe('unitTest', 'Run the unit tests.')
 | 
				
			||||||
    .describe('fontTest', 'Run the font tests.')
 | 
					    .describe('fontTest', 'Run the font tests.')
 | 
				
			||||||
    .describe('noDownload', 'Skips test PDFs downloading.')
 | 
					    .describe('noDownload', 'Skips test PDFs downloading.')
 | 
				
			||||||
 | 
				
			|||||||
@ -44,7 +44,7 @@ var defaultMimeType = 'application/octet-stream';
 | 
				
			|||||||
function WebServer() {
 | 
					function WebServer() {
 | 
				
			||||||
  this.root = '.';
 | 
					  this.root = '.';
 | 
				
			||||||
  this.host = 'localhost';
 | 
					  this.host = 'localhost';
 | 
				
			||||||
  this.port = 8000;
 | 
					  this.port = 0;
 | 
				
			||||||
  this.server = null;
 | 
					  this.server = null;
 | 
				
			||||||
  this.verbose = false;
 | 
					  this.verbose = false;
 | 
				
			||||||
  this.cacheExpirationTime = 0;
 | 
					  this.cacheExpirationTime = 0;
 | 
				
			||||||
@ -56,6 +56,7 @@ function WebServer() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
WebServer.prototype = {
 | 
					WebServer.prototype = {
 | 
				
			||||||
  start: function (callback) {
 | 
					  start: function (callback) {
 | 
				
			||||||
 | 
					    this._ensureNonZeroPort();
 | 
				
			||||||
    this.server = http.createServer(this._handler.bind(this));
 | 
					    this.server = http.createServer(this._handler.bind(this));
 | 
				
			||||||
    this.server.listen(this.port, this.host, callback);
 | 
					    this.server.listen(this.port, this.host, callback);
 | 
				
			||||||
    console.log(
 | 
					    console.log(
 | 
				
			||||||
@ -65,6 +66,19 @@ WebServer.prototype = {
 | 
				
			|||||||
    this.server.close(callback);
 | 
					    this.server.close(callback);
 | 
				
			||||||
    this.server = null;
 | 
					    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) {
 | 
					  _handler: function (req, res) {
 | 
				
			||||||
    var url = req.url;
 | 
					    var url = req.url;
 | 
				
			||||||
    var urlParts = /([^?]*)((?:\?(.*))?)/.exec(url);
 | 
					    var urlParts = /([^?]*)((?:\?(.*))?)/.exec(url);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user