Files
iD/test/spec/util/session_mutex.js
2013-10-10 14:59:48 -07:00

95 lines
2.5 KiB
JavaScript

describe("iD.util.SessionMutex", function() {
var clock, a, b;
beforeEach(function () {
clock = sinon.useFakeTimers(Date.now());
});
afterEach(function() {
clock.restore();
if (a) a.unlock();
if (b) b.unlock();
});
describe("#lock", function() {
it("returns true when it gets a lock", function() {
a = iD.util.SessionMutex('name');
expect(a.lock()).to.equal(true);
});
it("returns true when already locked", function() {
a = iD.util.SessionMutex('name');
a.lock();
expect(a.lock()).to.equal(true);
});
it("returns false when the lock is held by another session", function() {
a = iD.util.SessionMutex('name');
a.lock();
b = iD.util.SessionMutex('name');
expect(b.lock()).to.equal(false);
});
});
describe("#locked", function() {
it("returns false by default", function() {
a = iD.util.SessionMutex('name');
expect(a.locked()).to.equal(false);
});
it("returns true when locked", function() {
a = iD.util.SessionMutex('name');
a.lock();
expect(a.locked()).to.equal(true);
});
it("returns false when unlocked", function() {
a = iD.util.SessionMutex('name');
a.lock();
a.unlock();
expect(a.locked()).to.equal(false);
});
});
describe("#unlock", function() {
it("unlocks the mutex", function() {
a = iD.util.SessionMutex('name');
a.lock();
a.unlock();
b = iD.util.SessionMutex('name');
expect(b.lock()).to.equal(true);
});
it("does nothing when the lock is held by another session", function() {
a = iD.util.SessionMutex('name');
a.lock();
b = iD.util.SessionMutex('name');
b.unlock();
expect(a.locked()).to.equal(true);
});
it("does nothing when not locked", function() {
a = iD.util.SessionMutex('name');
a.unlock();
expect(a.locked()).to.equal(false);
});
});
it("namespaces locks", function() {
a = iD.util.SessionMutex('a');
a.lock();
b = iD.util.SessionMutex('b');
expect(b.locked()).to.equal(false);
expect(b.lock()).to.equal(true);
});
it("automatically unlocks when a session crashes", function() {
// Tested manually.
});
});