diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/build.rs | 2 | ||||
-rw-r--r-- | cli/tests/unit/kv_test.ts | 351 |
2 files changed, 169 insertions, 184 deletions
diff --git a/cli/build.rs b/cli/build.rs index f01c006be..e6b9dc0a4 100644 --- a/cli/build.rs +++ b/cli/build.rs @@ -381,7 +381,7 @@ fn create_cli_snapshot(snapshot_path: PathBuf) -> CreateSnapshotOutput { deno_net::deno_net::init_ops::<PermissionsContainer>(None, None), deno_tls::deno_tls::init_ops(), deno_kv::deno_kv::init_ops(SqliteDbHandler::<PermissionsContainer>::new( - None, + None, None, )), deno_napi::deno_napi::init_ops::<PermissionsContainer>(), deno_http::deno_http::init_ops::<DefaultHttpPropertyExtractor>(), diff --git a/cli/tests/unit/kv_test.ts b/cli/tests/unit/kv_test.ts index 7cb8ebccf..4e3ce5385 100644 --- a/cli/tests/unit/kv_test.ts +++ b/cli/tests/unit/kv_test.ts @@ -55,9 +55,7 @@ function dbTest(name: string, fn: (db: Deno.Kv) => Promise<void> | void) { // https://github.com/denoland/deno/issues/18363 ignore: Deno.build.os === "darwin" && isCI, async fn() { - const db: Deno.Kv = await Deno.openKv( - ":memory:", - ); + const db: Deno.Kv = await Deno.openKv(":memory:"); try { await fn(db); } finally { @@ -73,14 +71,14 @@ function queueTest(name: string, fn: (db: Deno.Kv) => Promise<void>) { // https://github.com/denoland/deno/issues/18363 ignore: Deno.build.os === "darwin" && isCI, async fn() { - const db: Deno.Kv = await Deno.openKv( - ":memory:", - ); + const db: Deno.Kv = await Deno.openKv(":memory:"); await fn(db); }, }); } +const ZERO_VERSIONSTAMP = "00000000000000000000"; + dbTest("basic read-write-delete and versionstamps", async (db) => { const result1 = await db.get(["a"]); assertEquals(result1.key, ["a"]); @@ -89,17 +87,19 @@ dbTest("basic read-write-delete and versionstamps", async (db) => { const setRes = await db.set(["a"], "b"); assert(setRes.ok); - assertEquals(setRes.versionstamp, "00000000000000010000"); + assert(setRes.versionstamp > ZERO_VERSIONSTAMP); const result2 = await db.get(["a"]); assertEquals(result2.key, ["a"]); assertEquals(result2.value, "b"); - assertEquals(result2.versionstamp, "00000000000000010000"); + assertEquals(result2.versionstamp, setRes.versionstamp); - await db.set(["a"], "c"); + const setRes2 = await db.set(["a"], "c"); + assert(setRes2.ok); + assert(setRes2.versionstamp > setRes.versionstamp); const result3 = await db.get(["a"]); assertEquals(result3.key, ["a"]); assertEquals(result3.value, "c"); - assertEquals(result3.versionstamp, "00000000000000020000"); + assertEquals(result3.versionstamp, setRes2.versionstamp); await db.delete(["a"]); const result4 = await db.get(["a"]); @@ -230,17 +230,18 @@ dbTest("compare and mutate", async (db) => { await db.set(["t"], "1"); const currentValue = await db.get(["t"]); - assertEquals(currentValue.versionstamp, "00000000000000010000"); + assert(currentValue.versionstamp); + assert(currentValue.versionstamp > ZERO_VERSIONSTAMP); let res = await db.atomic() .check({ key: ["t"], versionstamp: currentValue.versionstamp }) .set(currentValue.key, "2") .commit(); assert(res.ok); - assertEquals(res.versionstamp, "00000000000000020000"); + assert(res.versionstamp > currentValue.versionstamp); const newValue = await db.get(["t"]); - assertEquals(newValue.versionstamp, "00000000000000020000"); + assertEquals(newValue.versionstamp, res.versionstamp); assertEquals(newValue.value, "2"); res = await db.atomic() @@ -250,7 +251,7 @@ dbTest("compare and mutate", async (db) => { assert(!res.ok); const newValue2 = await db.get(["t"]); - assertEquals(newValue2.versionstamp, "00000000000000020000"); + assertEquals(newValue2.versionstamp, newValue.versionstamp); assertEquals(newValue2.value, "2"); }); @@ -260,9 +261,10 @@ dbTest("compare and mutate not exists", async (db) => { .set(["t"], "1") .commit(); assert(res.ok); + assert(res.versionstamp > ZERO_VERSIONSTAMP); const newValue = await db.get(["t"]); - assertEquals(newValue.versionstamp, "00000000000000010000"); + assertEquals(newValue.versionstamp, res.versionstamp); assertEquals(newValue.value, "1"); res = await db.atomic() @@ -303,13 +305,17 @@ dbTest("atomic mutation helper (max)", async (db) => { }); dbTest("compare multiple and mutate", async (db) => { - await db.set(["t1"], "1"); - await db.set(["t2"], "2"); + const setRes1 = await db.set(["t1"], "1"); + const setRes2 = await db.set(["t2"], "2"); + assert(setRes1.ok); + assert(setRes1.versionstamp > ZERO_VERSIONSTAMP); + assert(setRes2.ok); + assert(setRes2.versionstamp > ZERO_VERSIONSTAMP); const currentValue1 = await db.get(["t1"]); - assertEquals(currentValue1.versionstamp, "00000000000000010000"); + assertEquals(currentValue1.versionstamp, setRes1.versionstamp); const currentValue2 = await db.get(["t2"]); - assertEquals(currentValue2.versionstamp, "00000000000000020000"); + assertEquals(currentValue2.versionstamp, setRes2.versionstamp); const res = await db.atomic() .check({ key: ["t1"], versionstamp: currentValue1.versionstamp }) @@ -318,12 +324,13 @@ dbTest("compare multiple and mutate", async (db) => { .set(currentValue2.key, "4") .commit(); assert(res.ok); + assert(res.versionstamp > setRes2.versionstamp); const newValue1 = await db.get(["t1"]); - assertEquals(newValue1.versionstamp, "00000000000000030000"); + assertEquals(newValue1.versionstamp, res.versionstamp); assertEquals(newValue1.value, "3"); const newValue2 = await db.get(["t2"]); - assertEquals(newValue2.versionstamp, "00000000000000030000"); + assertEquals(newValue2.versionstamp, res.versionstamp); assertEquals(newValue2.value, "4"); // just one of the two checks failed @@ -336,10 +343,10 @@ dbTest("compare multiple and mutate", async (db) => { assert(!res2.ok); const newValue3 = await db.get(["t1"]); - assertEquals(newValue3.versionstamp, "00000000000000030000"); + assertEquals(newValue3.versionstamp, res.versionstamp); assertEquals(newValue3.value, "3"); const newValue4 = await db.get(["t2"]); - assertEquals(newValue4.versionstamp, "00000000000000030000"); + assertEquals(newValue4.versionstamp, res.versionstamp); assertEquals(newValue4.value, "4"); }); @@ -635,8 +642,8 @@ async function collect<T>( return entries; } -async function setupData(db: Deno.Kv) { - await db.atomic() +async function setupData(db: Deno.Kv): Promise<string> { + const res = await db.atomic() .set(["a"], -1) .set(["a", "a"], 0) .set(["a", "b"], 1) @@ -646,27 +653,29 @@ async function setupData(db: Deno.Kv) { .set(["b"], 99) .set(["b", "a"], 100) .commit(); + assert(res.ok); + return res.versionstamp; } dbTest("get many", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await db.getMany([["b", "a"], ["a"], ["c"]]); assertEquals(entries, [ - { key: ["b", "a"], value: 100, versionstamp: "00000000000000010000" }, - { key: ["a"], value: -1, versionstamp: "00000000000000010000" }, + { key: ["b", "a"], value: 100, versionstamp }, + { key: ["a"], value: -1, versionstamp }, { key: ["c"], value: null, versionstamp: null }, ]); }); dbTest("list prefix", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect(db.list({ prefix: ["a"] })); assertEquals(entries, [ - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, + { key: ["a", "a"], value: 0, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "e"], value: 4, versionstamp }, ]); }); @@ -680,12 +689,12 @@ dbTest("list prefix empty", async (db) => { }); dbTest("list prefix with start", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect(db.list({ prefix: ["a"], start: ["a", "c"] })); assertEquals(entries, [ - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, + { key: ["a", "c"], value: 2, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "e"], value: 4, versionstamp }, ]); }); @@ -696,11 +705,11 @@ dbTest("list prefix with start empty", async (db) => { }); dbTest("list prefix with end", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect(db.list({ prefix: ["a"], end: ["a", "c"] })); assertEquals(entries, [ - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, + { key: ["a", "a"], value: 0, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, ]); }); @@ -711,35 +720,34 @@ dbTest("list prefix with end empty", async (db) => { }); dbTest("list prefix with empty prefix", async (db) => { - await db.set(["a"], 1); + const res = await db.set(["a"], 1); const entries = await collect(db.list({ prefix: [] })); assertEquals(entries, [ - { key: ["a"], value: 1, versionstamp: "00000000000000010000" }, + { key: ["a"], value: 1, versionstamp: res.versionstamp }, ]); }); dbTest("list prefix reverse", async (db) => { - await setupData(db); - + const versionstamp = await setupData(db); const entries = await collect(db.list({ prefix: ["a"] }, { reverse: true })); assertEquals(entries, [ - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, + { key: ["a", "e"], value: 4, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "a"], value: 0, versionstamp }, ]); }); dbTest("list prefix reverse with start", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ prefix: ["a"], start: ["a", "c"] }, { reverse: true }), ); assertEquals(entries, [ - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, + { key: ["a", "e"], value: 4, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, ]); }); @@ -752,13 +760,13 @@ dbTest("list prefix reverse with start empty", async (db) => { }); dbTest("list prefix reverse with end", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ prefix: ["a"], end: ["a", "c"] }, { reverse: true }), ); assertEquals(entries, [ - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "a"], value: 0, versionstamp }, ]); }); @@ -771,83 +779,82 @@ dbTest("list prefix reverse with end empty", async (db) => { }); dbTest("list prefix limit", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect(db.list({ prefix: ["a"] }, { limit: 2 })); assertEquals(entries, [ - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, + { key: ["a", "a"], value: 0, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, ]); }); dbTest("list prefix limit reverse", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ prefix: ["a"] }, { limit: 2, reverse: true }), ); assertEquals(entries, [ - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, + { key: ["a", "e"], value: 4, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, ]); }); dbTest("list prefix with small batch size", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect(db.list({ prefix: ["a"] }, { batchSize: 2 })); assertEquals(entries, [ - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, + { key: ["a", "a"], value: 0, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "e"], value: 4, versionstamp }, ]); }); dbTest("list prefix with small batch size reverse", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ prefix: ["a"] }, { batchSize: 2, reverse: true }), ); assertEquals(entries, [ - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, + { key: ["a", "e"], value: 4, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "a"], value: 0, versionstamp }, ]); }); dbTest("list prefix with small batch size and limit", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ prefix: ["a"] }, { batchSize: 2, limit: 3 }), ); assertEquals(entries, [ - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, + { key: ["a", "a"], value: 0, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, ]); }); dbTest("list prefix with small batch size and limit reverse", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ prefix: ["a"] }, { batchSize: 2, limit: 3, reverse: true }), ); assertEquals(entries, [ - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, + { key: ["a", "e"], value: 4, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, ]); }); dbTest("list prefix with manual cursor", async (db) => { - await setupData(db); - + const versionstamp = await setupData(db); const iterator = db.list({ prefix: ["a"] }, { limit: 2 }); const values = await collect(iterator); assertEquals(values, [ - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, + { key: ["a", "a"], value: 0, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, ]); const cursor = iterator.cursor; @@ -856,20 +863,20 @@ dbTest("list prefix with manual cursor", async (db) => { const iterator2 = db.list({ prefix: ["a"] }, { cursor }); const values2 = await collect(iterator2); assertEquals(values2, [ - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, + { key: ["a", "c"], value: 2, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "e"], value: 4, versionstamp }, ]); }); dbTest("list prefix with manual cursor reverse", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const iterator = db.list({ prefix: ["a"] }, { limit: 2, reverse: true }); const values = await collect(iterator); assertEquals(values, [ - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, + { key: ["a", "e"], value: 4, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, ]); const cursor = iterator.cursor; @@ -878,57 +885,57 @@ dbTest("list prefix with manual cursor reverse", async (db) => { const iterator2 = db.list({ prefix: ["a"] }, { cursor, reverse: true }); const values2 = await collect(iterator2); assertEquals(values2, [ - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, + { key: ["a", "c"], value: 2, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "a"], value: 0, versionstamp }, ]); }); dbTest("list range", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ start: ["a", "a"], end: ["a", "z"] }), ); assertEquals(entries, [ - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, + { key: ["a", "a"], value: 0, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "e"], value: 4, versionstamp }, ]); }); dbTest("list range reverse", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ start: ["a", "a"], end: ["a", "z"] }, { reverse: true }), ); assertEquals(entries, [ - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, + { key: ["a", "e"], value: 4, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "a"], value: 0, versionstamp }, ]); }); dbTest("list range with limit", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ start: ["a", "a"], end: ["a", "z"] }, { limit: 3 }), ); assertEquals(entries, [ - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, + { key: ["a", "a"], value: 0, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, ]); }); dbTest("list range with limit reverse", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ start: ["a", "a"], end: ["a", "z"] }, { @@ -937,46 +944,46 @@ dbTest("list range with limit reverse", async (db) => { }), ); assertEquals(entries, [ - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, + { key: ["a", "e"], value: 4, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, ]); }); dbTest("list range nesting", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect(db.list({ start: ["a"], end: ["a", "d"] })); assertEquals(entries, [ - { key: ["a"], value: -1, versionstamp: "00000000000000010000" }, - { key: ["a", "a"], value: 0, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, + { key: ["a"], value: -1, versionstamp }, + { key: ["a", "a"], value: 0, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, ]); }); dbTest("list range short", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const entries = await collect( db.list({ start: ["a", "b"], end: ["a", "d"] }), ); assertEquals(entries, [ - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, ]); }); dbTest("list range with manual cursor", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const iterator = db.list({ start: ["a", "b"], end: ["a", "z"] }, { limit: 2, }); const entries = await collect(iterator); assertEquals(entries, [ - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, + { key: ["a", "b"], value: 1, versionstamp }, + { key: ["a", "c"], value: 2, versionstamp }, ]); const cursor = iterator.cursor; @@ -985,13 +992,13 @@ dbTest("list range with manual cursor", async (db) => { }); const entries2 = await collect(iterator2); assertEquals(entries2, [ - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, + { key: ["a", "d"], value: 3, versionstamp }, + { key: ["a", "e"], value: 4, versionstamp }, ]); }); dbTest("list range with manual cursor reverse", async (db) => { - await setupData(db); + const versionstamp = await setupData(db); const iterator = db.list({ start: ["a", "b"], end: ["a", "z"] }, { limit: 2, @@ -999,8 +1006,8 @@ dbTest("list range with manual cursor reverse", async (db) => { }); const entries = await collect(iterator); assertEquals(entries, [ - { key: ["a", "e"], value: 4, versionstamp: "00000000000000010000" }, - { key: ["a", "d"], value: 3, versionstamp: "00000000000000010000" }, + { key: ["a", "e"], value: 4, versionstamp }, + { key: ["a", "d"], value: 3, versionstamp }, ]); const cursor = iterator.cursor; @@ -1010,8 +1017,8 @@ dbTest("list range with manual cursor reverse", async (db) => { }); const entries2 = await collect(iterator2); assertEquals(entries2, [ - { key: ["a", "c"], value: 2, versionstamp: "00000000000000010000" }, - { key: ["a", "b"], value: 1, versionstamp: "00000000000000010000" }, + { key: ["a", "c"], value: 2, versionstamp }, + { key: ["a", "b"], value: 1, versionstamp }, ]); }); @@ -1110,12 +1117,12 @@ dbTest("key size limit", async (db) => { const lastValidKey = new Uint8Array(2046).fill(1); const firstInvalidKey = new Uint8Array(2047).fill(1); - await db.set([lastValidKey], 1); + const res = await db.set([lastValidKey], 1); assertEquals(await db.get([lastValidKey]), { key: [lastValidKey], value: 1, - versionstamp: "00000000000000010000", + versionstamp: res.versionstamp, }); await assertRejects( @@ -1135,11 +1142,11 @@ dbTest("value size limit", async (db) => { const lastValidValue = new Uint8Array(65536); const firstInvalidValue = new Uint8Array(65537); - await db.set(["a"], lastValidValue); + const res = await db.set(["a"], lastValidValue); assertEquals(await db.get(["a"]), { key: ["a"], value: lastValidValue, - versionstamp: "00000000000000010000", + versionstamp: res.versionstamp, }); await assertRejects( @@ -1415,21 +1422,17 @@ for (const { name, value } of VALUE_CASES) { queueTest(`listenQueue and enqueue ${name}`, async (db) => { const numEnqueues = 10; let count = 0; - const promises: Deferred<void>[] = []; - const dequeuedMessages: unknown[] = []; + const promises: Deferred<unknown>[] = []; const listeners: Promise<void>[] = []; - listeners.push(db.listenQueue((msg) => { - dequeuedMessages.push(msg); - promises[count++].resolve(); + listeners.push(db.listenQueue((msg: unknown) => { + promises[count++].resolve(msg); })); try { for (let i = 0; i < numEnqueues; i++) { promises.push(deferred()); await db.enqueue(value); } - for (let i = 0; i < numEnqueues; i++) { - await promises[i]; - } + const dequeuedMessages = await Promise.all(promises); for (let i = 0; i < numEnqueues; i++) { assertEquals(dequeuedMessages[i], value); } @@ -1445,7 +1448,7 @@ for (const { name, value } of VALUE_CASES) { queueTest("queue mixed types", async (db) => { let promise: Deferred<void>; let dequeuedMessage: unknown = null; - const listener = db.listenQueue((msg) => { + const listener = db.listenQueue((msg: unknown) => { dequeuedMessage = msg; promise.resolve(); }); @@ -2066,25 +2069,16 @@ Deno.test({ const db = await Deno.openKv( "http://localhost:4545/kv_remote_authorize_invalid_format", ); - let ok = false; - try { - await db.set(["some-key"], 1); - } catch (e) { - if ( - e.name === "TypeError" && - e.message.startsWith("Metadata error: Failed to decode metadata: ") - ) { - ok = true; - } else { - throw e; - } - } finally { - db.close(); - } - if (!ok) { - throw new Error("did not get expected error"); - } + await assertRejects( + async () => { + await db.set(["some-key"], 1); + }, + Error, + "Failed to parse metadata: ", + ); + + db.close(); }, }); @@ -2094,24 +2088,15 @@ Deno.test({ const db = await Deno.openKv( "http://localhost:4545/kv_remote_authorize_invalid_version", ); - let ok = false; - try { - await db.set(["some-key"], 1); - } catch (e) { - if ( - e.name === "TypeError" && - e.message === "Metadata error: Unsupported metadata version: 2" - ) { - ok = true; - } else { - throw e; - } - } finally { - db.close(); - } - if (!ok) { - throw new Error("did not get expected error"); - } + await assertRejects( + async () => { + await db.set(["some-key"], 1); + }, + Error, + "Failed to parse metadata: unsupported metadata version: 1000", + ); + + db.close(); }, }); |