Skip to content

Commit

Permalink
Allow browserDisconnectTolerance to be set in non singleRun mode.
Browse files Browse the repository at this point in the history
This makes it possible for Karma to recover from, e.g., infinite loop in test code.
  • Loading branch information
dtinth committed May 10, 2016
1 parent 2d51260 commit 9c281ea
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 22 deletions.
5 changes: 0 additions & 5 deletions lib/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,6 @@ var normalizeConfig = function (config, configFilePath) {
config.autoWatch = false
}

if (!config.singleRun && config.browserDisconnectTolerance) {
log.debug('browserDisconnectTolerance set to 0, because of singleRun')
config.browserDisconnectTolerance = 0
}

if (helper.isString(config.reporters)) {
config.reporters = config.reporters.split(',')
}
Expand Down
42 changes: 25 additions & 17 deletions lib/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -292,26 +292,34 @@ Server.prototype._start = function (config, launcher, preprocess, fileList, webS
}
}

if (config.singleRun) {
self.on('browser_complete', function (completedBrowser) {
if (completedBrowser.lastResult.disconnected &&
completedBrowser.disconnectsCount <= config.browserDisconnectTolerance) {
self.log.info('Restarting %s (%d of %d attempts)', completedBrowser.name,
completedBrowser.disconnectsCount, config.browserDisconnectTolerance)
if (!launcher.restart(completedBrowser.id)) {
singleRunDoneBrowsers[completedBrowser.id] = true
emitRunCompleteIfAllBrowsersDone()
}
} else {
singleRunDoneBrowsers[completedBrowser.id] = true
self.on('browser_complete', function (completedBrowser) {
if (completedBrowser.lastResult.disconnected &&
completedBrowser.disconnectsCount <= config.browserDisconnectTolerance) {
self.log.info('Restarting %s (%d of %d attempts)', completedBrowser.name,
completedBrowser.disconnectsCount, config.browserDisconnectTolerance)

if (!launcher.restart(completedBrowser.id)) {
self.emit('browser_restart_failure', completedBrowser)
}
} else {
self.emit('browser_complete_with_no_more_retries', completedBrowser)
}
})

if (launcher.kill(completedBrowser.id)) {
// workaround to supress "disconnect" warning
completedBrowser.state = Browser.STATE_DISCONNECTED
}
if (config.singleRun) {
self.on('browser_restart_failure', function (completedBrowser) {
singleRunDoneBrowsers[completedBrowser.id] = true
emitRunCompleteIfAllBrowsersDone()
})
self.on('browser_complete_with_no_more_retries', function (completedBrowser) {
singleRunDoneBrowsers[completedBrowser.id] = true

emitRunCompleteIfAllBrowsersDone()
if (launcher.kill(completedBrowser.id)) {
// workaround to supress "disconnect" warning
completedBrowser.state = Browser.STATE_DISCONNECTED
}

emitRunCompleteIfAllBrowsersDone()
})

self.on('browser_process_failure', function (browserLauncher) {
Expand Down

0 comments on commit 9c281ea

Please sign in to comment.