| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- sinon = require('sinon')
- chai = require('chai')
- should = chai.should()
- modulePath = "../../../../app/js/DispatchManager.js"
- SandboxedModule = require('sandboxed-module')
- describe "DispatchManager", ->
- beforeEach ->
- @DispatchManager = SandboxedModule.require modulePath, requires:
- "./UpdateManager" : @UpdateManager = {}
- "logger-sharelatex": @logger = { log: sinon.stub() }
- "settings-sharelatex": @settings =
- redis:
- web: {}
- "redis-sharelatex": @redis = {}
- @callback = sinon.stub()
- describe "each worker", ->
- beforeEach ->
- @client =
- auth: sinon.stub()
- @redis.createClient = sinon.stub().returns @client
-
- @worker = @DispatchManager.createDispatcher()
-
- it "should create a new redis client", ->
- @redis.createClient.called.should.equal true
-
- describe "_waitForUpdateThenDispatchWorker", ->
- beforeEach ->
- @project_id = "project-id-123"
- @doc_id = "doc-id-123"
- @doc_key = "#{@project_id}:#{@doc_id}"
- @client.blpop = sinon.stub().callsArgWith(2, null, ["pending-updates-list", @doc_key])
- @UpdateManager.processOutstandingUpdatesWithLock = sinon.stub().callsArg(2)
-
- @worker._waitForUpdateThenDispatchWorker @callback
-
- it "should call redis with BLPOP", ->
- @client.blpop
- .calledWith("pending-updates-list", 0)
- .should.equal true
-
- it "should call processOutstandingUpdatesWithLock", ->
- @UpdateManager.processOutstandingUpdatesWithLock
- .calledWith(@project_id, @doc_id)
- .should.equal true
-
- it "should call the callback", ->
- @callback.called.should.equal true
-
- describe "run", ->
- it "should call _waitForUpdateThenDispatchWorker until shutting down", (done) ->
- callCount = 0
- @worker._waitForUpdateThenDispatchWorker = (callback = (error) ->) =>
- callCount++
- if callCount == 3
- @settings.shuttingDown = true
- setTimeout () ->
- callback()
- , 10
- sinon.spy @worker, "_waitForUpdateThenDispatchWorker"
-
-
- @worker.run()
- checkStatus = () =>
- if not @settings.shuttingDown # retry until shutdown
- setTimeout checkStatus, 100
- return
- else
- @worker._waitForUpdateThenDispatchWorker.callCount.should.equal 3
- done()
- checkStatus()
|