LockManagerTests.coffee 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. sinon = require "sinon"
  2. chai = require("chai")
  3. chai.should()
  4. expect = chai.expect
  5. mongojs = require "../../../app/js/mongojs"
  6. ObjectId = mongojs.ObjectId
  7. Settings = require "settings-sharelatex"
  8. LockManager = require "../../../app/js/LockManager"
  9. rclient = require("redis").createClient(Settings.redis.history) # Only works locally for now
  10. TrackChangesApp = require "./helpers/TrackChangesApp"
  11. describe "Locking document", ->
  12. before (done)->
  13. TrackChangesApp.ensureRunning done
  14. describe "when the lock has expired in redis", ->
  15. before (done) ->
  16. LockManager.LOCK_TTL = 1 # second
  17. LockManager.runWithLock "doc123", (releaseA) =>
  18. # we create a lock A and allow it to expire in redis
  19. setTimeout () ->
  20. # now we create a new lock B and try to release A
  21. LockManager.runWithLock "doc123", (releaseB) =>
  22. releaseA() # try to release lock A to see if it wipes out lock B
  23. , (error) ->
  24. # we never release lock B so nothing should happen here
  25. , 1500 # enough time to wait until the lock has expired
  26. , (error) ->
  27. # we get here after trying to release lock A
  28. done()
  29. it "the new lock should not be removed by the expired locker", (done) ->
  30. LockManager.checkLock "doc123", (err, isFree) ->
  31. expect(isFree).to.equal false
  32. done()