mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-23 17:06:16 -04:00
SessionStore: Delete DB record when session expires
This only deletes records known to the current Etherpad instance -- old records from previous runs are not automatically cleaned up.
This commit is contained in:
parent
72cd983f0f
commit
945e6848e2
4 changed files with 91 additions and 29 deletions
|
@ -25,7 +25,10 @@ describe(__filename, function () {
|
|||
});
|
||||
|
||||
afterEach(async function () {
|
||||
if (ss != null && sid != null) await destroy();
|
||||
if (ss != null) {
|
||||
if (sid != null) await destroy();
|
||||
ss.shutdown();
|
||||
}
|
||||
sid = null;
|
||||
ss = null;
|
||||
});
|
||||
|
@ -46,6 +49,9 @@ describe(__filename, function () {
|
|||
const sess = {foo: 'bar', cookie: {expires: new Date(Date.now() + 100)}};
|
||||
await set(sess);
|
||||
assert.equal(JSON.stringify(await db.get(`sessionstorage:${sid}`)), JSON.stringify(sess));
|
||||
await new Promise((resolve) => setTimeout(resolve, 110));
|
||||
// Writing should start a timeout.
|
||||
assert(await db.get(`sessionstorage:${sid}`) == null);
|
||||
});
|
||||
|
||||
it('set of already expired session', async function () {
|
||||
|
@ -54,6 +60,24 @@ describe(__filename, function () {
|
|||
// No record should have been created.
|
||||
assert(await db.get(`sessionstorage:${sid}`) == null);
|
||||
});
|
||||
|
||||
it('switch from non-expiring to expiring', async function () {
|
||||
const sess = {foo: 'bar'};
|
||||
await set(sess);
|
||||
const sess2 = {foo: 'bar', cookie: {expires: new Date(Date.now() + 100)}};
|
||||
await set(sess2);
|
||||
await new Promise((resolve) => setTimeout(resolve, 110));
|
||||
assert(await db.get(`sessionstorage:${sid}`) == null);
|
||||
});
|
||||
|
||||
it('switch from expiring to non-expiring', async function () {
|
||||
const sess = {foo: 'bar', cookie: {expires: new Date(Date.now() + 100)}};
|
||||
await set(sess);
|
||||
const sess2 = {foo: 'bar'};
|
||||
await set(sess2);
|
||||
await new Promise((resolve) => setTimeout(resolve, 110));
|
||||
assert.equal(JSON.stringify(await db.get(`sessionstorage:${sid}`)), JSON.stringify(sess2));
|
||||
});
|
||||
});
|
||||
|
||||
describe('get', function () {
|
||||
|
@ -77,6 +101,9 @@ describe(__filename, function () {
|
|||
const sess = {foo: 'bar', cookie: {expires: new Date(Date.now() + 100)}};
|
||||
await db.set(`sessionstorage:${sid}`, sess);
|
||||
assert.equal(JSON.stringify(await get()), JSON.stringify(sess));
|
||||
await new Promise((resolve) => setTimeout(resolve, 110));
|
||||
// Reading should start a timeout.
|
||||
assert(await db.get(`sessionstorage:${sid}`) == null);
|
||||
});
|
||||
|
||||
it('get of record from previous run (already expired)', async function () {
|
||||
|
@ -99,6 +126,18 @@ describe(__filename, function () {
|
|||
});
|
||||
});
|
||||
|
||||
describe('shutdown', function () {
|
||||
it('shutdown cancels timeouts', async function () {
|
||||
const sess = {foo: 'bar', cookie: {expires: new Date(Date.now() + 100)}};
|
||||
await set(sess);
|
||||
assert.equal(JSON.stringify(await get()), JSON.stringify(sess));
|
||||
ss.shutdown();
|
||||
await new Promise((resolve) => setTimeout(resolve, 110));
|
||||
// The record should not have been automatically purged.
|
||||
assert.equal(JSON.stringify(await db.get(`sessionstorage:${sid}`)), JSON.stringify(sess));
|
||||
});
|
||||
});
|
||||
|
||||
describe('destroy', function () {
|
||||
it('destroy deletes the database record', async function () {
|
||||
const sess = {cookie: {expires: new Date(Date.now() + 100)}};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue