From fb42a3e14d3e4ab121f9047180bb343628fdd033 Mon Sep 17 00:00:00 2001 From: Nodari Chkuaselidze Date: Mon, 27 Jan 2025 17:20:42 +0400 Subject: [PATCH] urkel: expose disk urkel. --- lib/index.js | 11 +++++++-- lib/{memory.js => urkel.js} | 2 +- test/urkel-test.js | 45 ++++++++++++++++++++++++++----------- test/util/common.js | 3 +++ 4 files changed, 45 insertions(+), 16 deletions(-) rename lib/{memory.js => urkel.js} (99%) diff --git a/lib/index.js b/lib/index.js index 8fd3db0..c398d2d 100644 --- a/lib/index.js +++ b/lib/index.js @@ -23,17 +23,24 @@ const defineGet = (name, get) => { }; definePath('_disk', './tree'); -definePath('_memory', './memory'); +definePath('_urkel', './urkel'); +definePath('_memory', './urkel'); definePath('BLAKE2b', './blake2b'); defineGet('Tree', () => nurkel._disk.Tree); defineGet('MemTree', () => nurkel._memory.Tree); -defineGet('UrkelTree', () => nurkel._memory.Tree); +defineGet('UrkelTree', () => nurkel._urkel.Tree); nurkel.create = (options) => { if (options.memory) return new nurkel.MemTree(); + if (options.urkel) { + return new nurkel.UrkelTree({ + prefix: options.prefix + }); + } + return new nurkel.Tree({ prefix: options.prefix }); diff --git a/lib/memory.js b/lib/urkel.js similarity index 99% rename from lib/memory.js rename to lib/urkel.js index 22b4018..6f0d83f 100644 --- a/lib/memory.js +++ b/lib/urkel.js @@ -1,5 +1,5 @@ /** - * memory.js - urkel wrapper in nurkel fashion. + * urkel.js - urkel wrapper in nurkel fashion. * Copyright (c) 2022, Nodari Chkuaselidze (MIT License) * https://github.com/nodech/nurkel */ diff --git a/test/urkel-test.js b/test/urkel-test.js index ae0d193..7e42995 100644 --- a/test/urkel-test.js +++ b/test/urkel-test.js @@ -31,26 +31,41 @@ function random(min, max) { return Math.floor(Math.random() * (max - min)) + min; } -for (const memory of [false, true]) { -describe(`Urkel (${memory ? 'MemTree' : 'Tree'})`, function() { +const treeCreateOptions = { + 'nurkel': {}, + // use legacy tree + 'urkel': { + urkel: true + }, + // legacy tree as in memory tree + 'memory': { + memory: true + } +}; + +for (const [name, treeTestOptions] of Object.entries(treeCreateOptions)) { +describe(`Urkel (${name})`, function() { this.timeout(20000); - const Tree = memory ? nurkel.MemTree : nurkel.Tree; - let prefix, tree; + const Tree = name === 'nurkel' ? nurkel.Tree : nurkel.UrkelTree; + + let prefix, prefix2; beforeEach(async () => { prefix = testdir('tree'); - if (!memory) - fs.mkdirSync(prefix); + prefix2 = testdir('tree2'); }); afterEach(async () => { - if (!memory && isTreeDir(prefix)) + if (name !== 'memory' && isTreeDir(prefix)) rmTreeDir(prefix); + + if (name !== 'memory' && isTreeDir(prefix2)) + rmTreeDir(prefix2); }); it('should test tree', async () => { - const tree = nurkel.create({ prefix, memory }); + const tree = nurkel.create({ prefix, ...treeTestOptions }); await tree.open(); let batch = tree.batch(); @@ -237,7 +252,7 @@ describe(`Urkel (${memory ? 'MemTree' : 'Tree'})`, function() { it('should test max value size', async () => { const MAX_VALUE = 0x3ff; - const tree = nurkel.create({ prefix, memory }); + const tree = nurkel.create({ prefix, ...treeTestOptions }); await tree.open(); @@ -281,7 +296,7 @@ describe(`Urkel (${memory ? 'MemTree' : 'Tree'})`, function() { }); it('should pummel tree', async () => { - const tree = nurkel.create({ prefix, memory }); + const tree = nurkel.create({ prefix, ...treeTestOptions }); const items = []; const set = new Set(); @@ -477,7 +492,11 @@ describe(`Urkel (${memory ? 'MemTree' : 'Tree'})`, function() { }); it('should test history independence', async () => { - const opts = { prefix, memory }; + const opts1 = { prefix, ...treeTestOptions }; + const opts2 = { + prefix: prefix2, + ...treeTestOptions + }; const items = []; const removed = []; @@ -489,10 +508,10 @@ describe(`Urkel (${memory ? 'MemTree' : 'Tree'})`, function() { items.push([key, value]); } - const tree1 = nurkel.create(opts); + const tree1 = nurkel.create(opts1); await tree1.open(); - const tree2 = nurkel.create(opts); + const tree2 = nurkel.create(opts2); await tree2.open(); let root = null; diff --git a/test/util/common.js b/test/util/common.js index bd6afb7..de8a6b0 100644 --- a/test/util/common.js +++ b/test/util/common.js @@ -26,6 +26,9 @@ common.serializeU32 = (num) => { }; common.isTreeDir = (dir, locked) => { + if (!fs.existsSync(dir)) + return false; + const files = new Set(fs.readdirSync(dir)); if (files.length < 2)