LockManagerTests.coffee 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  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. return null
  15. describe "when the lock has expired in redis", ->
  16. before (done) ->
  17. LockManager.LOCK_TTL = 1 # second
  18. LockManager.runWithLock "doc123", (releaseA) =>
  19. # we create a lock A and allow it to expire in redis
  20. setTimeout () ->
  21. # now we create a new lock B and try to release A
  22. LockManager.runWithLock "doc123", (releaseB) =>
  23. releaseA() # try to release lock A to see if it wipes out lock B
  24. , (error) ->
  25. # we never release lock B so nothing should happen here
  26. , 1500 # enough time to wait until the lock has expired
  27. , (error) ->
  28. # we get here after trying to release lock A
  29. done()
  30. return null
  31. it "the new lock should not be removed by the expired locker", (done) ->
  32. LockManager.checkLock "doc123", (err, isFree) ->
  33. expect(isFree).to.equal false
  34. done()
  35. return null