Description: Fix failing tests
 The right move is to let system assign port
Author: Jérémy Lal <kapouer@melix.org>
Last-Update: 2016-12-20
Forwarded: not yet, current upstream too different
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
--- a/test/WebSocketServer.test.js
+++ b/test/WebSocketServer.test.js
@@ -5,8 +5,6 @@
   , fs = require('fs')
   , should = require('should');
 
-var port = 8000;
-
 function getArrayBuffer(buf) {
   var l = buf.length;
   var arrayBuf = new ArrayBuffer(l);
@@ -24,6 +22,10 @@
   return true;
 }
 
+function getPort(wss) {
+	return wss._server.address().port;
+}
+
 describe('WebSocketServer', function() {
   describe('#ctor', function() {
     it('should return a new instance if called without new', function(done) {
@@ -31,7 +33,7 @@
       ws.should.be.an.instanceOf(WebSocketServer);
       done();
     });
-    
+
     it('throws an error if no option object is passed', function() {
       var gotException = false;
       try {
@@ -66,17 +68,18 @@
     });
 
     it('emits an error if http server bind fails', function(done) {
-      var wss1 = new WebSocketServer({port: 50003});
-      var wss2 = new WebSocketServer({port: 50003});
-      wss2.on('error', function() {
-        wss1.close();
-        done();
+      var wss1 = new WebSocketServer({port: 0}, function() {
+        var wss2 = new WebSocketServer({port: getPort(wss1)});
+        wss2.on('error', function() {
+          wss1.close();
+          done();
+        });
       });
     });
 
     it('starts a server on a given port', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
-        var ws = new WebSocket('ws://localhost:' + port);
+      var wss = new WebSocketServer({port: 0}, function() {
+        var ws = new WebSocket('ws://localhost:' + getPort(wss));
       });
       wss.on('connection', function(client) {
         wss.close();
@@ -86,9 +89,9 @@
 
     it('uses a precreated http server', function (done) {
       var srv = http.createServer();
-      srv.listen(++port, function () {
+      srv.listen(0, function () {
         var wss = new WebSocketServer({server: srv});
-        var ws = new WebSocket('ws://localhost:' + port);
+        var ws = new WebSocket('ws://localhost:' + srv.address().port);
 
         wss.on('connection', function(client) {
           wss.close();
@@ -99,8 +102,8 @@
     });
 
     it('426s for non-Upgrade requests', function (done) {
-      var wss = new WebSocketServer({ port: ++port }, function () {
-        http.get('http://localhost:' + port, function (res) {
+      var wss = new WebSocketServer({ port: 0 }, function () {
+        http.get('http://localhost:' + getPort(wss), function (res) {
           var body = '';
 
           res.statusCode.should.equal(426);
@@ -134,9 +137,9 @@
 
     it('emits path specific connection event', function (done) {
       var srv = http.createServer();
-      srv.listen(++port, function () {
+      srv.listen(0, function () {
         var wss = new WebSocketServer({server: srv});
-        var ws = new WebSocket('ws://localhost:' + port+'/endpointName');
+        var ws = new WebSocket('ws://localhost:' + srv.address().port + '/endpointName');
 
         wss.on('connection/endpointName', function(client) {
           wss.close();
@@ -148,7 +151,7 @@
 
     it('can have two different instances listening on the same http server with two different paths', function(done) {
       var srv = http.createServer();
-      srv.listen(++port, function () {
+      srv.listen(0, function () {
         var wss1 = new WebSocketServer({server: srv, path: '/wss1'})
           , wss2 = new WebSocketServer({server: srv, path: '/wss2'});
         var doneCount = 0;
@@ -166,6 +169,7 @@
             done();
           }
         });
+        var port = srv.address().port;
         var ws1 = new WebSocket('ws://localhost:' + port + '/wss1');
         var ws2 = new WebSocket('ws://localhost:' + port + '/wss2?foo=1');
       });
@@ -173,7 +177,7 @@
 
     it('cannot have two different instances listening on the same http server with the same path', function(done) {
       var srv = http.createServer();
-      srv.listen(++port, function () {
+      srv.listen(0, function () {
         var wss1 = new WebSocketServer({server: srv, path: '/wss1'});
         try {
           var wss2 = new WebSocketServer({server: srv, path: '/wss1'});
@@ -186,25 +190,24 @@
       });
     });
     it('will not crash when it receives an unhandled opcode', function(done) {
-      var wss = new WebSocketServer({ port: 8080 });
+      var wss = new WebSocketServer({ port: 0 }, function() {
+        var socket = new WebSocket('ws://127.0.0.1:' + getPort(wss) + '/');
+        socket.onopen = function() {
+            socket._socket.write(new Buffer([5]));
+            socket.send('');
+        };
+      });
       wss.on('connection', function connection(ws) {
           ws.onerror = function(error) {
               done();
           };
       });
-
-      var socket = new WebSocket('ws://127.0.0.1:8080/');
-
-      socket.onopen = function() {
-          socket._socket.write(new Buffer([5]));
-          socket.send('');
-      };
-    });  
+    });
   });
 
   describe('#close', function() {
     it('does not thrown when called twice', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
+      var wss = new WebSocketServer({port: 0}, function() {
         wss.close();
         wss.close();
         wss.close();
@@ -214,8 +217,8 @@
     });
 
     it('will close all clients', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
-        var ws = new WebSocket('ws://localhost:' + port);
+      var wss = new WebSocketServer({port: 0}, function() {
+        var ws = new WebSocket('ws://localhost:' + getPort(wss));
         ws.on('close', function() {
           if (++closes == 2) done();
         });
@@ -235,9 +238,9 @@
       srv.close = function() {
         should.fail('must not close pre-created server');
       }
-      srv.listen(++port, function () {
+      srv.listen(0, function () {
         var wss = new WebSocketServer({server: srv});
-        var ws = new WebSocket('ws://localhost:' + port);
+        var ws = new WebSocket('ws://localhost:' + getPort(wss));
         wss.on('connection', function(client) {
           wss.close();
           srv.close = realClose;
@@ -249,7 +252,7 @@
 
     it('cleans event handlers on precreated server', function(done) {
       var srv = http.createServer();
-      srv.listen(++port, function() {
+      srv.listen(0, function() {
         var wss = new WebSocketServer({server: srv});
         wss.close();
         srv.emit('upgrade');
@@ -261,7 +264,7 @@
 
     it('cleans up websocket data on a precreated server', function(done) {
       var srv = http.createServer();
-      srv.listen(++port, function () {
+      srv.listen(0, function () {
         var wss1 = new WebSocketServer({server: srv, path: '/wss1'})
           , wss2 = new WebSocketServer({server: srv, path: '/wss2'});
         (typeof srv._webSocketPaths).should.eql('object');
@@ -278,9 +281,9 @@
 
   describe('#clients', function() {
     it('returns a list of connected clients', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
+      var wss = new WebSocketServer({port: 0}, function() {
         wss.clients.length.should.eql(0);
-        var ws = new WebSocket('ws://localhost:' + port);
+        var ws = new WebSocket('ws://localhost:' + getPort(wss));
       });
       wss.on('connection', function(client) {
         wss.clients.length.should.eql(1);
@@ -290,9 +293,9 @@
     });
 
     it('can be disabled', function(done) {
-      var wss = new WebSocketServer({port: ++port, clientTracking: false}, function() {
+      var wss = new WebSocketServer({port: 0, clientTracking: false}, function() {
         wss.clients.length.should.eql(0);
-        var ws = new WebSocket('ws://localhost:' + port);
+        var ws = new WebSocket('ws://localhost:' + getPort(wss));
       });
       wss.on('connection', function(client) {
         wss.clients.length.should.eql(0);
@@ -303,8 +306,8 @@
 
     it('is updated when client terminates the connection', function(done) {
       var ws;
-      var wss = new WebSocketServer({port: ++port}, function() {
-        ws = new WebSocket('ws://localhost:' + port);
+      var wss = new WebSocketServer({port: 0}, function() {
+        ws = new WebSocket('ws://localhost:' + getPort(wss));
       });
       wss.on('connection', function(client) {
         client.on('close', function() {
@@ -318,8 +321,8 @@
 
     it('is updated when client closes the connection', function(done) {
       var ws;
-      var wss = new WebSocketServer({port: ++port}, function() {
-        ws = new WebSocket('ws://localhost:' + port);
+      var wss = new WebSocketServer({port: 0}, function() {
+        ws = new WebSocket('ws://localhost:' + getPort(wss));
       });
       wss.on('connection', function(client) {
         client.on('close', function() {
@@ -334,8 +337,8 @@
 
   describe('#options', function() {
     it('exposes options passed to constructor', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
-        wss.options.port.should.eql(port);
+      var wss = new WebSocketServer({port: 0}, function() {
+        wss.options.port.should.eql(0);
         wss.close();
         done();
       });
@@ -345,9 +348,9 @@
   describe('#maxpayload #hybiOnly', function() {
     it('maxpayload is passed on to clients,', function(done) {
       var _maxPayload = 20480;
-      var wss = new WebSocketServer({port: ++port,maxPayload:_maxPayload, disableHixie: true}, function() {
+      var wss = new WebSocketServer({port: 0,maxPayload:_maxPayload, disableHixie: true}, function() {
         wss.clients.length.should.eql(0);
-        var ws = new WebSocket('ws://localhost:' + port);
+        var ws = new WebSocket('ws://localhost:' + getPort(wss));
       });
       wss.on('connection', function(client) {
         wss.clients.length.should.eql(1);
@@ -358,9 +361,9 @@
     });
     it('maxpayload is passed on to hybi receivers', function(done) {
       var _maxPayload = 20480;
-      var wss = new WebSocketServer({port: ++port,maxPayload:_maxPayload,  disableHixie: true}, function() {
+      var wss = new WebSocketServer({port: 0,maxPayload:_maxPayload,  disableHixie: true}, function() {
         wss.clients.length.should.eql(0);
-        var ws = new WebSocket('ws://localhost:' + port);
+        var ws = new WebSocket('ws://localhost:' + getPort(wss));
       });
       wss.on('connection', function(client) {
         wss.clients.length.should.eql(1);
@@ -372,9 +375,9 @@
     it('maxpayload is passed on to permessage-deflate', function(done) {
       var PerMessageDeflate = require('../lib/PerMessageDeflate');
       var _maxPayload = 20480;
-      var wss = new WebSocketServer({port: ++port,maxPayload:_maxPayload, disableHixie: true}, function() {
+      var wss = new WebSocketServer({port: 0,maxPayload:_maxPayload, disableHixie: true}, function() {
         wss.clients.length.should.eql(0);
-        var ws = new WebSocket('ws://localhost:' + port);
+        var ws = new WebSocket('ws://localhost:' + getPort(wss));
       });
       wss.on('connection', function(client) {
         wss.clients.length.should.eql(1);
@@ -388,14 +391,14 @@
   describe('#handleUpgrade', function() {
     it('can be used for a pre-existing server', function (done) {
       var srv = http.createServer();
-      srv.listen(++port, function () {
+      srv.listen(0, function () {
         var wss = new WebSocketServer({noServer: true});
         srv.on('upgrade', function(req, socket, upgradeHead) {
           wss.handleUpgrade(req, socket, upgradeHead, function(client) {
             client.send('hello');
           });
         });
-        var ws = new WebSocket('ws://localhost:' + port);
+        var ws = new WebSocket('ws://localhost:' + srv.address().port);
         ws.on('message', function(message) {
           message.should.eql('hello');
           wss.close();
@@ -409,9 +412,9 @@
   describe('hybi mode', function() {
     describe('connection establishing', function() {
       it('does not accept connections with no sec-websocket-key', function(done) {
-        var wss = new WebSocketServer({port: ++port}, function() {
+        var wss = new WebSocketServer({port: 0}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -433,9 +436,9 @@
       });
 
       it('does not accept connections with no sec-websocket-version', function(done) {
-        var wss = new WebSocketServer({port: ++port}, function() {
+        var wss = new WebSocketServer({port: 0}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -458,9 +461,9 @@
       });
 
       it('does not accept connections with invalid sec-websocket-version', function(done) {
-        var wss = new WebSocketServer({port: ++port}, function() {
+        var wss = new WebSocketServer({port: 0}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -484,11 +487,11 @@
       });
 
       it('client can be denied', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o) {
           return false;
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -515,11 +518,11 @@
       });
 
       it('client can be accepted', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o) {
           return true;
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -542,13 +545,13 @@
 
       it('verifyClient gets client origin', function(done) {
         var verifyClientCalled = false;
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(info) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(info) {
           info.origin.should.eql('http://foobarbaz.com');
           verifyClientCalled = true;
           return false;
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -571,13 +574,13 @@
 
       it('verifyClient gets original request', function(done) {
         var verifyClientCalled = false;
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(info) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(info) {
           info.req.headers['sec-websocket-key'].should.eql('dGhlIHNhbXBsZSBub25jZQ==');
           verifyClientCalled = true;
           return false;
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -615,8 +618,8 @@
             return true;
           }
         });
-        app.listen(++port, function() {
-          var ws = new WebSocket('wss://localhost:' + port);
+        app.listen(0, function() {
+          var ws = new WebSocket('wss://localhost:' + app.address().port);
         });
         wss.on('connection', function(ws) {
           app.close();
@@ -640,8 +643,8 @@
             return true;
           }
         });
-        app.listen(++port, function() {
-          var ws = new WebSocket('ws://localhost:' + port);
+        app.listen(0, function() {
+          var ws = new WebSocket('ws://localhost:' + app.address().port);
         });
         wss.on('connection', function(ws) {
           app.close();
@@ -653,13 +656,13 @@
       });
 
       it('client can be denied asynchronously', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o, cb) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o, cb) {
           process.nextTick(function() {
             cb(false);
           });
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -686,13 +689,13 @@
       });
 
       it('client can be denied asynchronously with custom response code', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o, cb) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o, cb) {
           process.nextTick(function() {
             cb(false, 404);
           });
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -719,13 +722,13 @@
       });
 
       it('client can be accepted asynchronously', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o, cb) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o, cb) {
           process.nextTick(function() {
             cb(true);
           });
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -747,11 +750,11 @@
       });
 
       it('handles messages passed along with the upgrade request (upgrade head)', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o) {
           return true;
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -777,8 +780,8 @@
       });
 
       it('selects the first protocol by default', function(done) {
-        var wss = new WebSocketServer({port: ++port}, function() {
-          var ws = new WebSocket('ws://localhost:' + port, ['prot1', 'prot2']);
+        var wss = new WebSocketServer({port: 0}, function() {
+          var ws = new WebSocket('ws://localhost:' + getPort(wss), ['prot1', 'prot2']);
           ws.on('open', function(client) {
               ws.protocol.should.eql('prot1');
               wss.close();
@@ -788,9 +791,9 @@
       });
 
       it('selects the last protocol via protocol handler', function(done) {
-        var wss = new WebSocketServer({port: ++port, handleProtocols: function(ps, cb) {
+        var wss = new WebSocketServer({port: 0, handleProtocols: function(ps, cb) {
             cb(true, ps[ps.length-1]); }}, function() {
-          var ws = new WebSocket('ws://localhost:' + port, ['prot1', 'prot2']);
+          var ws = new WebSocket('ws://localhost:' + getPort(wss), ['prot1', 'prot2']);
           ws.on('open', function(client) {
               ws.protocol.should.eql('prot2');
               wss.close();
@@ -800,9 +803,9 @@
       });
 
       it('client detects invalid server protocol', function(done) {
-        var wss = new WebSocketServer({port: ++port, handleProtocols: function(ps, cb) {
+        var wss = new WebSocketServer({port: 0, handleProtocols: function(ps, cb) {
             cb(true, 'prot3'); }}, function() {
-          var ws = new WebSocket('ws://localhost:' + port, ['prot1', 'prot2']);
+          var ws = new WebSocket('ws://localhost:' + getPort(wss), ['prot1', 'prot2']);
           ws.on('open', function(client) {
               done(new Error('connection must not be established'));
           });
@@ -813,9 +816,9 @@
       });
 
       it('client detects no server protocol', function(done) {
-        var wss = new WebSocketServer({port: ++port, handleProtocols: function(ps, cb) {
+        var wss = new WebSocketServer({port: 0, handleProtocols: function(ps, cb) {
             cb(true); }}, function() {
-          var ws = new WebSocket('ws://localhost:' + port, ['prot1', 'prot2']);
+          var ws = new WebSocket('ws://localhost:' + getPort(wss), ['prot1', 'prot2']);
           ws.on('open', function(client) {
               done(new Error('connection must not be established'));
           });
@@ -826,9 +829,9 @@
       });
 
       it('client refuses server protocols', function(done) {
-        var wss = new WebSocketServer({port: ++port, handleProtocols: function(ps, cb) {
+        var wss = new WebSocketServer({port: 0, handleProtocols: function(ps, cb) {
             cb(false); }}, function() {
-          var ws = new WebSocket('ws://localhost:' + port, ['prot1', 'prot2']);
+          var ws = new WebSocket('ws://localhost:' + getPort(wss), ['prot1', 'prot2']);
           ws.on('open', function(client) {
               done(new Error('connection must not be established'));
           });
@@ -839,11 +842,11 @@
       });
 
       it('server detects unauthorized protocol handler', function(done) {
-        var wss = new WebSocketServer({port: ++port, handleProtocols: function(ps, cb) {
+        var wss = new WebSocketServer({port: 0, handleProtocols: function(ps, cb) {
           cb(false);
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -853,7 +856,6 @@
               'Sec-WebSocket-Origin': 'http://foobar.com'
             }
           };
-          options.port = port;
           var req = http.request(options);
           req.end();
           req.on('response', function(res) {
@@ -869,11 +871,11 @@
       });
 
       it('server detects invalid protocol handler', function(done) {
-        var wss = new WebSocketServer({port: ++port, handleProtocols: function(ps, cb) {
+        var wss = new WebSocketServer({port: 0, handleProtocols: function(ps, cb) {
             // not calling callback is an error and shouldn't timeout
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -883,7 +885,6 @@
               'Sec-WebSocket-Origin': 'http://foobar.com'
             }
           };
-          options.port = port;
           var req = http.request(options);
           req.end();
           req.on('response', function(res) {
@@ -899,9 +900,9 @@
       });
 
       it('accept connections with sec-websocket-extensions', function(done) {
-        var wss = new WebSocketServer({port: ++port}, function() {
+        var wss = new WebSocketServer({port: 0}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -930,8 +931,8 @@
           data[i] = String.fromCharCode(65 + ~~(25 * Math.random()));
         }
         data = data.join('');
-        var wss = new WebSocketServer({port: ++port}, function() {
-          var ws = new WebSocket('ws://localhost:' + port);
+        var wss = new WebSocketServer({port: 0}, function() {
+          var ws = new WebSocket('ws://localhost:' + getPort(wss));
           ws.on('message', function(message, flags) {
             ws.send(message);
           });
@@ -950,9 +951,9 @@
 
   describe('hixie mode', function() {
     it('can be disabled', function(done) {
-      var wss = new WebSocketServer({port: ++port, disableHixie: true}, function() {
+      var wss = new WebSocketServer({port: 0, disableHixie: true}, function() {
         var options = {
-          port: port,
+          port: getPort(wss),
           host: '127.0.0.1',
           headers: {
             'Connection': 'Upgrade',
@@ -980,9 +981,9 @@
 
     describe('connection establishing', function() {
       it('does not accept connections with no sec-websocket-key1', function(done) {
-        var wss = new WebSocketServer({port: ++port}, function() {
+        var wss = new WebSocketServer({port: 0}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1005,9 +1006,9 @@
       });
 
       it('does not accept connections with no sec-websocket-key2', function(done) {
-        var wss = new WebSocketServer({port: ++port}, function() {
+        var wss = new WebSocketServer({port: 0}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1030,9 +1031,9 @@
       });
 
       it('accepts connections with valid handshake', function(done) {
-        var wss = new WebSocketServer({port: ++port}, function() {
+        var wss = new WebSocketServer({port: 0}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1054,11 +1055,11 @@
       });
 
       it('client can be denied', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o) {
           return false;
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1085,11 +1086,11 @@
       });
 
       it('client can be accepted', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o) {
           return true;
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1112,13 +1113,13 @@
 
       it('verifyClient gets client origin', function(done) {
         var verifyClientCalled = false;
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(info) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(info) {
           info.origin.should.eql('http://foobarbaz.com');
           verifyClientCalled = true;
           return false;
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1142,13 +1143,13 @@
 
       it('verifyClient gets original request', function(done) {
         var verifyClientCalled = false;
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(info) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(info) {
           info.req.headers['sec-websocket-key1'].should.eql('3e6b263  4 17 80');
           verifyClientCalled = true;
           return false;
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1171,11 +1172,11 @@
       });
 
       it('client can be denied asynchronously', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o, cb) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o, cb) {
           cb(false);
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1203,11 +1204,11 @@
       });
 
       it('client can be denied asynchronously with custom response code', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o, cb) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o, cb) {
           cb(false, 404, 'Not Found');
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1235,11 +1236,11 @@
       });
 
       it('client can be accepted asynchronously', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o, cb) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o, cb) {
           cb(true);
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1261,11 +1262,11 @@
       });
 
       it('handles messages passed along with the upgrade request (upgrade head)', function(done) {
-        var wss = new WebSocketServer({port: ++port, verifyClient: function(o) {
+        var wss = new WebSocketServer({port: 0, verifyClient: function(o) {
           return true;
         }}, function() {
           var options = {
-            port: port,
+            port: getPort(wss),
             host: '127.0.0.1',
             headers: {
               'Connection': 'Upgrade',
@@ -1295,8 +1296,8 @@
 
   describe('client properties', function() {
     it('protocol is exposed', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
-        var ws = new WebSocket('ws://localhost:' + port, 'hi');
+      var wss = new WebSocketServer({port: 0}, function() {
+        var ws = new WebSocket('ws://localhost:' + getPort(wss), 'hi');
       });
       wss.on('connection', function(client) {
         client.protocol.should.eql('hi');
@@ -1306,8 +1307,8 @@
     });
 
     it('protocolVersion is exposed', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
-        var ws = new WebSocket('ws://localhost:' + port, {protocolVersion: 8});
+      var wss = new WebSocketServer({port: 0}, function() {
+        var ws = new WebSocket('ws://localhost:' + getPort(wss), {protocolVersion: 8});
       });
       wss.on('connection', function(client) {
         client.protocolVersion.should.eql(8);
@@ -1317,8 +1318,8 @@
     });
 
     it('upgradeReq is the original request object', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
-        var ws = new WebSocket('ws://localhost:' + port, {protocolVersion: 8});
+      var wss = new WebSocketServer({port: 0}, function() {
+        var ws = new WebSocket('ws://localhost:' + getPort(wss), {protocolVersion: 8});
       });
       wss.on('connection', function(client) {
         client.upgradeReq.httpVersion.should.eql('1.1');
@@ -1330,9 +1331,9 @@
 
   describe('permessage-deflate', function() {
     it('accept connections with permessage-deflate extension', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
+      var wss = new WebSocketServer({port: 0}, function() {
         var options = {
-          port: port,
+          port: getPort(wss),
           host: '127.0.0.1',
           headers: {
             'Connection': 'Upgrade',
@@ -1354,9 +1355,9 @@
     });
 
     it('does not accept connections with not defined extension parameter', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
+      var wss = new WebSocketServer({port: 0}, function() {
         var options = {
-          port: port,
+          port: getPort(wss),
           host: '127.0.0.1',
           headers: {
             'Connection': 'Upgrade',
@@ -1381,9 +1382,9 @@
     });
 
     it('does not accept connections with invalid extension parameter', function(done) {
-      var wss = new WebSocketServer({port: ++port}, function() {
+      var wss = new WebSocketServer({port: 0}, function() {
         var options = {
-          port: port,
+          port: getPort(wss),
           host: '127.0.0.1',
           headers: {
             'Connection': 'Upgrade',
