@substrat-run/contract-tests 0.177.0 → 0.178.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.
@@ -1,8 +1,14 @@
1
1
  import { type StoreResponse } from '@substrat-run/contracts';
2
- import type { ScopeStoreAddress, ScopeStoreRunner } from '@substrat-run/kernel';
2
+ import { type ScopeStoreAddress, type ScopeStoreRunner } from '@substrat-run/kernel';
3
3
  export declare const invalidStoreInput: (message: string) => StoreResponse;
4
+ /** A stage the object does not hold, or one it will not take again: 409 `stage_refused` (D-69). */
5
+ export declare const stageRefused: (message: string) => StoreResponse;
4
6
  /** The object an address names: the same string the hosted path signs. */
5
7
  export declare const objectNameOf: (address: ScopeStoreAddress) => string;
8
+ export interface CounterRunnerOptions {
9
+ /** The clock a stage's age is read from, in ms. A test moves it; it defaults to `Date.now`. */
10
+ now?: () => number;
11
+ }
6
12
  /**
7
13
  * The trivial driver (#2213, RFC §7): a counter per address, in the process. The
8
14
  * reference runner both contract suites use, and the one the runner suite holds to
@@ -12,11 +18,24 @@ export declare const objectNameOf: (address: ScopeStoreAddress) => string;
12
18
  * negative). Each increment is kept against the subject it names, so the object holds
13
19
  * personal data the way a real driver does: `substrat.erase` removes that subject's part
14
20
  * and answers `{ erased: 1 }` only if there was one, so a repeat, or a subject that
15
- * never wrote, answers 0. A wipe or an import replaces everything, subjects included.
16
- * `substrat.size` reports the total as `bytes`: a stand-in for storage, never negative.
21
+ * never wrote, answers 0. A wipe or a commit replaces everything, subjects included.
22
+ * `substrat.size` reports the total, and what its stage holds, as `bytes`: a stand-in for
23
+ * storage, never negative.
24
+ *
25
+ * Its dump moves in pages (D-69), one table of rows cut by `maxBytes` with the kernel's own page
26
+ * accounting (UTF-8 bytes, the table heading, always one row), so the contract is shown on a driver
27
+ * written in TypeScript as well as on one in Python. The revision counts every change to what the
28
+ * dump holds: an increment, a commit, a wipe, and an erase that erased something. A stage unused for
29
+ * longer than `STORE_STAGE_MAX_AGE_MS` is dropped no later than the next call to its object, by the
30
+ * injectable clock, so the driver needs no timer. A wipe and an erase drop every stage. A commit
31
+ * answers the count of distinct tables, and asked again for the stage last committed it answers the
32
+ * same count and changes nothing; only a wipe ends that memory, and a stage id that was committed is
33
+ * not taken again. A stage the object does not hold is refused with 409 `stage_refused`. It takes
34
+ * only rows of its `counter` table and refuses any other table or a negative count when they are
35
+ * staged. Its pages have no row limit of their own, so it never refuses a row it gave.
17
36
  *
18
37
  * The objects live on the runner, not in `start`, so a stop and a start serve the same
19
38
  * ones, as a driver's repositories outlive its process.
20
39
  */
21
- export declare function counterScopeStoreRunner(): ScopeStoreRunner;
40
+ export declare function counterScopeStoreRunner(options?: CounterRunnerOptions): ScopeStoreRunner;
22
41
  //# sourceMappingURL=counter-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"counter-runner.d.ts","sourceRoot":"","sources":["../src/counter-runner.ts"],"names":[],"mappings":"AACA,OAAO,EAA2D,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACtH,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAQhF,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,aAElD,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,YAAY,YAAa,iBAAiB,KAAG,MACkC,CAAC;AAK7F;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,IAAI,gBAAgB,CA6D1D"}
1
+ {"version":3,"file":"counter-runner.d.ts","sourceRoot":"","sources":["../src/counter-runner.ts"],"names":[],"mappings":"AACA,OAAO,EAUL,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAkB,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAQrG,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,aAElD,CAAC;AAEH,mGAAmG;AACnG,eAAO,MAAM,YAAY,YAAa,MAAM,KAAG,aAE7C,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,YAAY,YAAa,iBAAiB,KAAG,MACkC,CAAC;AAgB7F,MAAM,WAAW,oBAAoB;IACnC,+FAA+F;IAC/F,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,oBAAyB,GAAG,gBAAgB,CA8H5F"}
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { scopeStoreObjectName, storeEraseInput, storeImportInput } from '@substrat-run/contracts';
2
+ import { scopeStoreObjectName, mergeDumpPages, storeCommitStageInput, storeDiscardStageInput, storeEraseInput, storeExportPageInput, storeStagePageInput, STORE_STAGE_MAX_AGE_MS, } from '@substrat-run/contracts';
3
+ import { storeDumpPages } from '@substrat-run/kernel';
3
4
  const incrementInput = z
4
5
  .object({ by: z.number().int().nonnegative().optional(), subjectId: z.string().min(1).optional() })
5
6
  .optional();
