Skip to content

Commit 9b31465

Browse files
committed
update default memory store and add tests
1 parent cbfe8d7 commit 9b31465

File tree

3 files changed

+97
-4
lines changed

3 files changed

+97
-4
lines changed

Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ test-cov:
1717
./node_modules/.bin/_mocha --require build/helper.js --bail \
1818
build/test
1919

20-
2120
test-travis:
2221
rm -rf build coverage && \
2322
babel --plugins='external-helpers' src -d build -s && \

src/memory_store.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,19 @@ module.exports = class MemoryStore {
1212
this.sessions[sid] = val
1313

1414
if (sid in this.timeouts) clearTimeout(this.timeouts[sid])
15-
this.timeouts[sid] = setTimeout(this.destroy.bind(this, sid), ttl)
15+
16+
this.timeouts[sid] = setTimeout(() => {
17+
delete this.sessions[sid]
18+
delete this.timeouts[sid]
19+
}, ttl)
1620
}
1721

1822
destroy(sid) {
19-
delete this.sessions[sid]
20-
delete this.timeouts[sid]
23+
if (sid in this.timeouts) {
24+
delete this.sessions[sid]
25+
26+
clearTimeout(this.timeouts[sid])
27+
delete this.timeouts[sid]
28+
}
2129
}
2230
}

test/memory_store.test.js

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
const MemoryStore = require('../src/memory_store')
2+
const expect = require('chai').expect
3+
4+
describe('default memory store', () => {
5+
let sid
6+
let data
7+
let ttl
8+
9+
beforeEach(() => {
10+
sid = Math.random().toString()
11+
data = {
12+
number: Math.random(),
13+
}
14+
ttl = Math.floor(Math.random() * 300) + 300
15+
})
16+
17+
it('can set a session with ttl', () => {
18+
const store = new MemoryStore()
19+
store.set(sid, data, ttl)
20+
})
21+
22+
it('will get "undefined" for a non-exist session', () => {
23+
const store = new MemoryStore()
24+
expect(store.get(sid)).to.be.equal(undefined)
25+
})
26+
27+
it('can destory a session', () => {
28+
const store = new MemoryStore()
29+
store.destroy(sid)
30+
})
31+
32+
it('can get session data within ttl', (done) => {
33+
const store = new MemoryStore()
34+
store.set(sid, data, ttl)
35+
setTimeout(() => {
36+
expect(store.get(sid)).to.be.deep.equal(data)
37+
done()
38+
}, ttl - 100)
39+
})
40+
41+
it('cannot get session data after ttl', (done) => {
42+
const store = new MemoryStore()
43+
store.set(sid, data, ttl)
44+
setTimeout(() => {
45+
expect(store.get(sid)).to.be.equal(undefined)
46+
done()
47+
}, ttl + 100)
48+
})
49+
50+
it('cannot get session data after destory within ttl', (done) => {
51+
const store = new MemoryStore()
52+
store.set(sid, data, ttl)
53+
store.destroy(sid)
54+
setTimeout(() => {
55+
expect(store.get(sid)).to.be.equal(undefined)
56+
done()
57+
}, ttl - 100)
58+
})
59+
60+
it('can reset session data and update ttl', (done) => {
61+
const store = new MemoryStore()
62+
const newData = {
63+
number: Math.random(),
64+
}
65+
const resetTime = ttl - 200
66+
67+
store.set(sid, data, ttl)
68+
69+
setTimeout(() => {
70+
store.set(sid, newData, ttl)
71+
}, resetTime)
72+
73+
setTimeout(() => {
74+
expect(store.get(sid)).to.be.deep.equal(data)
75+
}, resetTime - 100)
76+
77+
setTimeout(() => {
78+
expect(store.get(sid)).to.be.deep.equal(newData)
79+
}, (resetTime + ttl) - 100)
80+
81+
setTimeout(() => {
82+
expect(store.get(sid)).to.be.equal(undefined)
83+
done()
84+
}, (resetTime + ttl) + 100)
85+
})
86+
})

0 commit comments

Comments
 (0)