From 41d7d5af49545bd1390d747c26234dc501aeae54 Mon Sep 17 00:00:00 2001 From: Nikita Sivukhin Date: Wed, 12 Nov 2025 16:15:54 +0400 Subject: [PATCH] adjust tests --- Cargo.lock | 1 + .../sync/packages/native/promise.test.ts | 39 ++++++++++++++++++- .../sync/packages/native/promise.ts | 2 +- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 89ece1c11..50f3f8047 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5062,6 +5062,7 @@ dependencies = [ "futures", "genawaiter", "http", + "libc", "prost 0.14.1", "rand 0.9.2", "rand_chacha 0.9.0", diff --git a/bindings/javascript/sync/packages/native/promise.test.ts b/bindings/javascript/sync/packages/native/promise.test.ts index d8e1bba5e..2874152b2 100644 --- a/bindings/javascript/sync/packages/native/promise.test.ts +++ b/bindings/javascript/sync/packages/native/promise.test.ts @@ -13,7 +13,7 @@ function cleanup(path) { try { unlinkSync(`${path}-wal-revert`) } catch (e) { } } -test('partial sync', async () => { +test('partial sync (prefix bootstrap strategy)', async () => { { const db = await connect({ path: ':memory:', @@ -47,6 +47,43 @@ test('partial sync', async () => { expect((await db.stats()).networkReceivedBytes).toBeGreaterThanOrEqual(2000 * 1024); }) +test('partial sync (query bootstrap strategy)', async () => { + { + const db = await connect({ + path: ':memory:', + url: process.env.VITE_TURSO_DB_URL, + longPollTimeoutMs: 100, + }); + await db.exec("CREATE TABLE IF NOT EXISTS partial_keyed(key INTEGER PRIMARY KEY, value BLOB)"); + await db.exec("DELETE FROM partial_keyed"); + await db.exec("INSERT INTO partial_keyed SELECT value, randomblob(1024) FROM generate_series(1, 2000)"); + await db.push(); + await db.close(); + } + + const db = await connect({ + path: ':memory:', + url: process.env.VITE_TURSO_DB_URL, + longPollTimeoutMs: 100, + partialBootstrapStrategy: { kind: 'query', query: 'SELECT * FROM partial_keyed WHERE key = 1000' }, + }); + + // we must sync only few pages + expect((await db.stats()).networkReceivedBytes).toBeLessThanOrEqual(10 * (4096 + 128)); + + // select of one record shouldn't increase amount of received data by a lot + expect(await db.prepare("SELECT length(value) as length FROM partial_keyed LIMIT 1").all()).toEqual([{ length: 1024 }]); + expect((await db.stats()).networkReceivedBytes).toBeLessThanOrEqual(10 * (4096 + 128)); + + await db.prepare("INSERT INTO partial_keyed VALUES (-1, -1)").run(); + const n1 = await db.stats(); + + // same as bootstrap query - we shouldn't bring any more pages + expect(await db.prepare("SELECT length(value) as length FROM partial_keyed WHERE key = 1000").all()).toEqual([{ length: 1024 }]); + const n2 = await db.stats(); + expect(n1.networkReceivedBytes).toEqual(n2.networkReceivedBytes); +}) + test('concurrent-actions-consistency', async () => { { const db = await connect({ diff --git a/bindings/javascript/sync/packages/native/promise.ts b/bindings/javascript/sync/packages/native/promise.ts index aa2d90ac7..c494e6e7c 100644 --- a/bindings/javascript/sync/packages/native/promise.ts +++ b/bindings/javascript/sync/packages/native/promise.ts @@ -57,7 +57,7 @@ class Database extends DatabasePromise { partialBoostrapStrategy = { type: "Prefix", length: opts.partialBootstrapStrategy.length }; break; case "query": - partialBoostrapStrategy = { type: "Query", length: opts.partialBootstrapStrategy.query }; + partialBoostrapStrategy = { type: "Query", query: opts.partialBootstrapStrategy.query }; break; } }