2022-07-07 08:27:20 -04:00
|
|
|
const { expect } = require('chai')
|
2020-02-19 06:15:37 -05:00
|
|
|
const sinon = require('sinon')
|
2022-07-07 08:27:20 -04:00
|
|
|
const LockManager = require('../../../app/js/LockManager')
|
2020-02-19 06:15:37 -05:00
|
|
|
const Errors = require('../../../app/js/Errors')
|
2020-02-19 06:15:08 -05:00
|
|
|
|
2022-07-07 08:27:20 -04:00
|
|
|
describe('LockManager', function () {
|
2020-08-10 12:01:11 -04:00
|
|
|
beforeEach(function () {
|
2024-01-11 03:13:11 -05:00
|
|
|
this.key = '/local/compile/directory'
|
2022-07-07 08:27:20 -04:00
|
|
|
this.clock = sinon.useFakeTimers()
|
2020-02-19 06:15:37 -05:00
|
|
|
})
|
2020-02-19 06:15:08 -05:00
|
|
|
|
2022-07-07 08:27:20 -04:00
|
|
|
afterEach(function () {
|
|
|
|
this.clock.restore()
|
|
|
|
})
|
2020-02-19 06:15:08 -05:00
|
|
|
|
2022-07-07 08:27:20 -04:00
|
|
|
describe('when the lock is available', function () {
|
2024-01-11 03:13:11 -05:00
|
|
|
it('the lock can be acquired', function () {
|
|
|
|
const lock = LockManager.acquire(this.key)
|
|
|
|
expect(lock).to.exist
|
|
|
|
lock.release()
|
2022-07-07 08:27:20 -04:00
|
|
|
})
|
|
|
|
})
|
2017-09-22 11:19:33 -04:00
|
|
|
|
2022-07-07 08:27:20 -04:00
|
|
|
describe('after the lock is acquired', function () {
|
2024-01-11 03:13:11 -05:00
|
|
|
beforeEach(function () {
|
|
|
|
this.lock = LockManager.acquire(this.key)
|
|
|
|
})
|
|
|
|
|
|
|
|
afterEach(function () {
|
|
|
|
if (this.lock != null) {
|
|
|
|
this.lock.release()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
it("the lock can't be acquired again", function () {
|
|
|
|
expect(() => LockManager.acquire(this.key)).to.throw(
|
|
|
|
Errors.AlreadyCompilingError
|
|
|
|
)
|
2020-02-19 06:15:37 -05:00
|
|
|
})
|
2020-02-19 06:15:08 -05:00
|
|
|
|
2024-01-11 03:13:11 -05:00
|
|
|
it('another lock can be acquired', function () {
|
|
|
|
const lock = LockManager.acquire('another key')
|
|
|
|
expect(lock).to.exist
|
|
|
|
lock.release()
|
2022-07-07 08:27:20 -04:00
|
|
|
})
|
2020-02-19 06:15:08 -05:00
|
|
|
|
2024-01-11 03:13:11 -05:00
|
|
|
it('the lock can be acquired again after an expiry period', function () {
|
|
|
|
// The expiry time is a little bit over 10 minutes. Let's wait 15 minutes.
|
|
|
|
this.clock.tick(15 * 60 * 1000)
|
|
|
|
this.lock = LockManager.acquire(this.key)
|
|
|
|
expect(this.lock).to.exist
|
2022-07-07 08:27:20 -04:00
|
|
|
})
|
2017-09-22 11:19:33 -04:00
|
|
|
|
2024-01-11 03:13:11 -05:00
|
|
|
it('the lock can be acquired again after it was released', function () {
|
2022-07-07 08:27:20 -04:00
|
|
|
this.lock.release()
|
2024-01-11 03:13:11 -05:00
|
|
|
this.lock = LockManager.acquire(this.key)
|
|
|
|
expect(this.lock).to.exist
|
2020-02-19 06:15:37 -05:00
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|