LockManagerTests.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /* eslint-disable
  2. handle-callback-err,
  3. no-unused-vars,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS102: Remove unnecessary code created because of implicit returns
  10. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  11. */
  12. const sinon = require('sinon')
  13. const chai = require('chai')
  14. chai.should()
  15. const { expect } = chai
  16. const mongojs = require('../../../app/js/mongojs')
  17. const { ObjectId } = mongojs
  18. const Settings = require('settings-sharelatex')
  19. const LockManager = require('../../../app/js/LockManager')
  20. const rclient = require('redis').createClient(Settings.redis.history) // Only works locally for now
  21. const TrackChangesApp = require('./helpers/TrackChangesApp')
  22. describe('Locking document', function () {
  23. before(function (done) {
  24. TrackChangesApp.ensureRunning(done)
  25. return null
  26. })
  27. return describe('when the lock has expired in redis', function () {
  28. before(function (done) {
  29. LockManager.LOCK_TTL = 1 // second
  30. LockManager.runWithLock(
  31. 'doc123',
  32. (releaseA) => {
  33. // we create a lock A and allow it to expire in redis
  34. return setTimeout(
  35. () =>
  36. // now we create a new lock B and try to release A
  37. LockManager.runWithLock(
  38. 'doc123',
  39. (releaseB) => {
  40. return releaseA()
  41. }, // try to release lock A to see if it wipes out lock B
  42. (error) => {}
  43. ),
  44. // we never release lock B so nothing should happen here
  45. 1500
  46. )
  47. }, // enough time to wait until the lock has expired
  48. (error) =>
  49. // we get here after trying to release lock A
  50. done()
  51. )
  52. return null
  53. })
  54. return it('the new lock should not be removed by the expired locker', function (done) {
  55. LockManager.checkLock('doc123', (err, isFree) => {
  56. expect(isFree).to.equal(false)
  57. return done()
  58. })
  59. return null
  60. })
  61. })
  62. })