@substrat-run/contract-tests 0.126.0 → 0.128.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/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +12 -0
- package/dist/modules.js.map +1 -1
- package/dist/permission-suite.d.ts.map +1 -1
- package/dist/permission-suite.js +27 -0
- package/dist/permission-suite.js.map +1 -1
- package/dist/schedule-suite.d.ts.map +1 -1
- package/dist/schedule-suite.js +17 -8
- package/dist/schedule-suite.js.map +1 -1
- package/dist/scope-host-suite.d.ts.map +1 -1
- package/dist/scope-host-suite.js +94 -7
- package/dist/scope-host-suite.js.map +1 -1
- package/dist/scope-repoint-suite.d.ts.map +1 -1
- package/dist/scope-repoint-suite.js +400 -0
- package/dist/scope-repoint-suite.js.map +1 -1
- package/dist/system-switch-suite.d.ts.map +1 -1
- package/dist/system-switch-suite.js +11 -8
- package/dist/system-switch-suite.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-repoint-suite.d.ts","sourceRoot":"","sources":["../src/scope-repoint-suite.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"scope-repoint-suite.d.ts","sourceRoot":"","sources":["../src/scope-repoint-suite.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CA0rBjH"}
|
|
@@ -79,6 +79,8 @@ export function scopeRepointContractSuite(adapterName, makeFixture) {
|
|
|
79
79
|
tables: planted.tables.map((tb) => tb.name === '_substrat_tuples' ? { ...tb, rows: rows(tb.rows), ddl: ddl ? ddl(tb.ddl) : tb.ddl } : tb),
|
|
80
80
|
});
|
|
81
81
|
const tuplesAt = async (scope) => tuplesOf(await host.admin.exportScope(staff, t, scope)).rows;
|
|
82
|
+
/** A tuples row in `planted`'s column order: the cells given, NULL in every other column. */
|
|
83
|
+
const tupleRow = (cells) => tuplesOf(planted).columns.map((c) => cells[c] ?? null);
|
|
82
84
|
const expectGenuineGrantMoved = async (scope) => {
|
|
83
85
|
const rows = await rowsFor(scope, gina);
|
|
84
86
|
expect(rows.map((r) => r.object)).toEqual([`scope:${scope}`]);
|
|
@@ -226,6 +228,404 @@ export function scopeRepointContractSuite(adapterName, makeFixture) {
|
|
|
226
228
|
// `scope` cannot be told from a node grant, and moves with it.
|
|
227
229
|
expect((await rowsFor(dest, jack)).map((r) => r.object)).toEqual([`scope:${dest}`]);
|
|
228
230
|
});
|
|
231
|
+
/**
|
|
232
|
+
* #1882: a moved row can meet a row the dump already holds for the destination, since
|
|
233
|
+
* (subject, relation, object) is the key. It was `UPDATE OR REPLACE`, so the moved row
|
|
234
|
+
* always won, tombstone and expiry included. The rule: the higher rank is kept, live above
|
|
235
|
+
* revoked above expired (a tombstone is evidence, an expiry is not), and on a tie the
|
|
236
|
+
* destination row stays. A row both revoked and expired ranks as revoked. Every cell
|
|
237
|
+
* of source state × destination state, with the twins that have no collision at all, on
|
|
238
|
+
* each path that re-points: a caller's restore (exact), a fork (exact, platform-vouched)
|
|
239
|
+
* and a caller's restore whose provenance names no row (the fallback).
|
|
240
|
+
*/
|
|
241
|
+
describe('which row survives a re-point collision (#1882)', () => {
|
|
242
|
+
const STATES = ['live', 'revoked', 'expired', 'revokedExpired'];
|
|
243
|
+
const RANK = { live: 2, revoked: 1, revokedExpired: 1, expired: 0 };
|
|
244
|
+
const src = {
|
|
245
|
+
live: { expires_at: null, revoked_at: null },
|
|
246
|
+
revoked: { expires_at: null, revoked_at: '2020-01-01T00:00:00.000Z' },
|
|
247
|
+
expired: { expires_at: '2000-01-01T00:00:00.000Z', revoked_at: null },
|
|
248
|
+
revokedExpired: { expires_at: '2000-06-01T00:00:00.000Z', revoked_at: '2020-06-01T00:00:00.000Z' },
|
|
249
|
+
};
|
|
250
|
+
const dst = {
|
|
251
|
+
live: { expires_at: '2999-01-01T00:00:00.000Z', revoked_at: null },
|
|
252
|
+
revoked: { expires_at: null, revoked_at: '2021-06-01T00:00:00.000Z' },
|
|
253
|
+
expired: { expires_at: '2001-01-01T00:00:00.000Z', revoked_at: null },
|
|
254
|
+
revokedExpired: { expires_at: '2001-06-01T00:00:00.000Z', revoked_at: '2021-09-01T00:00:00.000Z' },
|
|
255
|
+
};
|
|
256
|
+
const cases = [];
|
|
257
|
+
for (const s of STATES) {
|
|
258
|
+
for (const d of STATES) {
|
|
259
|
+
const moved = RANK[s] > RANK[d];
|
|
260
|
+
cases.push({
|
|
261
|
+
who: principalId.parse(ulid()),
|
|
262
|
+
rows: [
|
|
263
|
+
{ object: 'source', state: src[s] },
|
|
264
|
+
{ object: 'dest', state: dst[d] },
|
|
265
|
+
],
|
|
266
|
+
kept: moved ? src[s] : dst[d],
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
// Twins with no collision: a source row moves as it is, a destination row stays as it is.
|
|
270
|
+
cases.push({ who: principalId.parse(ulid()), rows: [{ object: 'source', state: src[s] }], kept: src[s] });
|
|
271
|
+
cases.push({ who: principalId.parse(ulid()), rows: [{ object: 'dest', state: dst[s] }], kept: dst[s] });
|
|
272
|
+
}
|
|
273
|
+
// Two live rows: the destination row is kept with the EARLIER expiry, whichever side had it,
|
|
274
|
+
// so a restore never widens a grant's life. No expiry is the latest of all.
|
|
275
|
+
const earlier = { expires_at: '2990-01-01T00:00:00.000Z', revoked_at: null };
|
|
276
|
+
const later = { expires_at: '2999-01-01T00:00:00.000Z', revoked_at: null };
|
|
277
|
+
const never = { expires_at: null, revoked_at: null };
|
|
278
|
+
for (const [a, b, kept] of [
|
|
279
|
+
[earlier, later, earlier],
|
|
280
|
+
[later, earlier, earlier],
|
|
281
|
+
[never, later, later],
|
|
282
|
+
[later, never, later],
|
|
283
|
+
[never, never, never],
|
|
284
|
+
]) {
|
|
285
|
+
cases.push({
|
|
286
|
+
who: principalId.parse(ulid()),
|
|
287
|
+
rows: [
|
|
288
|
+
{ object: 'source', state: a },
|
|
289
|
+
{ object: 'dest', state: b },
|
|
290
|
+
],
|
|
291
|
+
kept,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
const live = (c) => c.revoked_at === null && (c.expires_at === null || c.expires_at > '2026');
|
|
295
|
+
/** `planted` plus every case's rows, the destination's naming `dest`. */
|
|
296
|
+
const collisions = (dest) => {
|
|
297
|
+
const extra = cases.flatMap((c) => c.rows.map(({ object, state }) => tupleRow({
|
|
298
|
+
subject: `principal:${c.who}`,
|
|
299
|
+
relation: 'role:reader',
|
|
300
|
+
object: `scope:${object === 'source' ? source : dest}`,
|
|
301
|
+
...state,
|
|
302
|
+
})));
|
|
303
|
+
return variant((rows) => [...rows, ...extra]);
|
|
304
|
+
};
|
|
305
|
+
/** Every case holds exactly its kept row, byte for byte, and the checker agrees. */
|
|
306
|
+
const expectCasesSettled = async (dest) => {
|
|
307
|
+
const columns = tuplesOf(planted).columns;
|
|
308
|
+
for (const c of cases) {
|
|
309
|
+
const want = tupleRow({ subject: `principal:${c.who}`, relation: 'role:reader', object: `scope:${dest}`, ...c.kept });
|
|
310
|
+
expect(await rowsFor(dest, c.who)).toEqual([Object.fromEntries(columns.map((col, i) => [col, want[i]]))]);
|
|
311
|
+
expect(await allowed(c.who, dest)).toBe(live(c.kept));
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
const expectSettled = async (dest) => {
|
|
315
|
+
await expectCasesSettled(dest);
|
|
316
|
+
// The rest of the dump re-pointed as before.
|
|
317
|
+
await expectGenuineGrantMoved(dest);
|
|
318
|
+
await expectEntityGrantsKept(dest);
|
|
319
|
+
};
|
|
320
|
+
it('a restore (exact): live beats dead, otherwise the destination row stays', async () => {
|
|
321
|
+
const dest = await blank();
|
|
322
|
+
await host.restoreScope(staff, t, dest, collisions(dest));
|
|
323
|
+
await expectSettled(dest);
|
|
324
|
+
});
|
|
325
|
+
it('a fork (exact, platform-vouched) settles the same way', async () => {
|
|
326
|
+
const fork = scopeId.parse(ulid());
|
|
327
|
+
await host.importScope(staff, { tenantId: t, scopeId: fork, vertical: 'repoint-vertical' }, collisions(fork));
|
|
328
|
+
await expectSettled(fork);
|
|
329
|
+
});
|
|
330
|
+
it('the fallback settles the same way, and two moved rows for one key keep the live one', async () => {
|
|
331
|
+
const dest = await blank();
|
|
332
|
+
// Two other scopes' rows for one key, the live one on the higher object, so the
|
|
333
|
+
// object order alone would have picked the other.
|
|
334
|
+
const [a, b] = [scopeId.parse(ulid()), scopeId.parse(ulid())].sort();
|
|
335
|
+
const mia = principalId.parse(ulid());
|
|
336
|
+
const row = (object, revoked_at) => tupleRow({ subject: `principal:${mia}`, relation: 'role:reader', object, revoked_at });
|
|
337
|
+
const dump = collisions(dest);
|
|
338
|
+
const withBoth = {
|
|
339
|
+
...dump,
|
|
340
|
+
// Provenance that names no row in the dump, so the re-point falls back.
|
|
341
|
+
scopeId: scopeId.parse(ulid()),
|
|
342
|
+
tables: dump.tables.map((tb) => tb.name === '_substrat_tuples'
|
|
343
|
+
? { ...tb, rows: [...tb.rows, row(`scope:${a}`, '2020-01-01T00:00:00.000Z'), row(`scope:${b}`, null)] }
|
|
344
|
+
: tb),
|
|
345
|
+
};
|
|
346
|
+
await host.restoreScope(staff, t, dest, withBoth);
|
|
347
|
+
await expectCasesSettled(dest);
|
|
348
|
+
expect((await rowsFor(dest, mia)).map((r) => [r.object, r.revoked_at])).toEqual([[`scope:${dest}`, null]]);
|
|
349
|
+
expect(await allowed(mia, dest)).toBe(true);
|
|
350
|
+
});
|
|
351
|
+
it('the fallback settles two moved rows and a destination row together: rank, then the lower object', async () => {
|
|
352
|
+
const dest = await blank();
|
|
353
|
+
const [a, b] = [scopeId.parse(ulid()), scopeId.parse(ulid())].sort();
|
|
354
|
+
const on = (object) => `scope:${object === 'a' ? a : object === 'b' ? b : dest}`;
|
|
355
|
+
const trio = [
|
|
356
|
+
// Same rank, both dead: the lower object's row is the one kept.
|
|
357
|
+
{
|
|
358
|
+
rows: [
|
|
359
|
+
{ object: on('a'), revoked_at: '2020-01-01T00:00:00.000Z' },
|
|
360
|
+
{ object: on('b'), revoked_at: '2021-01-01T00:00:00.000Z' },
|
|
361
|
+
],
|
|
362
|
+
kept: { expires_at: null, revoked_at: '2020-01-01T00:00:00.000Z' },
|
|
363
|
+
},
|
|
364
|
+
// Same rank, both live: one row is kept, with the earlier expiry.
|
|
365
|
+
{
|
|
366
|
+
rows: [
|
|
367
|
+
{ object: on('a'), expires_at: '2999-01-01T00:00:00.000Z' },
|
|
368
|
+
{ object: on('b'), expires_at: '2990-01-01T00:00:00.000Z' },
|
|
369
|
+
],
|
|
370
|
+
kept: { expires_at: '2990-01-01T00:00:00.000Z', revoked_at: null },
|
|
371
|
+
},
|
|
372
|
+
// A live moved row beats an expired moved row and a revoked destination row.
|
|
373
|
+
{
|
|
374
|
+
rows: [
|
|
375
|
+
{ object: on('a'), expires_at: '2000-01-01T00:00:00.000Z' },
|
|
376
|
+
{ object: on('b') },
|
|
377
|
+
{ object: on('dest'), revoked_at: '2021-01-01T00:00:00.000Z' },
|
|
378
|
+
],
|
|
379
|
+
kept: { expires_at: null, revoked_at: null },
|
|
380
|
+
},
|
|
381
|
+
// The live destination row is kept, with the earlier expiry a live moved row carried.
|
|
382
|
+
{
|
|
383
|
+
rows: [
|
|
384
|
+
{ object: on('a'), expires_at: '2990-01-01T00:00:00.000Z' },
|
|
385
|
+
{ object: on('b'), revoked_at: '2020-01-01T00:00:00.000Z' },
|
|
386
|
+
{ object: on('dest'), expires_at: '2999-01-01T00:00:00.000Z' },
|
|
387
|
+
],
|
|
388
|
+
kept: { expires_at: '2990-01-01T00:00:00.000Z', revoked_at: null },
|
|
389
|
+
},
|
|
390
|
+
// All three expired: a tie, so the destination row stays.
|
|
391
|
+
{
|
|
392
|
+
rows: [
|
|
393
|
+
{ object: on('a'), expires_at: '2000-01-01T00:00:00.000Z' },
|
|
394
|
+
{ object: on('b'), expires_at: '2001-01-01T00:00:00.000Z' },
|
|
395
|
+
{ object: on('dest'), expires_at: '2002-01-01T00:00:00.000Z' },
|
|
396
|
+
],
|
|
397
|
+
kept: { expires_at: '2002-01-01T00:00:00.000Z', revoked_at: null },
|
|
398
|
+
},
|
|
399
|
+
];
|
|
400
|
+
const who = trio.map(() => principalId.parse(ulid()));
|
|
401
|
+
const extra = trio.flatMap((c, i) => c.rows.map((r) => tupleRow({ subject: `principal:${who[i]}`, relation: 'role:reader', ...r })));
|
|
402
|
+
// Provenance that names no row in the dump, so the re-point falls back and moves both.
|
|
403
|
+
await host.restoreScope(staff, t, dest, { ...variant((rows) => [...rows, ...extra]), scopeId: scopeId.parse(ulid()) });
|
|
404
|
+
const columns = tuplesOf(planted).columns;
|
|
405
|
+
for (const [i, c] of trio.entries()) {
|
|
406
|
+
const want = tupleRow({ subject: `principal:${who[i]}`, relation: 'role:reader', object: `scope:${dest}`, ...c.kept });
|
|
407
|
+
expect(await rowsFor(dest, who[i])).toEqual([Object.fromEntries(columns.map((col, j) => [col, want[j]]))]);
|
|
408
|
+
expect(await allowed(who[i], dest)).toBe(live(c.kept));
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
});
|
|
412
|
+
/**
|
|
413
|
+
* #1883: a restore builds every `_substrat_*` table from the kernel's DDL and takes only
|
|
414
|
+
* the dump's rows, by column name. It used to replay the dump's DDL for the spine too, so
|
|
415
|
+
* a dump could decide the collation of the column the checker compares on.
|
|
416
|
+
*/
|
|
417
|
+
describe('the spine is built from the kernel, never from the dump (#1883)', () => {
|
|
418
|
+
const tina = principalId.parse(ulid()); // granted on aiTurn:x only
|
|
419
|
+
const uma = principalId.parse(ulid()); // granted on aiTurn:y and, separately, on aiturn:y
|
|
420
|
+
const onEntity = async (who, scope, entityType, entityId) => {
|
|
421
|
+
const stub = await host.getScope(who, t, scope);
|
|
422
|
+
const out = await stub.invoke('perm/probe', {
|
|
423
|
+
permission: PERM_READ,
|
|
424
|
+
entity: { entityType, entityId },
|
|
425
|
+
});
|
|
426
|
+
return out.allowed;
|
|
427
|
+
};
|
|
428
|
+
const entityRow = (who, object) => tupleRow({ subject: `principal:${who}`, relation: `granted:${PERM_READ}`, object });
|
|
429
|
+
/** Every table, whole: what a refused load must leave exactly as it was. */
|
|
430
|
+
const everything = async (scope) => (await host.admin.exportScope(staff, t, scope)).tables;
|
|
431
|
+
/** `planted` plus `extra` tuples, its DDL declaring subject, relation and object COLLATE NOCASE. */
|
|
432
|
+
const nocase = (extra) => variant((rows) => [...rows, ...extra], (ddl) => {
|
|
433
|
+
const out = ddl
|
|
434
|
+
.replace(/\bsubject TEXT NOT NULL\b/, 'subject TEXT NOT NULL COLLATE NOCASE')
|
|
435
|
+
.replace(/\brelation TEXT NOT NULL\b/, 'relation TEXT NOT NULL COLLATE NOCASE')
|
|
436
|
+
.replace(/\bobject TEXT NOT NULL\b/, 'object TEXT NOT NULL COLLATE NOCASE');
|
|
437
|
+
expect(out.match(/COLLATE NOCASE/g)).toHaveLength(3);
|
|
438
|
+
return out;
|
|
439
|
+
});
|
|
440
|
+
it('a dump declaring the tuples columns COLLATE NOCASE restores into a case-sensitive table: aiTurn:x is not aiturn:x', async () => {
|
|
441
|
+
const dest = await blank();
|
|
442
|
+
await host.restoreScope(staff, t, dest, nocase([entityRow(tina, 'aiTurn:x')]));
|
|
443
|
+
// The checker compares case-sensitively: the grant is on aiTurn:x and nothing else.
|
|
444
|
+
expect(await onEntity(tina, dest, 'aiTurn', 'x')).toBe(true);
|
|
445
|
+
expect(await onEntity(tina, dest, 'aiturn', 'x')).toBe(false);
|
|
446
|
+
// Because the table is the kernel's, exactly as a scope that was never restored holds it.
|
|
447
|
+
const restored = tuplesOf(await host.admin.exportScope(staff, t, dest));
|
|
448
|
+
expect(restored.ddl).toBe(tuplesOf(planted).ddl);
|
|
449
|
+
expect(restored.ddl).not.toMatch(/NOCASE/i);
|
|
450
|
+
// The re-point still did its job over the same rows.
|
|
451
|
+
await expectGenuineGrantMoved(dest);
|
|
452
|
+
await expectEntityGrantsKept(dest);
|
|
453
|
+
});
|
|
454
|
+
it('the same dump under a spelling of the name in other case cannot bring its DDL either', async () => {
|
|
455
|
+
// SQLite matches table names without regard to case, so `_Substrat_tuples` IS the tuples
|
|
456
|
+
// table. Read as a vertical table, its NOCASE DDL would be replayed and KERNEL_DDL's
|
|
457
|
+
// `IF NOT EXISTS` would then skip the kernel's own.
|
|
458
|
+
const dump = nocase([entityRow(tina, 'aiTurn:x')]);
|
|
459
|
+
const renamed = {
|
|
460
|
+
...dump,
|
|
461
|
+
tables: dump.tables.map((tb) => tb.name === '_substrat_tuples'
|
|
462
|
+
? { ...tb, name: '_Substrat_tuples', ddl: tb.ddl.replace(/^CREATE TABLE _substrat_tuples\b/, 'CREATE TABLE _Substrat_tuples') }
|
|
463
|
+
: tb),
|
|
464
|
+
};
|
|
465
|
+
expect(renamed.tables.find((tb) => tb.name === '_Substrat_tuples')?.ddl).toMatch(/^CREATE TABLE _Substrat_tuples .*NOCASE/s);
|
|
466
|
+
const dest = await blank();
|
|
467
|
+
await host.restoreScope(staff, t, dest, renamed);
|
|
468
|
+
expect(await onEntity(tina, dest, 'aiTurn', 'x')).toBe(true);
|
|
469
|
+
expect(await onEntity(tina, dest, 'aiturn', 'x')).toBe(false);
|
|
470
|
+
const restored = tuplesOf(await host.admin.exportScope(staff, t, dest));
|
|
471
|
+
expect(restored.ddl).toBe(tuplesOf(planted).ddl);
|
|
472
|
+
});
|
|
473
|
+
it('a search-index name in other case is skipped like the index itself, never replayed as a table', async () => {
|
|
474
|
+
// The derived search index is rebuilt, never loaded, and is recognised the way SQLite
|
|
475
|
+
// resolves a name. `_SUBSTRAT_SEARCH_evil` is that index's namespace, not a vertical's.
|
|
476
|
+
const evil = { name: '_SUBSTRAT_SEARCH_evil', ddl: 'CREATE TABLE _SUBSTRAT_SEARCH_evil (id TEXT)', columns: ['id'], rows: [['x']] };
|
|
477
|
+
const dest = await blank();
|
|
478
|
+
await host.restoreScope(staff, t, dest, { ...planted, tables: [...planted.tables, evil] });
|
|
479
|
+
const names = (await everything(dest)).map((tb) => tb.name.toLowerCase());
|
|
480
|
+
expect(names).not.toContain('_substrat_search_evil');
|
|
481
|
+
// Twin: the rest of the dump landed.
|
|
482
|
+
await expectGenuineGrantMoved(dest);
|
|
483
|
+
});
|
|
484
|
+
it('two grants whose objects differ only in case stay two rows through that restore', async () => {
|
|
485
|
+
const dest = await blank();
|
|
486
|
+
// Under the dump's NOCASE these are one key, and the load would fail on the second.
|
|
487
|
+
await host.restoreScope(staff, t, dest, nocase([entityRow(uma, 'aiTurn:y'), entityRow(uma, 'aiturn:y')]));
|
|
488
|
+
expect((await rowsFor(dest, uma)).map((r) => r.object).sort()).toEqual(['aiTurn:y', 'aiturn:y']);
|
|
489
|
+
expect(await onEntity(uma, dest, 'aiTurn', 'y')).toBe(true);
|
|
490
|
+
expect(await onEntity(uma, dest, 'aiturn', 'y')).toBe(true);
|
|
491
|
+
});
|
|
492
|
+
it("twin: a vertical's table keeps the dump's DDL, collation included", async () => {
|
|
493
|
+
const note = {
|
|
494
|
+
name: 'repoint_notes',
|
|
495
|
+
ddl: 'CREATE TABLE repoint_notes (id TEXT PRIMARY KEY, body TEXT COLLATE NOCASE)',
|
|
496
|
+
columns: ['id', 'body'],
|
|
497
|
+
rows: [['n1', 'Hello']],
|
|
498
|
+
};
|
|
499
|
+
const dest = await blank();
|
|
500
|
+
await host.restoreScope(staff, t, dest, { ...planted, tables: [...planted.tables, note] });
|
|
501
|
+
const back = (await everything(dest)).find((tb) => tb.name === 'repoint_notes');
|
|
502
|
+
expect(back).toEqual(note);
|
|
503
|
+
});
|
|
504
|
+
it("a spine column this kernel does not know (a newer kernel's dump) is kept, plain and untyped, through a round trip", async () => {
|
|
505
|
+
// The dump declares the column typed, NOCASE, NOT NULL and defaulted. None of that comes
|
|
506
|
+
// with it: the column is added bare, so it can shape nothing the checker compares.
|
|
507
|
+
const newer = variant((rows) => rows.map((r, i) => [...r, `actor-${i}`]), (ddl) => ddl.replace(/\bobject TEXT NOT NULL\b/, "object TEXT NOT NULL, granted_by TEXT COLLATE NOCASE NOT NULL DEFAULT 'x'"));
|
|
508
|
+
const dumped = tuplesOf(newer);
|
|
509
|
+
const withColumn = {
|
|
510
|
+
...newer,
|
|
511
|
+
tables: newer.tables.map((tb) => (tb === dumped ? { ...tb, columns: [...tb.columns, 'granted_by'] } : tb)),
|
|
512
|
+
};
|
|
513
|
+
const byKey = (table) => {
|
|
514
|
+
const at = (c) => table.columns.indexOf(c);
|
|
515
|
+
return new Map(table.rows.map((r) => [`${r[at('subject')]} ${r[at('relation')]}`, r[at('granted_by')]]));
|
|
516
|
+
};
|
|
517
|
+
const dest = await blank();
|
|
518
|
+
await host.restoreScope(staff, t, dest, withColumn);
|
|
519
|
+
const first = await host.admin.exportScope(staff, t, dest);
|
|
520
|
+
const back = tuplesOf(first);
|
|
521
|
+
expect(back.columns.filter((c) => c === 'granted_by')).toHaveLength(1);
|
|
522
|
+
expect(back.ddl).toMatch(/"granted_by"/);
|
|
523
|
+
expect(back.ddl).not.toMatch(/granted_by TEXT|NOCASE|DEFAULT/);
|
|
524
|
+
// Every value the dump carried, on the row it came with.
|
|
525
|
+
const kept = byKey(back);
|
|
526
|
+
for (const [key, value] of byKey(tuplesOf(withColumn)))
|
|
527
|
+
expect(kept.get(key)).toBe(value);
|
|
528
|
+
// The checker reads the columns it knows, as before.
|
|
529
|
+
await expectGenuineGrantMoved(dest);
|
|
530
|
+
// Round trip: that export restored again keeps the column and its values, byte for byte.
|
|
531
|
+
await host.restoreScope(staff, t, dest, first);
|
|
532
|
+
expect((await host.admin.exportScope(staff, t, dest)).tables).toEqual(first.tables);
|
|
533
|
+
});
|
|
534
|
+
it('an unknown spine column spelled in other case is added lowercased, as every kernel column is spelled', async () => {
|
|
535
|
+
const dumped = tuplesOf(planted);
|
|
536
|
+
const dump = {
|
|
537
|
+
...planted,
|
|
538
|
+
tables: planted.tables.map((tb) => tb === dumped ? { ...tb, columns: [...tb.columns, 'Granted_By'], rows: tb.rows.map((r) => [...r, 'actor']) } : tb),
|
|
539
|
+
};
|
|
540
|
+
const dest = await blank();
|
|
541
|
+
await host.restoreScope(staff, t, dest, dump);
|
|
542
|
+
const back = tuplesOf(await host.admin.exportScope(staff, t, dest));
|
|
543
|
+
expect(back.columns.filter((c) => c.toLowerCase() === 'granted_by')).toEqual(['granted_by']);
|
|
544
|
+
const at = back.columns.indexOf('granted_by');
|
|
545
|
+
expect(new Set(back.rows.map((r) => r[at]))).toEqual(new Set(['actor']));
|
|
546
|
+
});
|
|
547
|
+
it("a spine column named for SQLite's rowid is refused, in any case, and the target keeps every table it held", async () => {
|
|
548
|
+
// A real column named rowid, oid or _rowid_ shadows the alias. On the outbox that is the
|
|
549
|
+
// mark #1705's and #1746's since-queries read, so a dump's value would silence both.
|
|
550
|
+
const dest = await blank();
|
|
551
|
+
const before = await everything(dest);
|
|
552
|
+
for (const alias of ['rowid', 'OID', '_rowid_']) {
|
|
553
|
+
const dump = {
|
|
554
|
+
...planted,
|
|
555
|
+
tables: planted.tables.map((tb) => tb.name === '_substrat_outbox'
|
|
556
|
+
? { ...tb, columns: [...tb.columns, alias], rows: tb.rows.map((r) => [...r, 999999]) }
|
|
557
|
+
: tb),
|
|
558
|
+
};
|
|
559
|
+
await expect(host.restoreScope(staff, t, dest, dump)).rejects.toThrow(new RegExp(`restore refused: the dump's _substrat_outbox has column\\(s\\) named for SQLite's rowid: ${alias}\\b`));
|
|
560
|
+
expect(await everything(dest)).toEqual(before);
|
|
561
|
+
}
|
|
562
|
+
});
|
|
563
|
+
it('spine tables the kernel does not build are refused, all named, and the target keeps every table it held', async () => {
|
|
564
|
+
const dest = await blank();
|
|
565
|
+
const before = await everything(dest);
|
|
566
|
+
const extra = (name, rows) => ({ name, ddl: `CREATE TABLE ${name} (id TEXT)`, columns: ['id'], rows });
|
|
567
|
+
await expect(host.restoreScope(staff, t, dest, {
|
|
568
|
+
...planted,
|
|
569
|
+
// One empty and one with a row: a table is refused for existing, not for its rows.
|
|
570
|
+
tables: [...planted.tables, extra('_substrat_smuggled', []), extra('_substrat_zz_newer', [['r1']])],
|
|
571
|
+
})).rejects.toThrow(/restore refused: the dump carries spine table\(s\) this host's kernel does not build: _substrat_smuggled, _substrat_zz_newer\. It was exported by a different kind of host .* or by a newer kernel/);
|
|
572
|
+
expect(await everything(dest)).toEqual(before);
|
|
573
|
+
});
|
|
574
|
+
it('a spine column the dump lacks takes the default: a tuples table from before revoked_at restores', async () => {
|
|
575
|
+
const table = tuplesOf(planted);
|
|
576
|
+
const at = table.columns.indexOf('revoked_at');
|
|
577
|
+
expect(at).toBeGreaterThanOrEqual(0);
|
|
578
|
+
const legacy = {
|
|
579
|
+
...planted,
|
|
580
|
+
tables: planted.tables.map((tb) => tb === table
|
|
581
|
+
? {
|
|
582
|
+
...tb,
|
|
583
|
+
// A stored DDL may keep the column's comment (node) or not (a DO).
|
|
584
|
+
ddl: tb.ddl.replace(/,\s*(?:--[^\n]*\n\s*)*revoked_at TEXT/, ''),
|
|
585
|
+
columns: tb.columns.filter((c) => c !== 'revoked_at'),
|
|
586
|
+
rows: tb.rows.map((r) => r.filter((_, i) => i !== at)),
|
|
587
|
+
}
|
|
588
|
+
: tb),
|
|
589
|
+
};
|
|
590
|
+
expect(tuplesOf(legacy).ddl).not.toMatch(/revoked_at/);
|
|
591
|
+
const dest = await blank();
|
|
592
|
+
await host.restoreScope(staff, t, dest, legacy);
|
|
593
|
+
const rows = await rowsFor(dest, gina);
|
|
594
|
+
expect(rows.map((r) => [r.object, r.revoked_at])).toEqual([[`scope:${dest}`, null]]);
|
|
595
|
+
expect(await allowed(gina, dest)).toBe(true);
|
|
596
|
+
});
|
|
597
|
+
it('a pre-#1288 schedule-state table under a name in other case still restores, with kind derived', async () => {
|
|
598
|
+
const legacy = {
|
|
599
|
+
name: '_Substrat_schedule_state',
|
|
600
|
+
ddl: 'CREATE TABLE _Substrat_schedule_state (schedule_op TEXT PRIMARY KEY, last_run_at TEXT, last_status TEXT)',
|
|
601
|
+
columns: ['schedule_op', 'last_run_at', 'last_status'],
|
|
602
|
+
rows: [
|
|
603
|
+
['freshness:repoint.done', '2026-09-01T00:00:00.000Z', 'failed'],
|
|
604
|
+
['repoint/tick', '2026-09-01T00:00:00.000Z', 'ok'],
|
|
605
|
+
],
|
|
606
|
+
};
|
|
607
|
+
const dest = await blank();
|
|
608
|
+
await host.restoreScope(staff, t, dest, {
|
|
609
|
+
...planted,
|
|
610
|
+
tables: [...planted.tables.filter((tb) => tb.name !== '_substrat_schedule_state'), legacy],
|
|
611
|
+
});
|
|
612
|
+
const state = (await everything(dest)).find((tb) => tb.name === '_substrat_schedule_state');
|
|
613
|
+
expect(state).toBeDefined();
|
|
614
|
+
const read = state.rows.map((r) => Object.fromEntries(state.columns.map((c, i) => [c, r[i]])));
|
|
615
|
+
expect(read.map((r) => [r.kind, r.schedule_op, r.last_status, r.invocation_id])).toEqual([
|
|
616
|
+
['freshness', 'freshness:repoint.done', 'failed', null],
|
|
617
|
+
['schedule', 'repoint/tick', 'ok', null],
|
|
618
|
+
]);
|
|
619
|
+
});
|
|
620
|
+
it('export, restore, export: the second export is the first, byte for byte', async () => {
|
|
621
|
+
const scope = await blank();
|
|
622
|
+
await host.admin.assignRole(staff, { principalId: gina, roleKey: 'reader', node: { tenantId: t, scopeId: scope } });
|
|
623
|
+
const first = await host.admin.exportScope(staff, t, scope);
|
|
624
|
+
await host.restoreScope(staff, t, scope, first);
|
|
625
|
+
const second = await host.admin.exportScope(staff, t, scope);
|
|
626
|
+
expect(second.tables).toEqual(first.tables);
|
|
627
|
+
});
|
|
628
|
+
});
|
|
229
629
|
});
|
|
230
630
|
}
|
|
231
631
|
//# sourceMappingURL=scope-repoint-suite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-repoint-suite.js","sourceRoot":"","sources":["../src/scope-repoint-suite.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scope-repoint-suite.js","sourceRoot":"","sources":["../src/scope-repoint-suite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-switch-suite.d.ts","sourceRoot":"","sources":["../src/system-switch-suite.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC3C,IAAI,
|
|
1
|
+
{"version":3,"file":"system-switch-suite.d.ts","sourceRoot":"","sources":["../src/system-switch-suite.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC3C,IAAI,CAorBN"}
|
|
@@ -383,9 +383,12 @@ export function systemSwitchContractSuite(adapterName, makeFixture) {
|
|
|
383
383
|
});
|
|
384
384
|
/**
|
|
385
385
|
* #1742 review: the restore's switch runs inside the replay's own transaction, on both
|
|
386
|
-
* adapters.
|
|
387
|
-
*
|
|
388
|
-
*
|
|
386
|
+
* adapters. This was proven with a dump whose `_substrat_tuples` DDL carried a CHECK refusing
|
|
387
|
+
* the OFF marker. Since #1883 a restore builds that table from the kernel's DDL, so a dump can
|
|
388
|
+
* no longer make the switch throw: its CHECK never reaches the table, and the restore lands
|
|
389
|
+
* switched off. The rollback itself is proven per adapter, with the fault injected at the
|
|
390
|
+
* switch's own write (`adapter-cloudflare/test/contract.test.ts`,
|
|
391
|
+
* `adapter-sqlite/test/restore-switch-rollback.test.ts`).
|
|
389
392
|
*/
|
|
390
393
|
const refusingMarker = (dump) => ({
|
|
391
394
|
...dump,
|
|
@@ -393,16 +396,16 @@ export function systemSwitchContractSuite(adapterName, makeFixture) {
|
|
|
393
396
|
? { ...tbl, ddl: tbl.ddl.replace(/\)\s*$/, ", CHECK (relation <> 'switch:off'))") }
|
|
394
397
|
: tbl),
|
|
395
398
|
});
|
|
396
|
-
it('a
|
|
399
|
+
it('a dump whose tuples DDL refuses the OFF marker cannot reach the kernel table: the restore lands off (#1742, #1883)', async () => {
|
|
397
400
|
const s = await newScope();
|
|
398
401
|
const before = refusingMarker(await host.admin.exportScope(staff, t, s));
|
|
399
|
-
expect(before.tables.
|
|
402
|
+
expect(before.tables.find((tbl) => tbl.name === '_substrat_tuples')?.ddl).toMatch(/CHECK \(relation <> 'switch:off'\)/);
|
|
400
403
|
await off(s);
|
|
401
|
-
await
|
|
404
|
+
await host.restoreScope(staff, t, s, before);
|
|
402
405
|
expect((await status(s)).map((e) => [e.schedules, e.recorded])).toEqual([['off', 'off']]);
|
|
403
406
|
expect(await host.runDueSchedules(SCHED, t, s)).toEqual(switchedOff);
|
|
404
|
-
|
|
405
|
-
expect(
|
|
407
|
+
const tuples = (await host.admin.exportScope(staff, t, s)).tables.find((tbl) => tbl.name === '_substrat_tuples');
|
|
408
|
+
expect(tuples?.ddl).not.toMatch(/CHECK/);
|
|
406
409
|
});
|
|
407
410
|
it('twin: the same dump with nothing recorded off restores, and fires', async () => {
|
|
408
411
|
const s = await newScope();
|