diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/tests/unit/kv_test.ts | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/cli/tests/unit/kv_test.ts b/cli/tests/unit/kv_test.ts index acda9a0e2..de764cf80 100644 --- a/cli/tests/unit/kv_test.ts +++ b/cli/tests/unit/kv_test.ts @@ -1214,6 +1214,28 @@ dbTest("operation size limit", async (db) => { "too many checks (max 10)", ); + const validMutateKeys: Deno.KvKey[] = new Array(1000).fill(0).map(( + _, + i, + ) => ["a", i]); + const invalidMutateKeys: Deno.KvKey[] = new Array(1001).fill(0).map(( + _, + i, + ) => ["a", i]); + + const res4 = await db.atomic() + .check(...lastValidKeys.map((key) => ({ + key, + versionstamp: null, + }))) + .mutate(...validMutateKeys.map((key) => ({ + key, + type: "set", + value: 1, + } satisfies Deno.KvMutation))) + .commit(); + assert(res4); + await assertRejects( async () => { await db.atomic() @@ -1221,7 +1243,7 @@ dbTest("operation size limit", async (db) => { key, versionstamp: null, }))) - .mutate(...firstInvalidKeys.map((key) => ({ + .mutate(...invalidMutateKeys.map((key) => ({ key, type: "set", value: 1, @@ -1229,7 +1251,35 @@ dbTest("operation size limit", async (db) => { .commit(); }, TypeError, - "too many mutations (max 10)", + "too many mutations (max 1000)", + ); +}); + +dbTest("total mutation size limit", async (db) => { + const keys: Deno.KvKey[] = new Array(1000).fill(0).map(( + _, + i, + ) => ["a", i]); + + const atomic = db.atomic(); + for (const key of keys) { + atomic.set(key, "foo"); + } + const res = await atomic.commit(); + assert(res); + + // Use bigger values to trigger "total mutation size too large" error + await assertRejects( + async () => { + const value = new Array(3000).fill("a").join(""); + const atomic = db.atomic(); + for (const key of keys) { + atomic.set(key, value); + } + await atomic.commit(); + }, + TypeError, + "total mutation size too large (max 819200 bytes)", ); }); |