@@ -8,9 +9,21 @@ const counterRow = z.tuple([z.string().min(1).nullable(), z.number().int().nonne
8
9
  export const invalidStoreInput = (message) => ({
9
10
  error: { code: 'validation_failed', status: 400, body: { message } },
10
11
  });
12
+ /** A stage the object does not hold, or one it will not take again: 409 `stage_refused` (D-69). */
13
+ export const stageRefused = (message) => ({
14
+ error: { code: 'stage_refused', status: 409, body: { message } },
15
+ });
11
16
  /** The object an address names: the same string the hosted path signs. */
12
17
  export const objectNameOf = (address) => scopeStoreObjectName(address.tenantId, address.vertical, address.scopeId, address.binding);
18
+ const COUNTER_DDL = 'CREATE TABLE counter (subject TEXT, n INTEGER NOT NULL)';
19
+ const COUNTER_COLUMNS = ['subject', 'n'];
13
20
  const totalOf = (object) => [...(object?.values() ?? [])].reduce((sum, n) => sum + n, 0);
21
+ /** What a stage holds, as the counter measures it: the sum of its rows' counts. */
22
+ const stagedTotalOf = (pages) => pages
23
+ .flat()
24
+ .filter((table) => table.name === 'counter')
25
+ .flatMap((table) => table.rows)
26
+ .reduce((sum, row) => sum + (typeof row[1] === 'number' ? row[1] : 0), 0);
14
27
  /**
15
28
  * The trivial driver (#2213, RFC §7): a counter per address, in the process. The
16
29
  * reference runner both contract suites use, and the one the runner suite holds to
@@ -20,20 +33,42 @@ const totalOf = (object) => [...(object?.values() ?? [])].reduce((sum, n) => sum
20
33
  * negative). Each increment is kept against the subject it names, so the object holds
21
34
  * personal data the way a real driver does: `substrat.erase` removes that subject's part
22
35
  * and answers `{ erased: 1 }` only if there was one, so a repeat, or a subject that
23
- * never wrote, answers 0. A wipe or an import replaces everything, subjects included.
24
- * `substrat.size` reports the total as `bytes`: a stand-in for storage, never negative.
36
+ * never wrote, answers 0. A wipe or a commit replaces everything, subjects included.
37
+ * `substrat.size` reports the total, and what its stage holds, as `bytes`: a stand-in for
38
+ * storage, never negative.
39
+ *
40
+ * Its dump moves in pages (D-69), one table of rows cut by `maxBytes` with the kernel's own page
41
+ * accounting (UTF-8 bytes, the table heading, always one row), so the contract is shown on a driver
42
+ * written in TypeScript as well as on one in Python. The revision counts every change to what the
43
+ * dump holds: an increment, a commit, a wipe, and an erase that erased something. A stage unused for
44
+ * longer than `STORE_STAGE_MAX_AGE_MS` is dropped no later than the next call to its object, by the
45
+ * injectable clock, so the driver needs no timer. A wipe and an erase drop every stage. A commit
46
+ * answers the count of distinct tables, and asked again for the stage last committed it answers the
47
+ * same count and changes nothing; only a wipe ends that memory, and a stage id that was committed is
48
+ * not taken again. A stage the object does not hold is refused with 409 `stage_refused`. It takes
49
+ * only rows of its `counter` table and refuses any other table or a negative count when they are
50
+ * staged. Its pages have no row limit of their own, so it never refuses a row it gave.
25
51
  *
26
52
  * The objects live on the runner, not in `start`, so a stop and a start serve the same
27
53
  * ones, as a driver's repositories outlive its process.
28
54
  */
29
- export function counterScopeStoreRunner() {
55
+ export function counterScopeStoreRunner(options = {}) {
56
+ const now = options.now ?? Date.now;
30
57
  const objects = new Map();
58
+ const revisions = new Map();
59
+ const stages = new Map();
60
+ const committed = new Map();
61
+ const wrote = (id) => revisions.set(id, (revisions.get(id) ?? 0) + 1);
31
62
  return {
32
63
  driver: 'counter',
33
64
  async start() { },
34
65
  async stop() { },
35
66
  async invoke(address, request) {
36
67
  const id = objectNameOf(address);
68
+ // An abandoned stage is dropped by the next call to its object: no timer.
69
+ const held = stages.get(id);
70
+ if (held && now() - held.touchedAt > STORE_STAGE_MAX_AGE_MS)
71
+ stages.delete(id);
37
72
  const object = objects.get(id);
38
73
  switch (request.operation) {
39
74
  case 'read':
@@ -46,38 +81,93 @@ export function counterScopeStoreRunner() {
46
81
  const next = object ?? new Map();
47
82
  next.set(subject, (next.get(subject) ?? 0) + (input.data?.by ?? 1));
48
83
  objects.set(id, next);
84
+ wrote(id);
49
85
  return { result: totalOf(next) };
50
86
  }
51
87
  case 'substrat.size':
52
- return { result: { bytes: totalOf(object) } };
88
+ return { result: { bytes: totalOf(object) + stagedTotalOf(stages.get(id)?.pages ?? []) } };
89
+ case 'substrat.selfcheck':
90
+ return { result: { operations: ['increment', 'read'] } };
53
91
  case 'substrat.wipe':
54
92
  objects.delete(id);
93
+ stages.delete(id);
94
+ committed.delete(id);
95
+ wrote(id);
55
96
  return { result: {} };
56
97
  case 'substrat.erase': {
57
98
  const input = storeEraseInput.safeParse(request.input);
58
99
  if (!input.success)
59
100
  return invalidStoreInput('substrat.erase takes { subjectId }');
60
- return { result: { erased: object?.delete(input.data.subjectId) ? 1 : 0 } };
101
+ const erased = object?.delete(input.data.subjectId) ? 1 : 0;
102
+ // A stage may hold the subject: a restore racing this erase fails at its commit. What was last
103
+ // committed is still committed, so a lost commit answer can be retried across the erase.
104
+ stages.delete(id);
105
+ if (erased)
106
+ wrote(id);
107
+ return { result: { erased } };
61
108
  }
62
- case 'substrat.export':
109
+ case 'substrat.export-page': {
110
+ const input = storeExportPageInput.safeParse(request.input);
111
+ if (!input.success)
112
+ return invalidStoreInput('substrat.export-page takes { cursor, maxBytes }');
113
+ const rows = [...(object ?? [])].map(([subject, n]) => [subject, n]);
114
+ const start = input.data.cursor === null ? 0 : Number(input.data.cursor);
115
+ if (!Number.isInteger(start) || start < 0)
116
+ return invalidStoreInput('substrat.export-page: the cursor is not one this store gave');
117
+ const [first] = storeDumpPages([{ name: 'counter', ddl: COUNTER_DDL, columns: COUNTER_COLUMNS, rows: rows.slice(start) }], input.data.maxBytes);
118
+ const page = first[0];
119
+ const end = start + page.rows.length;
63
120
  return {
64
121
  result: {
65
- tables: [
66
- {
67
- name: 'counter',
68
- ddl: 'CREATE TABLE counter (subject TEXT, n INTEGER NOT NULL)',
69
- columns: ['subject', 'n'],
70
- rows: [...(object ?? [])].map(([subject, n]) => [subject, n]),
71
- },
72
- ],
122
+ tables: [page],
123
+ next: end < rows.length ? String(end) : null,
124
+ revision: String(revisions.get(id) ?? 0),
73
125
  },
74
126
  };
75
- case 'substrat.import': {
76
- const input = storeImportInput.safeParse(request.input);
127
+ }
128
+ case 'substrat.stage-page': {
129
+ const input = storeStagePageInput.safeParse(request.input);
77
130
  if (!input.success)
78
- return invalidStoreInput('substrat.import takes { tables }');
131
+ return invalidStoreInput('substrat.stage-page takes { stageId, seq, tables }');
132
+ const { stageId, seq, tables } = input.data;
133
+ if (committed.get(id)?.stageId === stageId)
134
+ return stageRefused(`stage ${stageId} was committed, and an id is not used again`);
135
+ // Only counter rows come in, so a staged count is never negative and size is never wrong.
136
+ const foreign = tables.find((one) => one.name !== 'counter');
137
+ if (foreign)
138
+ return invalidStoreInput(`a counter store has one table, counter, not ${foreign.name}`);
139
+ if (!z.array(counterRow).safeParse(tables.flatMap((one) => one.rows)).success) {
140
+ return invalidStoreInput('a counter row is [subject or null, a non-negative integer]');
141
+ }
142
+ // Page 0 of a new stage drops any other.
143
+ if (seq === 0 && stages.get(id)?.stageId !== stageId)
144
+ stages.set(id, { stageId, pages: [], touchedAt: now() });
145
+ const stage = stages.get(id);
146
+ if (stage?.stageId !== stageId)
147
+ return stageRefused(`no stage ${stageId} to add page ${seq} to`);
148
+ stage.touchedAt = now();
149
+ if (seq < stage.pages.length)
150
+ return { result: { staged: false } };
151
+ if (seq > stage.pages.length)
152
+ return invalidStoreInput(`stage ${stageId} holds ${stage.pages.length} pages, not ${seq}`);
153
+ stage.pages.push(tables);
154
+ return { result: { staged: true } };
155
+ }
156
+ case 'substrat.commit-stage': {
157
+ const input = storeCommitStageInput.safeParse(request.input);
158
+ if (!input.success)
159
+ return invalidStoreInput('substrat.commit-stage takes { stageId }');
160
+ const stage = stages.get(id);
161
+ if (stage?.stageId !== input.data.stageId) {
162
+ // The stage last committed answers again with the same count, and changes nothing.
163
+ const last = committed.get(id);
164
+ if (last?.stageId === input.data.stageId)
165
+ return { result: { tables: last.tables } };
166
+ return stageRefused(`no stage ${input.data.stageId} to commit`);
167
+ }
168
+ const tables = mergeDumpPages(stage.pages);
79
169
  // The whole object is replaced: no counter table is an empty object.
80
- const rows = z.array(counterRow).safeParse(input.data.tables.find((one) => one.name === 'counter')?.rows ?? []);
170
+ const rows = z.array(counterRow).safeParse(tables.find((one) => one.name === 'counter')?.rows ?? []);
81
171
  if (!rows.success)
82
172
  return invalidStoreInput('a counter row is [subject or null, a non-negative integer]');
83
173
  // A dump names each row key once: a repeated subject is refused, never folded or dropped.
@@ -85,7 +175,19 @@ export function counterScopeStoreRunner() {
85
175
  if (next.size !== rows.data.length)
86
176
  return invalidStoreInput('a counter table names each subject once');
87
177
  objects.set(id, next);
88
- return { result: { tables: input.data.tables.length } };
178
+ stages.delete(id);
179
+ committed.set(id, { stageId: input.data.stageId, tables: tables.length });
180
+ wrote(id);
181
+ return { result: { tables: tables.length } };
182
+ }
183
+ case 'substrat.discard-stage': {
184
+ const input = storeDiscardStageInput.safeParse(request.input);
185
+ if (!input.success)
186
+ return invalidStoreInput('substrat.discard-stage takes { stageId }');
187
+ const dropped = stages.get(id)?.stageId === input.data.stageId;
188
+ if (dropped)
189
+ stages.delete(id);
190
+ return { result: { discarded: dropped } };
89
191
  }
90
192
  default:
91
193
  return { error: { code: 'unknown_operation', status: 400 } };
@@ -1 +1 @@
1
- {"version":3,"file":"counter-runner.js","sourceRoot":"","sources":["../src/counter-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"counter-runner.js","sourceRoot":"","sources":["../src/counter-runner.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type StoreRequest } from '@substrat-run/contracts';
1
+ import { type ScopeDumpTable, type StoreRequest } from '@substrat-run/contracts';
2
2
  import { type ScopeStoreRunner } from '@substrat-run/kernel';
3
3
  /**
4
4
  * What a driver hands the runner suite. The suite knows nothing about the driver beyond
@@ -9,12 +9,34 @@ export interface ScopeStoreRunnerFixture {
9
9
  makeRunner(): ScopeStoreRunner | Promise<ScopeStoreRunner>;
10
10
  /** A driver operation that changes the object. Each call must change what `read` answers. */
11
11
  readonly write: StoreRequest;
12
+ /**
13
+ * A driver operation that writes the n-th distinct row, so a dump of the object grows by one row
14
+ * for each n. `write` may only ever touch one row; this is what lets the suite fill a store with
15
+ * many.
16
+ */
17
+ writeRow(n: number): StoreRequest;
12
18
  /** A driver operation that reads the object back. Equal answers mean equal objects. */
13
19
  readonly read: StoreRequest;
20
+ /**
21
+ * Optional: tables the driver stages and then refuses at commit (a row it cannot take, or a table
22
+ * it has no name for). With it the suite proves a refused stage leaves the object as it was.
23
+ * Without it that check is skipped, and its name says so.
24
+ */
25
+ readonly refusedStage?: readonly ScopeDumpTable[];
26
+ /**
27
+ * Optional: a driver operation that writes a row held against `subjectId`, so that
28
+ * `substrat.erase` of it erases something. With it the suite proves an erase that erased moves
29
+ * the revision. Without it that check is skipped, and its name says so.
30
+ */
31
+ writeSubject?(subjectId: string): StoreRequest;
32
+ /** Every catalog operation the driver serves: what its `substrat.selfcheck` must answer (#2814). */
33
+ readonly catalog: readonly string[];
14
34
  }
15
35
  /** One check of the runner contract. It throws when the runner breaks it. */
16
36
  export interface ScopeStoreRunnerCheck {
17
37
  readonly name: string;
38
+ /** Set on a check that needs a fixture hook the driver did not give: it is listed, and skipped. */
39
+ readonly skip?: true;
18
40
  run(): Promise<void>;
19
41
  }
20
42
  /**
@@ -38,6 +60,7 @@ export declare function scopeStoreRunnerChecks(fixture: ScopeStoreRunnerFixture)
38
60
  * scopeStoreRunnerContractSuite('graph', {
39
61
  * makeRunner: () => graphRunner({ dir }),
40
62
  * write: { operation: 'apply', input: { … } },
63
+ * writeRow: (n) => ({ operation: 'apply', input: { …, n } }),
41
64
  * read: { operation: 'inspect' },
42
65
  * });
43
66
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"scope-store-runner-suite.d.ts","sourceRoot":"","sources":["../src/scope-store-runner-suite.ts"],"names":[],"mappings":"AACA,OAAO,EAA8C,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACxG,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,UAAU,IAAI,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3D,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED,6EAA6E;AAC7E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,qBAAqB,EAAE,CAuJhG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAMpG"}
1
+ {"version":3,"file":"scope-store-runner-suite.d.ts","sourceRoot":"","sources":["../src/scope-store-runner-suite.ts"],"names":[],"mappings":"AACA,OAAO,EAA0E,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACzJ,OAAO,EAOL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,UAAU,IAAI,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3D,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAClC,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAClD;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;IAC/C,oGAAoG;IACpG,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,6EAA6E;AAC7E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mGAAmG;IACnG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAkED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,qBAAqB,EAAE,CA2bhG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAOpG"}
@@ -1,6 +1,40 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { storeResponse } from '@substrat-run/contracts';
3
- import { callReservedStoreOperation, callScopeStore, ulid, } from '@substrat-run/kernel';
2
+ import { mergeDumpPages, StoreError, storeResponse } from '@substrat-run/contracts';
3
+ import { callReservedStoreOperation, callScopeStore, readStoreDump, ulid, writeStoreDump, } from '@substrat-run/kernel';
4
+ /** A page size no test dump needs more than one page of. */
5
+ const LARGE_PAGE = 1024 * 1024;
6
+ const sizeOf = (value) => new TextEncoder().encode(JSON.stringify(value)).length;
7
+ const rowCount = (tables) => tables.reduce((sum, table) => sum + table.rows.length, 0);
8
+ async function chainOf(runner, address, maxBytes) {
9
+ const pages = [];
10
+ const revisions = new Set();
11
+ let cursor = null;
12
+ do {
13
+ const page = await callReservedStoreOperation((r) => runner.invoke(address, r), 'substrat.export-page', { cursor, maxBytes });
14
+ pages.push(page.tables);
15
+ revisions.add(page.revision);
16
+ expect(page.next === null || page.next !== cursor, 'a chain moves on').toBe(true);
17
+ expect(pages.length, 'a chain ends').toBeLessThan(10_000);
18
+ cursor = page.next;
19
+ } while (cursor !== null);
20
+ return { pages, tables: mergeDumpPages(pages), revisions };
21
+ }
22
+ /**
23
+ * The revision a chain carries, read to its end: a driver that refuses writes while a chain is open
24
+ * is not left with one.
25
+ */
26
+ async function revisionOf(runner, address) {
27
+ return (await chainOf(runner, address, LARGE_PAGE)).revisions.values().next().value;
28
+ }
29
+ /** A stage the object does not hold, or will not take again, is refused with 409 `stage_refused`. */
30
+ const refused = (answer) => expect(answer).rejects.toMatchObject({ storeCode: 'stage_refused', storeStatus: 409 });
31
+ /** A dump cut into `parts` pages, each table's rows spread over them, every table named on every page. */
32
+ function spreadOver(tables, parts) {
33
+ return Array.from({ length: parts }, (_, part) => tables.map((table) => {
34
+ const size = Math.ceil(table.rows.length / parts);
35
+ return { ...table, rows: table.rows.slice(part * size, (part + 1) * size) };
36
+ }));
37
+ }
4
38
  /** An address no other check, and no earlier run, has used. */
5
39
  function freshAddress() {
6
40
  return { tenantId: ulid(), vertical: 'conformance', scopeId: ulid(), binding: 'STORE' };
@@ -34,6 +68,7 @@ export function scopeStoreRunnerChecks(fixture) {
34
68
  const call = (runner, address, request) => callScopeStore((r) => runner.invoke(address, r), request.operation, request.input);
35
69
  const read = (runner, address) => call(runner, address, fixture.read);
36
70
  const write = (runner, address) => call(runner, address, fixture.write);
71
+ const writeRow = (runner, address, n) => call(runner, address, fixture.writeRow(n));
37
72
  const reserved = (runner, address, operation, input) => callReservedStoreOperation((r) => runner.invoke(address, r), operation, input);
38
73
  return [
39
74
  {
@@ -110,18 +145,99 @@ export function scopeStoreRunnerChecks(fixture) {
110
145
  },
111
146
  },
112
147
  {
113
- name: 'substrat.export answers { tables } in the scope-dump table shape',
148
+ // What the rollout's canary does (#2814): rows loaded first, so the runtime is built over
149
+ // data, and the answer compared exactly with the catalog the release is approved with.
150
+ name: 'substrat.selfcheck, on an object that loaded rows, answers exactly the catalog',
151
+ async run() {
152
+ await withRunner(async (runner) => {
153
+ const source = freshAddress();
154
+ const target = freshAddress();
155
+ await write(runner, source);
156
+ const dump = await readStoreDump((operation, input) => reserved(runner, source, operation, input), 1);
157
+ await writeStoreDump((operation, input) => reserved(runner, target, operation, input), dump, 1);
158
+ const { operations } = await reserved(runner, target, 'substrat.selfcheck');
159
+ expect([...operations].sort()).toEqual([...fixture.catalog].sort());
160
+ });
161
+ },
162
+ },
163
+ {
164
+ name: 'substrat.export-page answers a chain that ends, one revision, and the same dump at any page size',
114
165
  async run() {
115
166
  await withRunner(async (runner) => {
116
167
  const address = freshAddress();
117
168
  await write(runner, address);
118
- const { tables } = await reserved(runner, address, 'substrat.export');
119
- expect(tables.length).toBeGreaterThan(0);
169
+ const large = await chainOf(runner, address, LARGE_PAGE);
170
+ const small = await chainOf(runner, address, 1);
171
+ expect(large.tables.length).toBeGreaterThan(0);
172
+ expect(large.revisions.size, 'one revision along a chain with no write').toBe(1);
173
+ expect(small.revisions.size, 'one revision along a chain with no write').toBe(1);
174
+ expect(small.tables).toEqual(large.tables);
175
+ expect([...small.revisions], 'the revision does not depend on the page size').toEqual([...large.revisions]);
176
+ await write(runner, address);
177
+ expect((await chainOf(runner, address, LARGE_PAGE)).revisions, 'a write changes the revision').not.toEqual(large.revisions);
178
+ });
179
+ },
180
+ },
181
+ {
182
+ name: 'substrat.export-page cuts many rows into pages within maxBytes, and loses none between them',
183
+ async run() {
184
+ await withRunner(async (runner) => {
185
+ const address = freshAddress();
186
+ for (let n = 0; n < 12; n += 1)
187
+ await writeRow(runner, address, n);
188
+ const large = await chainOf(runner, address, LARGE_PAGE);
189
+ const rows = rowCount(large.tables);
190
+ expect(rows, 'writeRow writes distinct rows').toBeGreaterThanOrEqual(12);
191
+ for (const maxBytes of [1, 150, 400]) {
192
+ const chain = await chainOf(runner, address, maxBytes);
193
+ // A page holds at least one table heading and one row, and is otherwise within maxBytes.
194
+ for (const page of chain.pages) {
195
+ const lone = page.length <= 1 && rowCount(page) <= 1;
196
+ expect(sizeOf(page) <= maxBytes || lone, `a page of ${sizeOf(page)} bytes at maxBytes ${maxBytes}`).toBe(true);
197
+ }
198
+ expect(chain.tables, `maxBytes ${maxBytes}: the merged pages are the large read`).toEqual(large.tables);
199
+ }
200
+ // The smallest page holds one row, so the rows are spread over at least as many pages.
201
+ expect((await chainOf(runner, address, 1)).pages.length).toBeGreaterThanOrEqual(rows);
202
+ });
203
+ },
204
+ },
205
+ {
206
+ name: 'a chain is one moment: a wipe between two of its pages cannot tear it',
207
+ async run() {
208
+ await withRunner(async (runner) => {
209
+ const address = freshAddress();
210
+ for (let n = 0; n < 4; n += 1)
211
+ await writeRow(runner, address, n);
212
+ const whole = (await chainOf(runner, address, LARGE_PAGE)).tables;
213
+ const first = await reserved(runner, address, 'substrat.export-page', { cursor: null, maxBytes: 1 });
214
+ // A driver may refuse the write while the chain is open, refuse the cursor after it, move the
215
+ // revision, or answer the dump from before the wipe. It may not answer a torn one under the
216
+ // revision it began with.
217
+ if (!(await reserved(runner, address, 'substrat.wipe').then(() => true, () => false)))
218
+ return;
219
+ const pages = [first.tables];
220
+ let cursor = first.next;
221
+ for (let seen = 0; cursor !== null; seen += 1) {
222
+ expect(seen, 'a chain ends').toBeLessThan(10_000);
223
+ let page;
224
+ try {
225
+ page = await reserved(runner, address, 'substrat.export-page', { cursor, maxBytes: 1 });
226
+ }
227
+ catch {
228
+ return;
229
+ }
230
+ if (page.revision !== first.revision)
231
+ return;
232
+ pages.push(page.tables);
233
+ cursor = page.next;
234
+ }
235
+ expect(mergeDumpPages(pages), 'a chain under one revision is the dump from before the wipe').toEqual(whole);
120
236
  });
121
237
  },
122
238
  },
123
239
  {
124
- name: 'substrat.import replaces the whole object and answers the tables it wrote',
240
+ name: 'substrat.commit-stage replaces the whole object and answers the distinct tables it wrote',
125
241
  async run() {
126
242
  await withRunner(async (runner) => {
127
243
  const source = freshAddress();
@@ -131,13 +247,230 @@ export function scopeStoreRunnerChecks(fixture) {
131
247
  await write(runner, target);
132
248
  // The target holds more than the source, so a merge cannot pass for a replace.
133
249
  expect(await read(runner, target)).not.toEqual(await read(runner, source));
134
- const { tables } = await reserved(runner, source, 'substrat.export');
135
- const imported = await reserved(runner, target, 'substrat.import', { tables });
136
- expect(imported.tables).toBe(tables.length);
250
+ const tables = await readStoreDump((operation, input) => reserved(runner, source, operation, input), LARGE_PAGE);
251
+ const before = await read(runner, target);
252
+ const stageId = ulid();
253
+ expect(await reserved(runner, target, 'substrat.stage-page', { stageId, seq: 0, tables })).toEqual({ staged: true });
254
+ expect(await read(runner, target), 'a stage changes nothing a call can see').toEqual(before);
255
+ const { tables: wrote } = await reserved(runner, target, 'substrat.commit-stage', { stageId });
256
+ expect(wrote).toBe(tables.length);
257
+ expect(await read(runner, target)).toEqual(await read(runner, source));
258
+ });
259
+ },
260
+ },
261
+ {
262
+ name: 'a stage spread over several pages commits whole, not only its first page',
263
+ async run() {
264
+ await withRunner(async (runner) => {
265
+ const source = freshAddress();
266
+ const target = freshAddress();
267
+ for (let n = 0; n < 6; n += 1)
268
+ await writeRow(runner, source, n);
269
+ for (let n = 50; n < 53; n += 1)
270
+ await writeRow(runner, target, n);
271
+ const tables = (await chainOf(runner, source, LARGE_PAGE)).tables;
272
+ const pages = spreadOver(tables, 3);
273
+ const stageId = ulid();
274
+ for (const [seq, page] of pages.entries()) {
275
+ expect(await reserved(runner, target, 'substrat.stage-page', { stageId, seq, tables: page })).toEqual({ staged: true });
276
+ }
277
+ expect(await reserved(runner, target, 'substrat.commit-stage', { stageId })).toEqual({ tables: tables.length });
278
+ expect((await chainOf(runner, target, LARGE_PAGE)).tables).toEqual(tables);
137
279
  expect(await read(runner, target)).toEqual(await read(runner, source));
138
280
  });
139
281
  },
140
282
  },
283
+ {
284
+ name: 'a page already staged answers staged: false, and a gap is refused',
285
+ async run() {
286
+ await withRunner(async (runner) => {
287
+ const address = freshAddress();
288
+ await write(runner, address);
289
+ const tables = await readStoreDump((operation, input) => reserved(runner, address, operation, input), LARGE_PAGE);
290
+ const before = await read(runner, address);
291
+ const stageId = ulid();
292
+ expect(await reserved(runner, address, 'substrat.stage-page', { stageId, seq: 0, tables })).toEqual({ staged: true });
293
+ // The resend carries other content: the first version is the one held.
294
+ const emptied = tables.map((table) => ({ ...table, rows: [] }));
295
+ expect(await reserved(runner, address, 'substrat.stage-page', { stageId, seq: 0, tables: emptied })).toEqual({ staged: false });
296
+ await expect(reserved(runner, address, 'substrat.stage-page', { stageId, seq: 5, tables })).rejects.toBeInstanceOf(StoreError);
297
+ await reserved(runner, address, 'substrat.commit-stage', { stageId });
298
+ expect(await read(runner, address), 'the resent page is not held twice, and does not replace the first').toEqual(before);
299
+ });
300
+ },
301
+ },
302
+ {
303
+ name: 'page 0 of a new stage drops the old one, which then cannot stage or commit; discarding another id leaves the held stage',
304
+ async run() {
305
+ await withRunner(async (runner) => {
306
+ const address = freshAddress();
307
+ await write(runner, address);
308
+ const tables = await readStoreDump((operation, input) => reserved(runner, address, operation, input), LARGE_PAGE);
309
+ const before = await read(runner, address);
310
+ const old = ulid();
311
+ const held = ulid();
312
+ await reserved(runner, address, 'substrat.stage-page', { stageId: old, seq: 0, tables: [] });
313
+ await reserved(runner, address, 'substrat.stage-page', { stageId: held, seq: 0, tables });
314
+ await refused(reserved(runner, address, 'substrat.stage-page', { stageId: old, seq: 1, tables: [] }));
315
+ await refused(reserved(runner, address, 'substrat.commit-stage', { stageId: old }));
316
+ expect(await reserved(runner, address, 'substrat.discard-stage', { stageId: ulid() })).toEqual({ discarded: false });
317
+ expect(await reserved(runner, address, 'substrat.stage-page', { stageId: held, seq: 1, tables: [] })).toEqual({ staged: true });
318
+ await reserved(runner, address, 'substrat.commit-stage', { stageId: held });
319
+ expect(await read(runner, address), 'the held stage is the one that committed').toEqual(before);
320
+ });
321
+ },
322
+ },
323
+ {
324
+ name: 'substrat.discard-stage drops a stage, which then cannot commit, and leaves the object',
325
+ async run() {
326
+ await withRunner(async (runner) => {
327
+ const address = freshAddress();
328
+ await write(runner, address);
329
+ const before = await read(runner, address);
330
+ const stageId = ulid();
331
+ await reserved(runner, address, 'substrat.stage-page', { stageId, seq: 0, tables: [] });
332
+ expect(await reserved(runner, address, 'substrat.discard-stage', { stageId })).toEqual({ discarded: true });
333
+ expect(await reserved(runner, address, 'substrat.discard-stage', { stageId })).toEqual({ discarded: false });
334
+ await refused(reserved(runner, address, 'substrat.commit-stage', { stageId }));
335
+ expect(await read(runner, address)).toEqual(before);
336
+ });
337
+ },
338
+ },
339
+ {
340
+ name: 'a commit and a wipe move the revision, and a read does not',
341
+ async run() {
342
+ await withRunner(async (runner) => {
343
+ const address = freshAddress();
344
+ await write(runner, address);
345
+ const first = await revisionOf(runner, address);
346
+ await read(runner, address);
347
+ expect(await revisionOf(runner, address), 'the same state reads the same revision').toBe(first);
348
+ const tables = await readStoreDump((operation, input) => reserved(runner, address, operation, input), LARGE_PAGE);
349
+ // The object changes after the dump was taken, so the commit of that dump changes it back.
350
+ await write(runner, address);
351
+ const changed = await revisionOf(runner, address);
352
+ expect(changed, 'a write moves the revision').not.toBe(first);
353
+ const stageId = ulid();
354
+ await reserved(runner, address, 'substrat.stage-page', { stageId, seq: 0, tables });
355
+ expect(await revisionOf(runner, address), 'a stage changes nothing').toBe(changed);
356
+ await reserved(runner, address, 'substrat.commit-stage', { stageId });
357
+ const committed = await revisionOf(runner, address);
358
+ expect(committed, 'a commit that changes the dump moves the revision').not.toBe(changed);
359
+ await reserved(runner, address, 'substrat.wipe');
360
+ expect(await revisionOf(runner, address), 'a wipe moves the revision').not.toBe(committed);
361
+ });
362
+ },
363
+ },
364
+ {
365
+ name: 'substrat.size counts what is staged',
366
+ async run() {
367
+ await withRunner(async (runner) => {
368
+ const source = freshAddress();
369
+ const target = freshAddress();
370
+ for (let n = 0; n < 6; n += 1)
371
+ await writeRow(runner, source, n);
372
+ await write(runner, target);
373
+ const tables = (await chainOf(runner, source, LARGE_PAGE)).tables;
374
+ const before = await reserved(runner, target, 'substrat.size');
375
+ await reserved(runner, target, 'substrat.stage-page', { stageId: ulid(), seq: 0, tables });
376
+ const staged = await reserved(runner, target, 'substrat.size');
377
+ expect(staged.bytes, 'a stage of more rows than the object holds makes it larger').toBeGreaterThan(before.bytes);
378
+ });
379
+ },
380
+ },
381
+ {
382
+ name: 'a wipe and an erase drop every stage: its commit is refused, and nothing comes back',
383
+ async run() {
384
+ await withRunner(async (runner) => {
385
+ const address = freshAddress();
386
+ const empty = await read(runner, freshAddress());
387
+ await write(runner, address);
388
+ const tables = await readStoreDump((operation, input) => reserved(runner, address, operation, input), LARGE_PAGE);
389
+ const stageId = ulid();
390
+ await reserved(runner, address, 'substrat.stage-page', { stageId, seq: 0, tables });
391
+ await reserved(runner, address, 'substrat.wipe');
392
+ await refused(reserved(runner, address, 'substrat.commit-stage', { stageId }));
393
+ expect(await read(runner, address)).toEqual(empty);
394
+ // An erase drops a stage too, since the stage may hold the subject, even one that erased nothing.
395
+ await write(runner, address);
396
+ const before = await read(runner, address);
397
+ const second = ulid();
398
+ await reserved(runner, address, 'substrat.stage-page', { stageId: second, seq: 0, tables });
399
+ await reserved(runner, address, 'substrat.erase', { subjectId: ulid() });
400
+ await refused(reserved(runner, address, 'substrat.commit-stage', { stageId: second }));
401
+ expect(await read(runner, address)).toEqual(before);
402
+ });
403
+ },
404
+ },
405
+ {
406
+ name: 'a commit asked again answers the same count and changes nothing; a stage never held is refused',
407
+ async run() {
408
+ await withRunner(async (runner) => {
409
+ const address = freshAddress();
410
+ await write(runner, address);
411
+ const tables = await readStoreDump((operation, input) => reserved(runner, address, operation, input), LARGE_PAGE);
412
+ const stageId = ulid();
413
+ await reserved(runner, address, 'substrat.stage-page', { stageId, seq: 0, tables });
414
+ const first = await reserved(runner, address, 'substrat.commit-stage', { stageId });
415
+ await write(runner, address);
416
+ const after = await read(runner, address);
417
+ const revision = await revisionOf(runner, address);
418
+ expect(await reserved(runner, address, 'substrat.commit-stage', { stageId }), 'a lost answer is retried').toEqual(first);
419
+ expect(await read(runner, address), 'the repeat changes nothing').toEqual(after);
420
+ expect(await revisionOf(runner, address)).toBe(revision);
421
+ await refused(reserved(runner, address, 'substrat.commit-stage', { stageId: ulid() }));
422
+ // A wipe ends the memory of the last commit.
423
+ await reserved(runner, address, 'substrat.wipe');
424
+ await refused(reserved(runner, address, 'substrat.commit-stage', { stageId }));
425
+ // Only the stage last committed answers again: an older one is refused.
426
+ const [older, newer] = [ulid(), ulid()];
427
+ await reserved(runner, address, 'substrat.stage-page', { stageId: older, seq: 0, tables });
428
+ await reserved(runner, address, 'substrat.commit-stage', { stageId: older });
429
+ await reserved(runner, address, 'substrat.stage-page', { stageId: newer, seq: 0, tables });
430
+ const latest = await reserved(runner, address, 'substrat.commit-stage', { stageId: newer });
431
+ await refused(reserved(runner, address, 'substrat.commit-stage', { stageId: older }));
432
+ expect(await reserved(runner, address, 'substrat.commit-stage', { stageId: newer })).toEqual(latest);
433
+ // A stage id that was committed is not used again.
434
+ await refused(reserved(runner, address, 'substrat.stage-page', { stageId: newer, seq: 0, tables }));
435
+ });
436
+ },
437
+ },
438
+ fixture.refusedStage
439
+ ? {
440
+ name: 'a stage the driver refuses leaves the object as it was',
441
+ async run() {
442
+ await withRunner(async (runner) => {
443
+ const address = freshAddress();
444
+ await write(runner, address);
445
+ const before = await read(runner, address);
446
+ const dump = (await chainOf(runner, address, LARGE_PAGE)).tables;
447
+ const stageId = ulid();
448
+ // Refused when staged or when committed: either way it did not land.
449
+ const landed = await reserved(runner, address, 'substrat.stage-page', { stageId, seq: 0, tables: [...fixture.refusedStage] })
450
+ .then(() => reserved(runner, address, 'substrat.commit-stage', { stageId }))
451
+ .then(() => true, () => false);
452
+ expect(landed, 'the driver refuses this stage').toBe(false);
453
+ expect(await read(runner, address), 'a refused stage changes nothing').toEqual(before);
454
+ expect((await chainOf(runner, address, LARGE_PAGE)).tables).toEqual(dump);
455
+ });
456
+ },
457
+ }
458
+ : { name: 'skipped: a stage the driver refuses leaves the object as it was (the fixture gives no refusedStage)', skip: true, async run() { } },
459
+ fixture.writeSubject
460
+ ? {
461
+ name: 'an erase that erased something moves the revision',
462
+ async run() {
463
+ await withRunner(async (runner) => {
464
+ const address = freshAddress();
465
+ const subjectId = ulid();
466
+ await call(runner, address, fixture.writeSubject(subjectId));
467
+ const before = await revisionOf(runner, address);
468
+ expect((await reserved(runner, address, 'substrat.erase', { subjectId })).erased, 'writeSubject writes a row to erase').toBeGreaterThan(0);
469
+ expect(await revisionOf(runner, address)).not.toBe(before);
470
+ });
471
+ },
472
+ }
473
+ : { name: 'skipped: an erase that erased something moves the revision (the fixture gives no writeSubject)', skip: true, async run() { } },
141
474
  {
142
475
  name: 'substrat.wipe answers {} and leaves an empty object, also where nothing was written',
143
476
  async run() {
@@ -173,6 +506,7 @@ export function scopeStoreRunnerChecks(fixture) {
173
506
  * scopeStoreRunnerContractSuite('graph', {
174
507
  * makeRunner: () => graphRunner({ dir }),
175
508
  * write: { operation: 'apply', input: { … } },
509
+ * writeRow: (n) => ({ operation: 'apply', input: { …, n } }),
176
510
  * read: { operation: 'inspect' },
177
511
  * });
178
512
  * ```
@@ -180,7 +514,10 @@ export function scopeStoreRunnerChecks(fixture) {
180
514
  export function scopeStoreRunnerContractSuite(driver, fixture) {
181
515
  describe(`scope-store runner (#2213): ${driver}`, () => {
182
516
  for (const check of scopeStoreRunnerChecks(fixture)) {
183
- it(check.name, () => check.run());
517
+ if (check.skip)
518
+ it.skip(check.name, () => check.run());
519
+ else
520
+ it(check.name, () => check.run());
184
521
  }
185
522
  });
186
523
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scope-store-runner-suite.js","sourceRoot":"","sources":["../src/scope-store-runner-suite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope-store-runner-suite.js","sourceRoot":"","sources":["../src/scope-store-runner-suite.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scope-store-suite.d.ts","sourceRoot":"","sources":["../src/scope-store-suite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,gBAAgB,EAAwB,MAAM,sBAAsB,CAAC;AAGzG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAiD9D;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CACX,WAAW,EAAE;IAAE,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAA;KAAE,EAAE,CAAA;CAAE,KACtE,OAAO,CAAC,gBAAgB,CAAC,GAC7B,IAAI,CA8jBN"}
1
+ {"version":3,"file":"scope-store-suite.d.ts","sourceRoot":"","sources":["../src/scope-store-suite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,gBAAgB,EAAwB,MAAM,sBAAsB,CAAC;AAGzG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AA0D9D;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CACX,WAAW,EAAE;IAAE,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAA;KAAE,EAAE,CAAA;CAAE,KACtE,OAAO,CAAC,gBAAgB,CAAC,GAC7B,IAAI,CAkmBN"}
@@ -1,23 +1,30 @@
1
1
  import { describe, it, expect, beforeAll, afterAll } from 'vitest';
2
- import { errorCodeOf, platformActorId, principalId, scopeId, storeEraseInput, tenantId } from '@substrat-run/contracts';
2
+ import { errorCodeOf, platformActorId, principalId, scopeId, storeDriverDumpPageBytes, storeEraseInput, tenantId } from '@substrat-run/contracts';
3
3
  import { ulid } from '@substrat-run/kernel';
4
4
  import { STORE_CALL_SINK_KEY, tallyStoreCall } from '@substrat-run/kernel/invocation-line';
5
5
  import { counterScopeStoreRunner, invalidStoreInput, objectNameOf } from './counter-runner.js';
6
6
  /**
7
7
  * The trivial driver, with what this suite reads back about the host's calls:
8
8
  * `address` (what the host handed in), `erased` (the subjects erased on this object),
9
- * `wiped` (every object wiped), and `fail-wipe` (`true` makes each later `substrat.wipe`
10
- * answer 503, until `false`).
9
+ * `wiped` (every object wiped), `fail-wipe` (`true` makes each later `substrat.wipe`
10
+ * answer 503, until `false`), and `page-calls` (each paged dump call on this object, in order:
11
+ * its operation, and the cursor, `maxBytes` or `seq` it carried).
11
12
  */
12
13
  function instrumentedCounterRunner() {
13
14
  const counter = counterScopeStoreRunner();
14
15
  const erased = new Map();
15
16
  const wiped = new Set();
16
17
  let failWipe = false;
18
+ const pageCalls = new Map();
17
19
  return {
18
20
  ...counter,
19
21
  async invoke(address, request) {
20
22
  const id = objectNameOf(address);
23
+ if (/^substrat\.(export-page|stage-page|commit-stage|discard-stage)$/.test(request.operation)) {
24
+ const input = (request.input ?? {});
25
+ const line = { operation: request.operation, cursor: input.cursor, maxBytes: input.maxBytes, seq: input.seq };
26
+ pageCalls.set(id, [...(pageCalls.get(id) ?? []), line]);
27
+ }
21
28
  switch (request.operation) {
22
29
  case 'address': {
23
30
  const { tenantId, vertical, scopeId, binding } = address;
@@ -25,6 +32,8 @@ function instrumentedCounterRunner() {
25
32
  }
26
33
  case 'erased':
27
34
  return { result: [...(erased.get(id) ?? [])] };
35
+ case 'page-calls':
36
+ return { result: pageCalls.get(id) ?? [] };
28
37
  case 'wiped':
29
38
  return { result: [...wiped] };
30
39
  case 'fail-wipe':
@@ -204,6 +213,38 @@ export function scopeStoreContractSuite(adapterName, makeFixture) {
204
213
  await host.restoreScope(staff, tenant, scopeB, dump);
205
214
  expect(await store.invoke('read')).toBe(4);
206
215
  });
216
+ it('a store too large for one page crosses in pages and back, and a restore replaces it whole (D-69)', async () => {
217
+ const scope = scopeId.parse(ulid());
218
+ await host.provisionScope(staff, { tenantId: tenant, scopeId: scope, vertical: 'docs' });
219
+ await host.admin.activateScope(staff, tenant, scope);
220
+ const store = await host.getScopeStore(principal, tenant, scope, 'GRAPH');
221
+ // Nine subjects of about a megabyte each: more than a dump page holds, so the store is a chain.
222
+ const subjects = Array.from({ length: 9 }, (_, i) => `${i}:`.padEnd(1_000_000, 'x'));
223
+ for (const [i, subjectId] of subjects.entries())
224
+ await store.invoke('increment', { by: i + 1, subjectId });
225
+ const total = await store.invoke('read');
226
+ const dump = await host.admin.exportScope(staff, tenant, scope);
227
+ const [held] = dump.stores;
228
+ expect(held.tables).toHaveLength(1);
229
+ expect(held.tables[0].rows.map((row) => String(row[0]).slice(0, 2))).toEqual(subjects.map((s) => s.slice(0, 2)));
230
+ const exports = (await store.invoke('page-calls')).filter((call) => call.operation === 'substrat.export-page');
231
+ expect(exports.length).toBeGreaterThan(1);
232
+ expect(exports[0].cursor).toBeNull();
233
+ expect(exports.every((call) => call.maxBytes === storeDriverDumpPageBytes('counter'))).toBe(true);
234
+ await store.invoke('increment', { by: 100, subjectId: 'later' });
235
+ await host.restoreScope(staff, tenant, scope, dump);
236
+ expect(await store.invoke('read')).toBe(total);
237
+ const calls = (await store.invoke('page-calls'));
238
+ const staged = calls.filter((call) => call.operation === 'substrat.stage-page');
239
+ expect(staged.length).toBeGreaterThan(1);
240
+ expect(staged.map((call) => call.seq)).toEqual(staged.map((_, i) => i));
241
+ expect(calls.filter((call) => call.operation === 'substrat.commit-stage')).toHaveLength(1);
242
+ expect(calls.at(-1).operation).toBe('substrat.commit-stage');
243
+ // The stage is the store's alone to drop: the restore committed it, so none is left to discard.
244
+ expect(calls.some((call) => call.operation === 'substrat.discard-stage')).toBe(false);
245
+ // The later subject was replaced, not merged: the store holds exactly what the dump held.
246
+ expect(await host.admin.exportScope(staff, tenant, scope)).toMatchObject({ stores: [{ tables: [{ rows: held.tables[0].rows }] }] });
247
+ }, 60_000);
207
248
  it('a restore that names an unbound store writes nothing', async () => {
208
249
  const store = await host.getScopeStore(principal, tenant, scopeB, 'GRAPH');
209
250
  // scopeB carries the counter the tests above left behind.
@@ -1 +1 @@
1
- {"version":3,"file":"scope-store-suite.js","sourceRoot":"","sources":["../src/scope-store-suite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope-store-suite.js","sourceRoot":"","sources":["../src/scope-store-suite.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@substrat-run/contract-tests",
3
- "version": "0.177.0",
3
+ "version": "0.178.0",
4
4
  "description": "The suite every scope-host adapter must pass, forever (D-14)",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -30,8 +30,8 @@
30
30
  "dist"
31
31
  ],
32
32
  "dependencies": {
33
- "@substrat-run/contracts": "^0.177.0",
34
- "@substrat-run/kernel": "^0.177.0"
33
+ "@substrat-run/contracts": "^0.178.0",
34
+ "@substrat-run/kernel": "^0.178.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "^22.20.5",