From c27a58677eed2077a9fd5013ec1e7e7f29b98289 Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Tue, 3 Oct 2023 18:43:57 -0700 Subject: [PATCH] test: add test of savepoints, including no automatic transactions The second tests fails if I comment out the #8423 fix, as expected. --- packages/swing-store/test/test-state.js | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/packages/swing-store/test/test-state.js b/packages/swing-store/test/test-state.js index 02b7f73e8d7..22c857a88b8 100644 --- a/packages/swing-store/test/test-state.js +++ b/packages/swing-store/test/test-state.js @@ -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')); +});