Skip to content

Commit 6d96d8e

Browse files
filipesilvajohnjbarton
authored andcommittedOct 5, 2018
feat(server): Add stop method (#3153)
Fix #3149
1 parent 873e4f9 commit 6d96d8e

File tree

2 files changed

+38
-7
lines changed

2 files changed

+38
-7
lines changed
 

Diff for: ‎lib/server.js

+19-7
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,11 @@ class Server extends KarmaEventEmitter {
263263
}
264264
})
265265

266+
this.on('stop', function (done) {
267+
this.log.debug('Received stop event, exiting.')
268+
return disconnectBrowsers().then(done)
269+
})
270+
266271
if (config.singleRun) {
267272
this.on('browser_restart_failure', (completedBrowser) => {
268273
singleRunDoneBrowsers[completedBrowser.id] = true
@@ -327,14 +332,17 @@ class Server extends KarmaEventEmitter {
327332
done(code || 0)
328333
}
329334

330-
this.emitAsync('exit').then(() => {
331-
socketServer.sockets.removeAllListeners()
332-
socketServer.close()
333-
const closeTimeout = setTimeout(removeAllListeners, webServerCloseTimeout)
335+
return this.emitAsync('exit').then(() => {
336+
return new Promise((resolve, reject) => {
337+
socketServer.sockets.removeAllListeners()
338+
socketServer.close()
339+
const closeTimeout = setTimeout(removeAllListeners, webServerCloseTimeout)
334340

335-
webServer.close(() => {
336-
clearTimeout(closeTimeout)
337-
removeAllListeners()
341+
webServer.close(() => {
342+
clearTimeout(closeTimeout)
343+
removeAllListeners()
344+
resolve()
345+
})
338346
})
339347
})
340348
}
@@ -373,6 +381,10 @@ class Server extends KarmaEventEmitter {
373381
child.unref()
374382
}
375383

384+
stop () {
385+
return this.emitAsync('stop')
386+
}
387+
376388
static start (cliOptions, done) {
377389
console.warn('Deprecated static method to be removed in v3.0')
378390
return new Server(cliOptions, done).start()

Diff for: ‎test/unit/server.spec.js

+19
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,25 @@ describe('server', () => {
152152
})
153153
})
154154

155+
describe('start on watch mode', () => {
156+
var config
157+
beforeEach(() => {
158+
config = { port: 9876, listenAddress: '127.0.0.1', singleRun: false }
159+
sinon.spy(BundleUtils, 'bundleResourceIfNotExist')
160+
sinon.stub(NetUtils, 'bindAvailablePort').resolves(mockBoundServer)
161+
sinon.stub(mockBoundServer, 'address').returns({ port: 9877 })
162+
sinon
163+
.stub(server, 'get')
164+
.withArgs('config').returns(config)
165+
})
166+
167+
it('should exit gracefully', (done) => {
168+
server.start()
169+
.then(() => server.stop())
170+
.then(() => done())
171+
})
172+
})
173+
155174
// ============================================================================
156175
// server._start()
157176
// ============================================================================

0 commit comments

Comments
 (0)
Please sign in to comment.