Skip to content

Commit

Permalink
test: add test of savepoints, including no automatic transactions
Browse files Browse the repository at this point in the history
The second tests fails if I comment out the #8423 fix, as expected.
  • Loading branch information
warner authored and mhofman committed Nov 8, 2023
1 parent dd85440 commit 639dccb
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions packages/swing-store/test/test-state.js
Original file line number Diff line number Diff line change
Expand Up @@ -316,3 +316,37 @@ test('close will abort transaction', async t => {
t.is(kvStore.get('key2'), undefined);
t.falsy(kvStore.has('key2'));
});

test('savepoints', async t => {
const [dbDir, cleanup] = await tmpDir('testdb');
t.teardown(cleanup);
const ss1 = initSwingStore(dbDir);
ss1.kernelStorage.startCrank();
ss1.kernelStorage.kvStore.set('key', 'value1');
ss1.kernelStorage.establishCrankSavepoint('sp1');
ss1.kernelStorage.kvStore.set('key', 'value2');
ss1.kernelStorage.establishCrankSavepoint('sp2');
ss1.kernelStorage.kvStore.set('key', 'value3');
ss1.kernelStorage.rollbackCrank('sp1');
ss1.kernelStorage.endCrank();
await ss1.hostStorage.commit();
await ss1.hostStorage.close();

const ss2 = openSwingStore(dbDir);
t.is(ss2.kernelStorage.kvStore.get('key'), 'value1');
});

test('savepoints do not automatically commit', async t => {
const [dbDir, cleanup] = await tmpDir('testdb');
t.teardown(cleanup);
const ss1 = initSwingStore(dbDir);
ss1.kernelStorage.startCrank();
ss1.kernelStorage.establishCrankSavepoint('sp1');
ss1.kernelStorage.kvStore.set('key', 'value1');
// #8423 meant this .endCrank() accidentally did a commit()
ss1.kernelStorage.endCrank();
await ss1.hostStorage.close();

const ss2 = openSwingStore(dbDir);
t.false(ss2.kernelStorage.kvStore.has('key'));
});

0 comments on commit 639dccb

Please sign in to comment.