diff --git a/client/karma.js b/client/karma.js index d0074f0f6..238a4d3ac 100644 --- a/client/karma.js +++ b/client/karma.js @@ -13,9 +13,8 @@ var Karma = function(socket, iframe, opener, navigator, location) { var queryParams = util.parseQueryParams(location.search); var browserId = queryParams.id || util.generateId('manual-'); var returnUrl = queryParams['return_url' + ''] || null; - var currentTransport; - var resultsBufferLimit = 1; + var resultsBufferLimit = 50; var resultsBuffer = []; this.VERSION = constant.VERSION; @@ -104,7 +103,6 @@ var Karma = function(socket, iframe, opener, navigator, location) { this.stringify = stringify; - var clearContext = function() { reloadingContext = true; navigateContextTo('about:blank'); @@ -218,14 +216,9 @@ var Karma = function(socket, iframe, opener, navigator, location) { // report browser name, id socket.on('connect', function() { - currentTransport = socket.socket.transport.name; - - // TODO(vojta): make resultsBufferLimit configurable - if (currentTransport === 'websocket') { + socket.io.engine.on('upgrade', function() { resultsBufferLimit = 1; - } else { - resultsBufferLimit = 50; - } + }) socket.emit('register', { name: navigator.userAgent, diff --git a/client/main.js b/client/main.js index 11fba2934..e891f0849 100644 --- a/client/main.js +++ b/client/main.js @@ -5,14 +5,13 @@ var util = require('./util'); var KARMA_URL_ROOT = require('./constants').KARMA_URL_ROOT; -// connect socket.io -// https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO -var socket = io.connect('http://' + location.host, { - 'reconnection delay': 500, - 'reconnection limit': 2000, - 'resource': KARMA_URL_ROOT.substr(1) + 'socket.io', - 'sync disconnect on unload': true, - 'max reconnection attempts': Infinity +// Connect to the server using socket.io http://socket.io +var socket = io('http://' + location.host, { + reconnectionDelay: 500, + reconnectionDelayMax: Infinity, + timeout: 2000, + path: '/' + KARMA_URL_ROOT.substr(1) + 'socket.io', + 'sync disconnect on unload': true }); // instantiate the updater of the view diff --git a/lib/config.js b/lib/config.js index 81423fb64..368c267ef 100644 --- a/lib/config.js +++ b/lib/config.js @@ -223,7 +223,7 @@ var Config = function() { this.urlRoot = '/'; this.reportSlowerThan = 0; this.loggers = [constant.CONSOLE_APPENDER]; - this.transports = ['websocket', 'polling']; + this.transports = ['polling', 'websocket']; this.plugins = ['karma-*']; this.client = { args: [], diff --git a/lib/server.js b/lib/server.js index abdcda943..79d733d95 100644 --- a/lib/server.js +++ b/lib/server.js @@ -200,8 +200,8 @@ var start = function(injector, config, launcher, globalEmitter, preprocess, file // to suppress "browser disconnect" warnings // TODO(vojta): change the client to not send the event (if disconnected by purpose) var sockets = socketServer.sockets.sockets; - Object.getOwnPropertyNames(sockets).forEach(function(key) { - var socket = sockets[key]; + + sockets.forEach(function(socket) { socket.removeAllListeners('disconnect'); if (!socket.disconnected) { socket.disconnect(); @@ -230,11 +230,6 @@ var start = function(injector, config, launcher, globalEmitter, preprocess, file clearTimeout(closeTimeout); removeAllListeners(); }); - - // shutdown socket.io flash transport, if defined - if (socketServer.flashPolicyServer) { - socketServer.flashPolicyServer.close(); - } }); }; diff --git a/test/client/karma.spec.js b/test/client/karma.spec.js index e6440771e..c6d3d7516 100644 --- a/test/client/karma.spec.js +++ b/test/client/karma.spec.js @@ -161,6 +161,8 @@ describe('Karma', function() { log.push('start'); }); + setTransportTo('websocket'); + // adapter didn't call info({total: x}) k.result(); expect(log).toEqual(['start', 'result']); @@ -178,6 +180,8 @@ describe('Karma', function() { socket.on('start', spyStart); + setTransportTo('websocket'); + k.info({total: 321}); k.result(); expect(log).toEqual(['start', 'result']); diff --git a/test/client/mocks.js b/test/client/mocks.js index 67a746d1d..f3909cec9 100644 --- a/test/client/mocks.js +++ b/test/client/mocks.js @@ -26,15 +26,26 @@ var Emitter = function() { var MockSocket = function() { Emitter.call(this); - this.socket = {transport: {name: 'websocket'}}; + var transportName = 'websocket'; + + this.io = { + engine: { + on: function(event, cb) { + if (event === 'upgrade' && transportName === 'websocket') { + //setTimeout(cb, 0); + cb(); + } + } + } + }; this.disconnect = function() { this.emit('disconnect'); }; // MOCK API - this._setTransportNameTo = function(transportName) { - this.socket.transport.name = transportName; + this._setTransportNameTo = function(name) { + transportName = name; }; };