@quereus/store 4.10.0 → 4.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +143 -13
- package/dist/src/common/cached-kv-store.d.ts +16 -0
- package/dist/src/common/cached-kv-store.d.ts.map +1 -1
- package/dist/src/common/cached-kv-store.js +64 -6
- package/dist/src/common/cached-kv-store.js.map +1 -1
- package/dist/src/common/index.d.ts +2 -0
- package/dist/src/common/index.d.ts.map +1 -1
- package/dist/src/common/index.js +4 -0
- package/dist/src/common/index.js.map +1 -1
- package/dist/src/common/key-builder.d.ts +9 -6
- package/dist/src/common/key-builder.d.ts.map +1 -1
- package/dist/src/common/key-builder.js +17 -6
- package/dist/src/common/key-builder.js.map +1 -1
- package/dist/src/common/kv-store.d.ts +142 -4
- package/dist/src/common/kv-store.d.ts.map +1 -1
- package/dist/src/common/kv-store.js +21 -1
- package/dist/src/common/kv-store.js.map +1 -1
- package/dist/src/common/memory-store.d.ts +1 -0
- package/dist/src/common/memory-store.d.ts.map +1 -1
- package/dist/src/common/memory-store.js +16 -1
- package/dist/src/common/memory-store.js.map +1 -1
- package/dist/src/common/paged-iterate.d.ts +42 -0
- package/dist/src/common/paged-iterate.d.ts.map +1 -0
- package/dist/src/common/paged-iterate.js +113 -0
- package/dist/src/common/paged-iterate.js.map +1 -0
- package/dist/src/common/pk-key-resolution.d.ts +17 -4
- package/dist/src/common/pk-key-resolution.d.ts.map +1 -1
- package/dist/src/common/pk-key-resolution.js +23 -8
- package/dist/src/common/pk-key-resolution.js.map +1 -1
- package/dist/src/common/serialization.d.ts +11 -1
- package/dist/src/common/serialization.d.ts.map +1 -1
- package/dist/src/common/serialization.js +114 -31
- package/dist/src/common/serialization.js.map +1 -1
- package/dist/src/common/store-module-access-plan.d.ts +1 -1
- package/dist/src/common/store-module-access-plan.d.ts.map +1 -1
- package/dist/src/common/store-module-access-plan.js +434 -105
- package/dist/src/common/store-module-access-plan.js.map +1 -1
- package/dist/src/common/store-module-alter-column.d.ts.map +1 -1
- package/dist/src/common/store-module-alter-column.js +25 -2
- package/dist/src/common/store-module-alter-column.js.map +1 -1
- package/dist/src/common/store-module-alter.d.ts.map +1 -1
- package/dist/src/common/store-module-alter.js +36 -13
- package/dist/src/common/store-module-alter.js.map +1 -1
- package/dist/src/common/store-module-catalog.d.ts +6 -4
- package/dist/src/common/store-module-catalog.d.ts.map +1 -1
- package/dist/src/common/store-module-catalog.js +8 -6
- package/dist/src/common/store-module-catalog.js.map +1 -1
- package/dist/src/common/store-module-index.d.ts +98 -7
- package/dist/src/common/store-module-index.d.ts.map +1 -1
- package/dist/src/common/store-module-index.js +236 -81
- package/dist/src/common/store-module-index.js.map +1 -1
- package/dist/src/common/store-module.d.ts.map +1 -1
- package/dist/src/common/store-module.js +7 -3
- package/dist/src/common/store-module.js.map +1 -1
- package/dist/src/common/store-table-base.d.ts +30 -0
- package/dist/src/common/store-table-base.d.ts.map +1 -1
- package/dist/src/common/store-table-base.js +71 -12
- package/dist/src/common/store-table-base.js.map +1 -1
- package/dist/src/common/store-table-constraints.js +3 -3
- package/dist/src/common/store-table-constraints.js.map +1 -1
- package/dist/src/common/store-table-scan.d.ts +208 -98
- package/dist/src/common/store-table-scan.d.ts.map +1 -1
- package/dist/src/common/store-table-scan.js +353 -105
- package/dist/src/common/store-table-scan.js.map +1 -1
- package/dist/src/testing/index.d.ts +18 -2
- package/dist/src/testing/index.d.ts.map +1 -1
- package/dist/src/testing/index.js +17 -2
- package/dist/src/testing/index.js.map +1 -1
- package/dist/src/testing/kv-conformance.d.ts +101 -3
- package/dist/src/testing/kv-conformance.d.ts.map +1 -1
- package/dist/src/testing/kv-conformance.js +277 -7
- package/dist/src/testing/kv-conformance.js.map +1 -1
- package/dist/src/testing/kv-lifecycle.d.ts +22 -0
- package/dist/src/testing/kv-lifecycle.d.ts.map +1 -0
- package/dist/src/testing/kv-lifecycle.js +12 -0
- package/dist/src/testing/kv-lifecycle.js.map +1 -0
- package/dist/src/testing/kv-naming-conformance.d.ts +77 -0
- package/dist/src/testing/kv-naming-conformance.d.ts.map +1 -0
- package/dist/src/testing/kv-naming-conformance.js +208 -0
- package/dist/src/testing/kv-naming-conformance.js.map +1 -0
- package/dist/src/testing/kv-reclaim-conformance.d.ts +52 -0
- package/dist/src/testing/kv-reclaim-conformance.d.ts.map +1 -0
- package/dist/src/testing/kv-reclaim-conformance.js +287 -0
- package/dist/src/testing/kv-reclaim-conformance.js.map +1 -0
- package/package.json +5 -5
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* contract (not against any single backend), invoked once per backend. Each backend
|
|
6
6
|
* supplies only a small {@link KVBackend} adapter (how to open / reopen / tear down);
|
|
7
7
|
* this file supplies every assertion. A behavior that drifts on one backend then
|
|
8
|
-
* fails the suite instead of silently diverging across the
|
|
9
|
-
*
|
|
8
|
+
* fails the suite instead of silently diverging across the interchangeable stores
|
|
9
|
+
* (in-memory, LevelDB, IndexedDB, React Native LevelDB, NativeScript SQLite).
|
|
10
10
|
*
|
|
11
11
|
* Deps are deliberately minimal so this file can be compiled into `@quereus/store`'s
|
|
12
12
|
* normal `src` build without dragging a test framework into the shipped package:
|
|
@@ -25,6 +25,122 @@ import assert from 'node:assert/strict';
|
|
|
25
25
|
import { compareBytes } from '../common/bytes.js';
|
|
26
26
|
import { encodeCompositeKey } from '../common/encoding.js';
|
|
27
27
|
import { assertBytes, b, u8 } from './kv-assert.js';
|
|
28
|
+
/**
|
|
29
|
+
* Assert that `store.iterate(options)` reads a BOUNDED amount from backing storage:
|
|
30
|
+
* consume `take` entries, then stop, and check the meter.
|
|
31
|
+
*
|
|
32
|
+
* The allowance is `take + maxReadAhead - 1`: a backend that reads one entry per yield
|
|
33
|
+
* reads exactly `take`, and one that pages reads at most `take` rounded up past a batch
|
|
34
|
+
* boundary. Crucially the allowance does NOT grow with the size of the range, so a
|
|
35
|
+
* backend that materializes the whole range fails however large the range is — which is
|
|
36
|
+
* the property the bounded-iteration tier exists to pin. Passing `take` = the whole range
|
|
37
|
+
* pins the other half of the contract, that total work is linear: a backend paging by
|
|
38
|
+
* `limit`/`offset` reads a bounded FIRST batch but O(n²) overall.
|
|
39
|
+
*
|
|
40
|
+
* Exported standalone so a spec can drive it against a deliberately-buffering store
|
|
41
|
+
* double and prove it rejects (see `bounded-iterate.spec.ts`).
|
|
42
|
+
*
|
|
43
|
+
* @param store - The store under test.
|
|
44
|
+
* @param meter - Read instrumentation for whatever `store` reads from.
|
|
45
|
+
* @param options - Iterate options. The range must hold at least `take` entries.
|
|
46
|
+
* @param take - Entries to consume before stopping. Default 1 (prefix-and-stop).
|
|
47
|
+
*/
|
|
48
|
+
export async function assertBoundedIterate(store, meter, options, take = 1) {
|
|
49
|
+
assert.ok(take >= 1, `assertBoundedIterate: take must be >= 1, got ${take}`);
|
|
50
|
+
const baseline = meter.entriesRead();
|
|
51
|
+
let consumed = 0;
|
|
52
|
+
for await (const _entry of store.iterate(options)) {
|
|
53
|
+
if (++consumed >= take)
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
const read = meter.entriesRead() - baseline;
|
|
57
|
+
// Guards against a vacuous pass: a store that yields nothing reads nothing, and a
|
|
58
|
+
// meter wired to the wrong thing reports zero however the store behaves.
|
|
59
|
+
assert.strictEqual(consumed, take, `expected to consume ${take} entries before stopping, got ${consumed} — the range is too small to measure`);
|
|
60
|
+
assert.ok(read >= 1, 'the read meter counted nothing — it is not wired to what this store reads from');
|
|
61
|
+
const allowed = take + meter.maxReadAhead - 1;
|
|
62
|
+
assert.ok(read <= allowed, `bounded iteration: consuming ${take} entr${take === 1 ? 'y' : 'ies'} read ${read} from backing storage, ` +
|
|
63
|
+
`allowance is ${allowed} (take + maxReadAhead - 1, maxReadAhead=${meter.maxReadAhead})`);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Assert the POSITIONAL half of {@link KVStore.getMany}'s contract: answers by position
|
|
67
|
+
* for an unsorted key list, a miss that stays at its own index, the empty list, a repeated
|
|
68
|
+
* key in independent buffers, and an interleave of already-read and never-read keys.
|
|
69
|
+
*
|
|
70
|
+
* Seeds keys 1..5 itself, so pass a store the caller has NOT seeded.
|
|
71
|
+
*
|
|
72
|
+
* The other half of the contract — K keys cost ONE round trip — is not checked here: it
|
|
73
|
+
* needs a {@link PointReadMeter}, which only a backend's own adapter can supply, so the
|
|
74
|
+
* tier registers it separately.
|
|
75
|
+
*
|
|
76
|
+
* Exported standalone so a spec can drive it against store doubles built to violate the
|
|
77
|
+
* contract and prove it REJECTS (see `batch-point-read.spec.ts`), the same way
|
|
78
|
+
* {@link assertBoundedIterate} is driven against a buffering double.
|
|
79
|
+
*/
|
|
80
|
+
export async function assertBatchPointRead(store) {
|
|
81
|
+
await seed1to5(store);
|
|
82
|
+
await assertPositionalOverUnsortedKeys(store);
|
|
83
|
+
await assertMissKeepsItsPosition(store);
|
|
84
|
+
await assertEmptyKeyList(store);
|
|
85
|
+
await assertDuplicateKeysGetIndependentBuffers(store);
|
|
86
|
+
await assertWarmAndColdKeysInterleave(store);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Deliberately unsorted: a backend that sorts its keys internally, or that fills results
|
|
90
|
+
* in arrival order, must still answer by POSITION.
|
|
91
|
+
*/
|
|
92
|
+
async function assertPositionalOverUnsortedKeys(store) {
|
|
93
|
+
const keys = [b(4), b(1), b(5), b(2)];
|
|
94
|
+
const got = await store.getMany(keys);
|
|
95
|
+
assert.strictEqual(got.length, keys.length, 'getMany must answer one value per key');
|
|
96
|
+
assertBytes(got[0], b(40), 'unsorted key list: position 0');
|
|
97
|
+
assertBytes(got[1], b(10), 'unsorted key list: position 1');
|
|
98
|
+
assertBytes(got[2], b(50), 'unsorted key list: position 2');
|
|
99
|
+
assertBytes(got[3], b(20), 'unsorted key list: position 3');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The miss is in the MIDDLE: a backend that omits absent keys would return a SHORTER array
|
|
103
|
+
* whose tail has slid down one position.
|
|
104
|
+
*/
|
|
105
|
+
async function assertMissKeepsItsPosition(store) {
|
|
106
|
+
const got = await store.getMany([b(1), b(99), b(3)]);
|
|
107
|
+
assert.strictEqual(got.length, 3, 'a miss must not shorten the result');
|
|
108
|
+
assertBytes(got[0], b(10), 'the key before the miss keeps its own position');
|
|
109
|
+
assert.strictEqual(got[1], undefined, 'the absent key reads as undefined');
|
|
110
|
+
assertBytes(got[2], b(30), 'the key after the miss keeps its own position');
|
|
111
|
+
}
|
|
112
|
+
async function assertEmptyKeyList(store) {
|
|
113
|
+
assert.deepStrictEqual(await store.getMany([]), [], 'getMany([]) must resolve to []');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Buffer ownership extends ACROSS positions: one buffer filed at two indices would pass
|
|
117
|
+
* the value checks and fail the scribble.
|
|
118
|
+
*/
|
|
119
|
+
async function assertDuplicateKeysGetIndependentBuffers(store) {
|
|
120
|
+
const got = await store.getMany([b(2), b(3), b(2)]);
|
|
121
|
+
assert.strictEqual(got.length, 3, 'a repeated key must not collapse the result');
|
|
122
|
+
assertBytes(got[0], b(20), 'repeated key: first position');
|
|
123
|
+
assertBytes(got[1], b(30), 'repeated key: the key between the repeats');
|
|
124
|
+
assertBytes(got[2], b(20), 'a repeated key must be answered at every position');
|
|
125
|
+
got[0][0] = 99;
|
|
126
|
+
assertBytes(got[2], b(20), 'the duplicate position must be its own buffer');
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* A cache in front of the store (`CachedKVStore`) serves the warm keys from memory and
|
|
130
|
+
* batches only the cold ones, remembering where each miss belongs. Interleaving hits,
|
|
131
|
+
* misses, and an absent key catches a re-derived mapping.
|
|
132
|
+
*/
|
|
133
|
+
async function assertWarmAndColdKeysInterleave(store) {
|
|
134
|
+
await store.get(b(2));
|
|
135
|
+
await store.get(b(4));
|
|
136
|
+
const got = await store.getMany([b(1), b(4), b(99), b(2), b(5)]);
|
|
137
|
+
assert.strictEqual(got.length, 5, 'a warm/cold mix must answer one value per key');
|
|
138
|
+
assertBytes(got[0], b(10), 'warm/cold mix: cold key at position 0');
|
|
139
|
+
assertBytes(got[1], b(40), 'warm/cold mix: warm key at position 1');
|
|
140
|
+
assert.strictEqual(got[2], undefined, 'warm/cold mix: absent key at position 2');
|
|
141
|
+
assertBytes(got[3], b(20), 'warm/cold mix: warm key at position 3');
|
|
142
|
+
assertBytes(got[4], b(50), 'warm/cold mix: cold key at position 4');
|
|
143
|
+
}
|
|
28
144
|
// ============================================================================
|
|
29
145
|
// Assertion + iteration helpers
|
|
30
146
|
// ============================================================================
|
|
@@ -44,6 +160,10 @@ async function seed1to5(store) {
|
|
|
44
160
|
for (let i = 1; i <= 5; i++)
|
|
45
161
|
await store.put(b(i), b(i * 10));
|
|
46
162
|
}
|
|
163
|
+
/** 2-byte big-endian key for the large-range tiers (0..65535) — byte order matches key order. */
|
|
164
|
+
const enc = (n) => b((n >> 8) & 0xff, n & 0xff);
|
|
165
|
+
/** Inverse of {@link enc}. */
|
|
166
|
+
const dec = (k) => (k[0] << 8) | k[1];
|
|
47
167
|
// ============================================================================
|
|
48
168
|
// Tier 6 golden vector — cross-backend byte-ordering agreement
|
|
49
169
|
// ============================================================================
|
|
@@ -88,8 +208,12 @@ const key1 = (v) => encodeCompositeKey([v]);
|
|
|
88
208
|
*/
|
|
89
209
|
export function runKVStoreConformance(name, makeBackend) {
|
|
90
210
|
// Probe (no open()/teardown() — the factory only builds the adapter object) to
|
|
91
|
-
// learn whether this backend persists across a reopen
|
|
92
|
-
|
|
211
|
+
// learn whether this backend persists across a reopen, and whether it can report
|
|
212
|
+
// what it reads from backing storage.
|
|
213
|
+
const probe = makeBackend();
|
|
214
|
+
const supportsReopen = typeof probe.reopen === 'function';
|
|
215
|
+
const supportsReadMeter = probe.readMeter !== undefined;
|
|
216
|
+
const supportsPointReadMeter = probe.pointReadMeter !== undefined;
|
|
93
217
|
describe(name, () => {
|
|
94
218
|
let backend;
|
|
95
219
|
let store;
|
|
@@ -249,12 +373,13 @@ export function runKVStoreConformance(name, makeBackend) {
|
|
|
249
373
|
// ------------------------------------------------------------------
|
|
250
374
|
describe('tier 3: streaming iteration across a batch boundary', () => {
|
|
251
375
|
const COUNT = 306; // > 256 so iteration crosses at least one IndexedDB page boundary
|
|
252
|
-
const enc = (n) => b((n >> 8) & 0xff, n & 0xff); // 2-byte big-endian
|
|
253
|
-
const dec = (k) => (k[0] << 8) | k[1];
|
|
254
376
|
beforeEach(async () => {
|
|
377
|
+
// Value = key. Values must be UNIQUE across the whole fixture (not `i & 0xff`,
|
|
378
|
+
// which repeats every 256 entries) so the pairing case below can catch a
|
|
379
|
+
// backend that misaligns keys against values by a whole page.
|
|
255
380
|
const batch = store.batch();
|
|
256
381
|
for (let i = 0; i < COUNT; i++)
|
|
257
|
-
batch.put(enc(i),
|
|
382
|
+
batch.put(enc(i), enc(i));
|
|
258
383
|
await batch.write();
|
|
259
384
|
});
|
|
260
385
|
it('streams every entry once, ascending, while awaiting an unrelated get each step', async () => {
|
|
@@ -269,6 +394,36 @@ export function runKVStoreConformance(name, makeBackend) {
|
|
|
269
394
|
for (let i = 0; i < COUNT; i++)
|
|
270
395
|
assert.strictEqual(seen[i], i, `entry ${i}`);
|
|
271
396
|
});
|
|
397
|
+
it('pairs every value with its own key across the batch boundary', async () => {
|
|
398
|
+
// A backend that reads keys and values as two separate bulk requests (IndexedDB's
|
|
399
|
+
// getAllKeys + getAll) could zip them out of step and hand back real-looking rows
|
|
400
|
+
// filed under the wrong keys. Values are unique here, so any misalignment shows.
|
|
401
|
+
let seen = 0;
|
|
402
|
+
for await (const entry of store.iterate()) {
|
|
403
|
+
assert.strictEqual(dec(entry.value), dec(entry.key), `entry ${dec(entry.key)} came back carrying value ${dec(entry.value)}`);
|
|
404
|
+
seen++;
|
|
405
|
+
}
|
|
406
|
+
assert.strictEqual(seen, COUNT);
|
|
407
|
+
});
|
|
408
|
+
it('mutating yielded keys/values mid-iteration does not perturb resumption', async () => {
|
|
409
|
+
// A paged backend derives the next page's resume edge from the last key of this
|
|
410
|
+
// page. If it captures that edge AFTER handing the entry to the consumer, a
|
|
411
|
+
// consumer scribbling on the key moves where the next page starts — skipping or
|
|
412
|
+
// repeating entries. Tier 2 pins the single-page version of the read-buffer
|
|
413
|
+
// contract; this is the version that crosses a page boundary.
|
|
414
|
+
const seen = [];
|
|
415
|
+
for await (const entry of store.iterate()) {
|
|
416
|
+
seen.push(dec(entry.key));
|
|
417
|
+
entry.key.fill(0xff);
|
|
418
|
+
entry.value.fill(0xff);
|
|
419
|
+
}
|
|
420
|
+
assert.strictEqual(seen.length, COUNT, 'every entry must be seen exactly once');
|
|
421
|
+
for (let i = 0; i < COUNT; i++)
|
|
422
|
+
assert.strictEqual(seen[i], i, `entry ${i}`);
|
|
423
|
+
// ...and the scribbles must not have reached the store's own buffers.
|
|
424
|
+
assertBytes(await store.get(enc(0)), enc(0));
|
|
425
|
+
assertBytes(await store.get(enc(COUNT - 1)), enc(COUNT - 1));
|
|
426
|
+
});
|
|
272
427
|
it('honors reverse across the batch boundary', async () => {
|
|
273
428
|
const seen = [];
|
|
274
429
|
for await (const entry of store.iterate({ reverse: true }))
|
|
@@ -431,6 +586,121 @@ export function runKVStoreConformance(name, makeBackend) {
|
|
|
431
586
|
assertBytes(await store.get(key1(5n)), b(2));
|
|
432
587
|
});
|
|
433
588
|
});
|
|
589
|
+
// ------------------------------------------------------------------
|
|
590
|
+
// Tier 7 — bounded iteration (see KVStore.iterate's contract)
|
|
591
|
+
//
|
|
592
|
+
// The unmetered cases run everywhere: they pin that abandoning an iteration
|
|
593
|
+
// releases whatever the backend held. The metered cases need the adapter to
|
|
594
|
+
// supply a ReadMeter, because a KVStore handle cannot see its own reads.
|
|
595
|
+
// ------------------------------------------------------------------
|
|
596
|
+
describe('tier 7: bounded iteration', () => {
|
|
597
|
+
it('breaking out mid-iteration leaves the store usable and closeable', async () => {
|
|
598
|
+
await seed1to5(store);
|
|
599
|
+
let seen = 0;
|
|
600
|
+
for await (const _entry of store.iterate()) {
|
|
601
|
+
seen++;
|
|
602
|
+
break;
|
|
603
|
+
}
|
|
604
|
+
assert.strictEqual(seen, 1);
|
|
605
|
+
// An iterator/transaction left open by the abandoned scan would wedge these.
|
|
606
|
+
assertBytes(await store.get(b(3)), b(30));
|
|
607
|
+
assert.deepStrictEqual(await keysOf(store), [b(1), b(2), b(3), b(4), b(5)]);
|
|
608
|
+
await store.close(); // must resolve, not hang on an unreleased handle
|
|
609
|
+
});
|
|
610
|
+
it('an exception thrown from the loop body propagates and leaves the store usable', async () => {
|
|
611
|
+
await seed1to5(store);
|
|
612
|
+
await assert.rejects(async () => {
|
|
613
|
+
for await (const _entry of store.iterate()) {
|
|
614
|
+
throw new Error('consumer boom');
|
|
615
|
+
}
|
|
616
|
+
}, /consumer boom/);
|
|
617
|
+
assertBytes(await store.get(b(3)), b(30));
|
|
618
|
+
assert.deepStrictEqual(await keysOf(store), [b(1), b(2), b(3), b(4), b(5)]);
|
|
619
|
+
});
|
|
620
|
+
if (supportsReadMeter) {
|
|
621
|
+
describe('metered: reads stay bounded regardless of range size', () => {
|
|
622
|
+
let meter;
|
|
623
|
+
let count;
|
|
624
|
+
beforeEach(async () => {
|
|
625
|
+
meter = backend.readMeter;
|
|
626
|
+
// Big enough that a backend materializing the range blows the allowance
|
|
627
|
+
// by orders of magnitude, whatever its batch size is. Several batches
|
|
628
|
+
// deep, so the full-drain case below actually exercises resumption.
|
|
629
|
+
count = Math.max(3 * meter.maxReadAhead, 512);
|
|
630
|
+
const batch = store.batch();
|
|
631
|
+
for (let i = 0; i < count; i++)
|
|
632
|
+
batch.put(enc(i), b(i & 0xff));
|
|
633
|
+
await batch.write();
|
|
634
|
+
});
|
|
635
|
+
it('an unbounded iterate stopped after one entry reads at most one batch', async () => {
|
|
636
|
+
await assertBoundedIterate(store, meter);
|
|
637
|
+
});
|
|
638
|
+
it('the same holds in reverse', async () => {
|
|
639
|
+
await assertBoundedIterate(store, meter, { reverse: true });
|
|
640
|
+
});
|
|
641
|
+
it('a small limit costs the limit, not the range', async () => {
|
|
642
|
+
// NOTE: on a backend whose batch is much larger than 5 this case adds
|
|
643
|
+
// little over the unbounded one — the allowance is dominated by
|
|
644
|
+
// maxReadAhead, so it cannot tell "pushed the limit down" from "read a
|
|
645
|
+
// whole batch". It is exact for a one-entry-per-yield backend. If a
|
|
646
|
+
// backend ever needs its limit pushdown pinned specifically, assert on
|
|
647
|
+
// a limit LARGER than its batch instead of adding slack here.
|
|
648
|
+
await assertBoundedIterate(store, meter, { limit: 5 }, 5);
|
|
649
|
+
});
|
|
650
|
+
it('draining the whole range costs about one read per entry', async () => {
|
|
651
|
+
// Prefix cases above cannot see a backend that pages by re-reading from
|
|
652
|
+
// the start and discarding a growing prefix (`limit`/`offset` paging):
|
|
653
|
+
// its FIRST batch is bounded, and only the total goes quadratic.
|
|
654
|
+
await assertBoundedIterate(store, meter, undefined, count);
|
|
655
|
+
});
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
});
|
|
659
|
+
// ------------------------------------------------------------------
|
|
660
|
+
// Tier 8 — batch point-read (see KVStore.getMany's contract)
|
|
661
|
+
//
|
|
662
|
+
// The correctness cases run everywhere: positional results, misses in place,
|
|
663
|
+
// independent buffers — see `assertBatchPointRead`. The round-trip case needs the
|
|
664
|
+
// adapter to supply a PointReadMeter, because a KVStore handle cannot see its own
|
|
665
|
+
// round trips.
|
|
666
|
+
// ------------------------------------------------------------------
|
|
667
|
+
describe('tier 8: batch point-read', () => {
|
|
668
|
+
it('answers positionally: unsorted keys, misses in place, duplicates, empty list', async () => {
|
|
669
|
+
// Every assertion lives in the exported helper, which `batch-point-read.spec.ts`
|
|
670
|
+
// drives against deliberately-wrong doubles to prove these cases bite.
|
|
671
|
+
await assertBatchPointRead(store);
|
|
672
|
+
});
|
|
673
|
+
it('mutating a returned value does not corrupt the store', async () => {
|
|
674
|
+
// Same read-buffer contract tier 1 pins for `get`.
|
|
675
|
+
await seed1to5(store);
|
|
676
|
+
const got = await store.getMany([b(1)]);
|
|
677
|
+
got[0][0] = 99;
|
|
678
|
+
assertBytes(await store.get(b(1)), b(10), 'a later get must be unaffected');
|
|
679
|
+
assertBytes((await store.getMany([b(1)]))[0], b(10), 'a later getMany must be unaffected');
|
|
680
|
+
});
|
|
681
|
+
it('getMany rejects after close()', async () => {
|
|
682
|
+
await store.close();
|
|
683
|
+
await assert.rejects(() => store.getMany([b(1)]), /closed/i);
|
|
684
|
+
});
|
|
685
|
+
if (supportsPointReadMeter) {
|
|
686
|
+
it('costs exactly ONE round trip to backing storage, whatever K is', async () => {
|
|
687
|
+
const meter = backend.pointReadMeter;
|
|
688
|
+
await seed1to5(store);
|
|
689
|
+
// Guard against a vacuous pass: a meter wired to the wrong thing reports
|
|
690
|
+
// zero however the store behaves, so prove one `get` moves it first.
|
|
691
|
+
const beforeGet = meter.roundTrips();
|
|
692
|
+
await store.get(b(1));
|
|
693
|
+
assert.ok(meter.roundTrips() - beforeGet >= 1, 'the point-read meter counted nothing for a single get() — it is not wired to what this store reads from');
|
|
694
|
+
const baseline = meter.roundTrips();
|
|
695
|
+
const keys = [b(4), b(1), b(5), b(2), b(99)];
|
|
696
|
+
const got = await store.getMany(keys);
|
|
697
|
+
const trips = meter.roundTrips() - baseline;
|
|
698
|
+
assert.strictEqual(got.length, keys.length);
|
|
699
|
+
assert.strictEqual(trips, 1, `getMany over ${keys.length} keys took ${trips} round trips to backing storage, expected exactly 1 ` +
|
|
700
|
+
'(a backend that fell back to one get per key takes one per key)');
|
|
701
|
+
});
|
|
702
|
+
}
|
|
703
|
+
});
|
|
434
704
|
});
|
|
435
705
|
}
|
|
436
706
|
//# sourceMappingURL=kv-conformance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kv-conformance.js","sourceRoot":"","sources":["../../../src/testing/kv-conformance.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kv-conformance.js","sourceRoot":"","sources":["../../../src/testing/kv-conformance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The per-backend lifecycle adapter shared by every PROVIDER-level battery.
|
|
3
|
+
*
|
|
4
|
+
* The batteries that assert a {@link KVStoreProvider} property (rather than a
|
|
5
|
+
* {@link KVStore} one) all need exactly the same two things from a backend: how to open a
|
|
6
|
+
* provider over an empty keyspace, and how to release whatever that created. Declaring the
|
|
7
|
+
* pair once means a plugin's adapters stay interchangeable — one closure can be handed to
|
|
8
|
+
* every such battery — and a battery added later inherits the shape instead of inventing a
|
|
9
|
+
* third copy of it.
|
|
10
|
+
*/
|
|
11
|
+
import type { KVStoreProvider } from '../common/kv-store.js';
|
|
12
|
+
/**
|
|
13
|
+
* Per-backend lifecycle adapter. Each battery drives its own per-test lifecycle and calls
|
|
14
|
+
* the factory fresh for every test, so state never leaks between tests.
|
|
15
|
+
*/
|
|
16
|
+
export interface KVProviderLifecycle {
|
|
17
|
+
/** Open a provider over a fresh, EMPTY physical keyspace. Called once per test. */
|
|
18
|
+
open(): Promise<KVStoreProvider>;
|
|
19
|
+
/** Release everything open() created (close the provider, rm dirs / delete dbs). */
|
|
20
|
+
teardown(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=kv-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/testing/kv-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IACnC,mFAAmF;IACnF,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACjC,oFAAoF;IACpF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The per-backend lifecycle adapter shared by every PROVIDER-level battery.
|
|
3
|
+
*
|
|
4
|
+
* The batteries that assert a {@link KVStoreProvider} property (rather than a
|
|
5
|
+
* {@link KVStore} one) all need exactly the same two things from a backend: how to open a
|
|
6
|
+
* provider over an empty keyspace, and how to release whatever that created. Declaring the
|
|
7
|
+
* pair once means a plugin's adapters stay interchangeable — one closure can be handed to
|
|
8
|
+
* every such battery — and a battery added later inherits the shape instead of inventing a
|
|
9
|
+
* third copy of it.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=kv-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv-lifecycle.js","sourceRoot":"","sources":["../../../src/testing/kv-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared physical-store-name distinctness battery — test-support; run under Mocha.
|
|
3
|
+
*
|
|
4
|
+
* Third sibling of {@link runKVStoreConformance} (the {@link KVStore} contract) and
|
|
5
|
+
* {@link runKVProviderConformance} (the atomic multi-store commit). This one asserts a
|
|
6
|
+
* single PROVIDER-level property that every backend must hold:
|
|
7
|
+
*
|
|
8
|
+
* Two logical stores the engine considers distinct never share one physical store.
|
|
9
|
+
*
|
|
10
|
+
* Why it exists as a shared battery rather than a per-plugin test: the engine's only
|
|
11
|
+
* collision guard, `StoreModule.assertStoreNameFree`, compares LOGICAL store names
|
|
12
|
+
* (`{schema}.{table}` from `buildDataStoreName`) as plain JS strings. That guard stands
|
|
13
|
+
* in for a physical collision check only while each provider's translation from the
|
|
14
|
+
* logical name to its own native name (a LevelDB sublevel, an IndexedDB object store, a
|
|
15
|
+
* SQLite table, an on-device LevelDB file) is INJECTIVE — two different logical names can
|
|
16
|
+
* never come out the same. A provider that lowercases, strips punctuation, or otherwise
|
|
17
|
+
* folds characters breaks that silently: two `create table`s both succeed and their rows
|
|
18
|
+
* then interleave in one physical store. Nothing in the type system prevents the next
|
|
19
|
+
* provider from reintroducing it, so the property is pinned behaviorally here.
|
|
20
|
+
*
|
|
21
|
+
* The battery needs nothing beyond the public {@link KVStoreProvider} surface, so it runs
|
|
22
|
+
* for every backend: it writes a distinct marker into each store under ONE shared key and
|
|
23
|
+
* checks each store still reads back its own marker. Two entries sharing a physical store
|
|
24
|
+
* show up as one marker having overwritten another.
|
|
25
|
+
*
|
|
26
|
+
* A provider MAY reject a name its native namespace cannot represent — a throw from
|
|
27
|
+
* `getStore`/`getIndexStore` passes that entry, and the rejected entries are reported so
|
|
28
|
+
* the corpus cannot silently shrink to nothing. Silently folding two names onto one store
|
|
29
|
+
* never passes. Entries marked {@link StoreSpec.mustAccept} (logical names using only
|
|
30
|
+
* `[a-z0-9_.]`, which any KV namespace can represent) may not be rejected at all.
|
|
31
|
+
*
|
|
32
|
+
* Dependency and Mocha-global handling mirror kv-conformance.ts — see its header.
|
|
33
|
+
*
|
|
34
|
+
* NOTE: this asserts distinctness, not decodability. An injective encoding is what the
|
|
35
|
+
* property needs; nothing here requires a provider to be able to recover the logical name
|
|
36
|
+
* from the physical one, and no shipped provider does.
|
|
37
|
+
*
|
|
38
|
+
* NOTE: the marker check reads back through the very handles it wrote through, so a
|
|
39
|
+
* provider that (a) caches one read-your-own-writes handle PER LOGICAL NAME — as
|
|
40
|
+
* `IndexedDBProvider` does, wrapping each store in `CachedKVStore` — and (b) folds two
|
|
41
|
+
* logical names onto one physical store BELOW that cache would serve each marker from its
|
|
42
|
+
* own cache and pass. No shipped provider does both: the only caching provider names its
|
|
43
|
+
* object stores verbatim, so its folding (if any) would happen at the cache key and be
|
|
44
|
+
* caught. If a provider ever gains a lossy escape underneath a per-name cache, re-read the
|
|
45
|
+
* markers through handles reopened after `closeStore`/`closeIndexStore` instead.
|
|
46
|
+
*/
|
|
47
|
+
import type { KVStoreProvider } from '../common/kv-store.js';
|
|
48
|
+
import type { KVProviderLifecycle } from './kv-lifecycle.js';
|
|
49
|
+
/**
|
|
50
|
+
* Per-backend lifecycle adapter — the shared provider-battery shape, so a plugin's spec can
|
|
51
|
+
* hand one closure to this battery and to {@link runStoreReclaimConformance} alike. The
|
|
52
|
+
* suite drives its own per-test lifecycle and calls {@link makeNamingBackend} fresh for
|
|
53
|
+
* every test, so state never leaks between tests.
|
|
54
|
+
*/
|
|
55
|
+
export type KVNamingBackend = KVProviderLifecycle;
|
|
56
|
+
/**
|
|
57
|
+
* Assert `provider` gives every logical store in {@link DISTINCT_STORES} its OWN physical
|
|
58
|
+
* store: write one marker per store under a single shared key, then check each store still
|
|
59
|
+
* reads back its own. A shared physical store shows up as one marker having replaced
|
|
60
|
+
* another.
|
|
61
|
+
*
|
|
62
|
+
* Exported standalone (like {@link assertBoundedIterate}) so a spec can drive it against a
|
|
63
|
+
* provider double built to violate the property and prove it rejects — a guard nobody has
|
|
64
|
+
* watched fail is not a guard. See `test/store-name-distinctness.spec.ts`.
|
|
65
|
+
*
|
|
66
|
+
* @param provider - A provider over a fresh, EMPTY physical keyspace.
|
|
67
|
+
* @param report - Where to record names the provider refused. Refusal is allowed (a
|
|
68
|
+
* namespace that genuinely cannot represent a name must reject it rather than fold it),
|
|
69
|
+
* but never silently: the battery logs whatever lands here.
|
|
70
|
+
*/
|
|
71
|
+
export declare function assertStoreNamesDistinct(provider: KVStoreProvider, report?: string[]): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Register the store-name distinctness battery under `describe(name)`. Call once per
|
|
74
|
+
* backend, from the same spec file that registers {@link runKVStoreConformance}.
|
|
75
|
+
*/
|
|
76
|
+
export declare function runStoreNameDistinctness(name: string, makeNamingBackend: () => KVNamingBackend): void;
|
|
77
|
+
//# sourceMappingURL=kv-naming-conformance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv-naming-conformance.d.ts","sourceRoot":"","sources":["../../../src/testing/kv-naming-conformance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAGH,OAAO,KAAK,EAAW,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAU7D;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAgFlD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC7C,QAAQ,EAAE,eAAe,EACzB,MAAM,GAAE,MAAM,EAAO,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,GAAG,IAAI,CAoFrG"}
|