|
|
@@ -0,0 +1,64 @@
|
|
|
+should = require('chai').should()
|
|
|
+sinon = require "sinon"
|
|
|
+SandboxedModule = require('sandboxed-module')
|
|
|
+path = require "path"
|
|
|
+modulePath = path.join __dirname, "../../../app/js/DrainManager"
|
|
|
+
|
|
|
+describe "DrainManager", ->
|
|
|
+ beforeEach ->
|
|
|
+ @DrainManager = SandboxedModule.require modulePath, requires:
|
|
|
+ "logger-sharelatex": @logger = log: sinon.stub()
|
|
|
+ @io =
|
|
|
+ sockets:
|
|
|
+ clients: sinon.stub()
|
|
|
+
|
|
|
+ describe "reconnectNClients", ->
|
|
|
+ beforeEach ->
|
|
|
+ @clients = []
|
|
|
+ for i in [0..9]
|
|
|
+ @clients[i] = {
|
|
|
+ id: i
|
|
|
+ emit: sinon.stub()
|
|
|
+ }
|
|
|
+ @io.sockets.clients.returns @clients
|
|
|
+
|
|
|
+ describe "after first pass", ->
|
|
|
+ beforeEach ->
|
|
|
+ @DrainManager.reconnectNClients(@io, 3)
|
|
|
+
|
|
|
+ it "should reconnect the first 3 clients", ->
|
|
|
+ for i in [0..2]
|
|
|
+ @clients[i].emit.calledWith("reconnectGracefully").should.equal true
|
|
|
+
|
|
|
+ it "should not reconnect any more clients", ->
|
|
|
+ for i in [3..9]
|
|
|
+ @clients[i].emit.calledWith("reconnectGracefully").should.equal false
|
|
|
+
|
|
|
+ describe "after second pass", ->
|
|
|
+ beforeEach ->
|
|
|
+ @DrainManager.reconnectNClients(@io, 3)
|
|
|
+
|
|
|
+ it "should reconnect the next 3 clients", ->
|
|
|
+ for i in [3..5]
|
|
|
+ @clients[i].emit.calledWith("reconnectGracefully").should.equal true
|
|
|
+
|
|
|
+ it "should not reconnect any more clients", ->
|
|
|
+ for i in [6..9]
|
|
|
+ @clients[i].emit.calledWith("reconnectGracefully").should.equal false
|
|
|
+
|
|
|
+ it "should not reconnect the first 3 clients again", ->
|
|
|
+ for i in [0..2]
|
|
|
+ @clients[i].emit.calledOnce.should.equal true
|
|
|
+
|
|
|
+ describe "after final pass", ->
|
|
|
+ beforeEach ->
|
|
|
+ @DrainManager.reconnectNClients(@io, 100)
|
|
|
+
|
|
|
+ it "should not reconnect the first 6 clients again", ->
|
|
|
+ for i in [0..5]
|
|
|
+ @clients[i].emit.calledOnce.should.equal true
|
|
|
+
|
|
|
+ it "should log out that it reached the end", ->
|
|
|
+ @logger.log
|
|
|
+ .calledWith("All clients have been told to reconnectGracefully")
|
|
|
+ .should.equal true
|