@substrat-run/contract-tests 0.120.0 → 0.121.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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/list-suite.d.ts.map +1 -1
- package/dist/list-suite.js +13 -0
- package/dist/list-suite.js.map +1 -1
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +10 -0
- package/dist/modules.js.map +1 -1
- package/dist/sql-limits-suite.d.ts +3 -0
- package/dist/sql-limits-suite.d.ts.map +1 -0
- package/dist/sql-limits-suite.js +149 -0
- package/dist/sql-limits-suite.js.map +1 -0
- package/dist/system-switch-suite.d.ts.map +1 -1
- package/dist/system-switch-suite.js +148 -6
- package/dist/system-switch-suite.js.map +1 -1
- package/dist/vertical-events-suite.d.ts +33 -2
- package/dist/vertical-events-suite.d.ts.map +1 -1
- package/dist/vertical-events-suite.js +591 -4
- package/dist/vertical-events-suite.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract suite for the SQL limits a Durable Object enforces on `ctx.sql` (#1741).
|
|
3
|
+
*
|
|
4
|
+
* One sentence: **a statement over a hosted limit is refused, with the hosted message, by
|
|
5
|
+
* BOTH adapters — and a statement at exactly the limit is not.**
|
|
6
|
+
*
|
|
7
|
+
* The limits are `DO_SQL_LIMITS` in the kernel, measured against a real Durable Object by
|
|
8
|
+
* `packages/adapter-cloudflare/test/do-sql-limits.test.ts`. This suite is the parity half:
|
|
9
|
+
* the pure host enforces them itself (`guardSqlLimits`, wrapped around `ctx.sql`), the DO
|
|
10
|
+
* host gets them from its own SQLite, and a vertical is written against the first and
|
|
11
|
+
* deployed onto the second. So each case pairs a refusal with its at-the-limit twin, and the
|
|
12
|
+
* refusal is matched against the DO's exact message. A guard that refused everything fails
|
|
13
|
+
* the twins; one that refused nothing fails the refusals.
|
|
14
|
+
*/
|
|
15
|
+
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
16
|
+
import { platformActorId, principalId, scopeId, tenantId } from '@substrat-run/contracts';
|
|
17
|
+
import { DO_SQL_LIMITS, ulid } from '@substrat-run/kernel';
|
|
18
|
+
import { testMod } from './modules.js';
|
|
19
|
+
const { compoundTerms, boundParameters, statementBytes } = DO_SQL_LIMITS;
|
|
20
|
+
const compound = (terms, op = 'UNION ALL') => Array.from({ length: terms }, (_, i) => `SELECT ${i}`).join(` ${op} `);
|
|
21
|
+
const marks = (n) => Array.from({ length: n }, () => '?').join(', ');
|
|
22
|
+
/** `SELECT '<a…>'`, exactly `bytes` bytes long. */
|
|
23
|
+
const selectOfLength = (bytes) => `SELECT '${'a'.repeat(bytes - "SELECT ''".length)}'`;
|
|
24
|
+
const cases = [
|
|
25
|
+
// -- compound SELECT terms -------------------------------------------------
|
|
26
|
+
{ name: `${compoundTerms} UNION ALL terms`, sql: compound(compoundTerms) },
|
|
27
|
+
{
|
|
28
|
+
name: `${compoundTerms + 1} UNION ALL terms`,
|
|
29
|
+
sql: compound(compoundTerms + 1),
|
|
30
|
+
refusal: 'too many terms in compound SELECT: SQLITE_ERROR',
|
|
31
|
+
},
|
|
32
|
+
{ name: `${compoundTerms} UNION terms`, sql: compound(compoundTerms, 'UNION') },
|
|
33
|
+
{
|
|
34
|
+
name: `${compoundTerms + 1} UNION terms`,
|
|
35
|
+
sql: compound(compoundTerms + 1, 'UNION'),
|
|
36
|
+
refusal: 'too many terms in compound SELECT: SQLITE_ERROR',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: `${compoundTerms + 1} INTERSECT terms`,
|
|
40
|
+
sql: compound(compoundTerms + 1, 'INTERSECT'),
|
|
41
|
+
refusal: 'too many terms in compound SELECT: SQLITE_ERROR',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: `${compoundTerms + 1} EXCEPT terms`,
|
|
45
|
+
sql: compound(compoundTerms + 1, 'EXCEPT'),
|
|
46
|
+
refusal: 'too many terms in compound SELECT: SQLITE_ERROR',
|
|
47
|
+
},
|
|
48
|
+
// A subquery starts its own compound: two chains at the limit are fine, one over is not.
|
|
49
|
+
{
|
|
50
|
+
name: 'two subqueries of exactly the limit, in one statement',
|
|
51
|
+
sql: `SELECT * FROM (${compound(compoundTerms)}) UNION ALL SELECT * FROM (${compound(compoundTerms)})`,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'a CTE body over the limit',
|
|
55
|
+
sql: `WITH c AS (${compound(compoundTerms + 1)}) SELECT * FROM c`,
|
|
56
|
+
refusal: 'too many terms in compound SELECT: SQLITE_ERROR',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
// The measured exemption: VALUES rows are not compound terms. Shipping this as a refusal
|
|
60
|
+
// would push verticals off the one form that batches an insert.
|
|
61
|
+
name: `a ${compoundTerms * 100}-row VALUES list`,
|
|
62
|
+
sql: `SELECT * FROM (VALUES ${Array.from({ length: compoundTerms * 100 }, () => '(1)').join(', ')})`,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'the word UNION inside a string and a comment',
|
|
66
|
+
sql: `SELECT 'a UNION ALL b UNION ALL c UNION ALL d UNION ALL e UNION ALL f' /* UNION UNION UNION UNION UNION UNION */`,
|
|
67
|
+
},
|
|
68
|
+
// -- bound parameters ------------------------------------------------------
|
|
69
|
+
{
|
|
70
|
+
name: `${boundParameters} bound parameters`,
|
|
71
|
+
sql: `SELECT 1 WHERE 1 IN (${marks(boundParameters)})`,
|
|
72
|
+
params: Array(boundParameters).fill(1),
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: `${boundParameters + 1} bound parameters`,
|
|
76
|
+
sql: `SELECT 1 WHERE 1 IN (${marks(boundParameters + 1)})`,
|
|
77
|
+
params: Array(boundParameters + 1).fill(1),
|
|
78
|
+
// The offset is SQLite's own: the byte where the 101st `?` starts, after 100 of `?, `.
|
|
79
|
+
refusal: `too many SQL variables at offset ${'SELECT 1 WHERE 1 IN ('.length + '?, '.length * boundParameters}: SQLITE_ERROR`,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: `?${boundParameters + 1} (numbered)`,
|
|
83
|
+
sql: `SELECT ?${boundParameters + 1}`,
|
|
84
|
+
params: Array(boundParameters + 1).fill(1),
|
|
85
|
+
refusal: `variable number must be between ?1 and ?${boundParameters} at offset 7: SQLITE_ERROR`,
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'a question mark inside a string is not a parameter',
|
|
89
|
+
sql: `SELECT '${'?'.repeat(boundParameters + 50)}'`,
|
|
90
|
+
},
|
|
91
|
+
// -- statement length ------------------------------------------------------
|
|
92
|
+
{ name: `a statement of exactly ${statementBytes} bytes`, sql: selectOfLength(statementBytes) },
|
|
93
|
+
{
|
|
94
|
+
name: `a statement of ${statementBytes + 1} bytes`,
|
|
95
|
+
sql: selectOfLength(statementBytes + 1),
|
|
96
|
+
refusal: 'statement too long: SQLITE_TOOBIG',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
// Counted in UTF-8 bytes: 50 001 two-byte characters are 100 002 bytes in 50 010 characters.
|
|
100
|
+
name: 'a statement over the limit in bytes but under it in characters',
|
|
101
|
+
sql: `SELECT '${'é'.repeat(statementBytes / 2)}'`,
|
|
102
|
+
refusal: 'statement too long: SQLITE_TOOBIG',
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
export function sqlLimitsContractSuite(adapterName, makeFixture) {
|
|
106
|
+
describe(`SQL limits (ctx.sql): ${adapterName}`, () => {
|
|
107
|
+
let fixture;
|
|
108
|
+
let host;
|
|
109
|
+
let stub;
|
|
110
|
+
const t1 = tenantId.parse(ulid());
|
|
111
|
+
const s1 = scopeId.parse(ulid());
|
|
112
|
+
const alice = principalId.parse(ulid());
|
|
113
|
+
const staff = platformActorId.parse(ulid());
|
|
114
|
+
beforeAll(async () => {
|
|
115
|
+
fixture = await makeFixture();
|
|
116
|
+
host = fixture.host;
|
|
117
|
+
host.registerModule(testMod);
|
|
118
|
+
await host.admin.createTenant(staff, { id: t1, slug: 'sql-limits', name: 'SQL limits' });
|
|
119
|
+
await host.admin.grantEntitlement(staff, t1, 'testmod');
|
|
120
|
+
await host.provisionScope(staff, { tenantId: t1, scopeId: s1, vertical: 'sql-limits' });
|
|
121
|
+
await host.admin.activateScope(staff, t1, s1);
|
|
122
|
+
stub = await host.getScope(alice, t1, s1);
|
|
123
|
+
});
|
|
124
|
+
afterAll(async () => {
|
|
125
|
+
await fixture.cleanup();
|
|
126
|
+
});
|
|
127
|
+
for (const c of cases) {
|
|
128
|
+
for (const door of ['sql-query', 'sql-exec']) {
|
|
129
|
+
if (door === 'sql-exec' && !/^SELECT|^WITH/.test(c.sql))
|
|
130
|
+
continue;
|
|
131
|
+
it(`${c.refusal ? 'refuses' : 'runs'} ${c.name} (${door})`, async () => {
|
|
132
|
+
const run = stub.invoke(`testmod/${door}`, { sql: c.sql, params: c.params ?? [] });
|
|
133
|
+
if (c.refusal === undefined) {
|
|
134
|
+
await expect(run).resolves.not.toBeUndefined();
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// The hosted message is the whole contract: match it exactly, not by prefix.
|
|
138
|
+
await expect(run).rejects.toThrow(new RegExp(`^${c.refusal.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}$`));
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
it('refuses without taking the scope down — the next statement still runs', async () => {
|
|
144
|
+
await expect(stub.invoke('testmod/sql-query', { sql: compound(compoundTerms + 1) })).rejects.toThrow();
|
|
145
|
+
await expect(stub.invoke('testmod/sql-query', { sql: 'SELECT 1 AS ok' })).resolves.toEqual([{ ok: 1 }]);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=sql-limits-suite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-limits-suite.js","sourceRoot":"","sources":["../src/sql-limits-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":"AAaA,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":"AAaA,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,CA4cN"}
|
|
@@ -227,12 +227,17 @@ export function systemSwitchContractSuite(adapterName, makeFixture) {
|
|
|
227
227
|
*/
|
|
228
228
|
it('the status read agrees with the runner through on, off, and on again — and names who, when, why while off', async () => {
|
|
229
229
|
const s = await newScope();
|
|
230
|
-
expect(await status(s)).toEqual([{ moduleId: SCHED, schedules: 'on', switchedOff: null }]);
|
|
230
|
+
expect(await status(s)).toEqual([{ moduleId: SCHED, schedules: 'on', switchedOff: null, recorded: null }]);
|
|
231
231
|
expect((await host.runDueSchedules(SCHED, t, s)).switchedOff).toBeUndefined();
|
|
232
232
|
const before = new Date().toISOString();
|
|
233
233
|
await off(s);
|
|
234
234
|
expect(await status(s)).toEqual([
|
|
235
|
-
{
|
|
235
|
+
{
|
|
236
|
+
moduleId: SCHED,
|
|
237
|
+
schedules: 'off',
|
|
238
|
+
switchedOff: { actor: staff, reason, at: expect.any(String) },
|
|
239
|
+
recorded: 'off',
|
|
240
|
+
},
|
|
236
241
|
]);
|
|
237
242
|
const entries = await status(s);
|
|
238
243
|
expect(entries[0].switchedOff.at >= before).toBe(true);
|
|
@@ -246,25 +251,162 @@ export function systemSwitchContractSuite(adapterName, makeFixture) {
|
|
|
246
251
|
});
|
|
247
252
|
expect((await status(s))[0].switchedOff).toMatchObject({ actor: staff, reason: 'still investigating' });
|
|
248
253
|
await on(s);
|
|
249
|
-
expect(await status(s)).toEqual([{ moduleId: SCHED, schedules: 'on', switchedOff: null }]);
|
|
254
|
+
expect(await status(s)).toEqual([{ moduleId: SCHED, schedules: 'on', switchedOff: null, recorded: 'on' }]);
|
|
250
255
|
expect((await host.runDueSchedules(SCHED, t, s)).switchedOff).toBeUndefined();
|
|
251
256
|
});
|
|
252
257
|
it('a module with no schedules is absent from the read until it holds something, on or off', async () => {
|
|
253
258
|
const s = await newScope();
|
|
254
259
|
// JOBS declares no schedules, so provisioning seats it nothing — it holds no grant
|
|
255
260
|
// and no marker, and the enumeration (unlike `ungranted`) reports nothing for it.
|
|
256
|
-
expect(await status(s)).toEqual([{ moduleId: SCHED, schedules: 'on', switchedOff: null }]);
|
|
261
|
+
expect(await status(s)).toEqual([{ moduleId: SCHED, schedules: 'on', switchedOff: null, recorded: null }]);
|
|
257
262
|
await grant(s, 'jobs:write', JOBS);
|
|
258
|
-
expect(await status(s)).toEqual(expect.arrayContaining([{ moduleId: JOBS, schedules: 'on', switchedOff: null }]));
|
|
263
|
+
expect(await status(s)).toEqual(expect.arrayContaining([{ moduleId: JOBS, schedules: 'on', switchedOff: null, recorded: null }]));
|
|
259
264
|
await off(s, JOBS);
|
|
260
265
|
const entries = await status(s);
|
|
261
266
|
expect(entries.find((e) => e.moduleId === JOBS)).toEqual({
|
|
262
267
|
moduleId: JOBS,
|
|
263
268
|
schedules: 'off',
|
|
264
269
|
switchedOff: { actor: staff, reason, at: expect.any(String) },
|
|
270
|
+
recorded: 'off',
|
|
265
271
|
});
|
|
266
272
|
// The other module is untouched by JOBS's switch.
|
|
267
|
-
expect(entries.find((e) => e.moduleId === SCHED)).toEqual({
|
|
273
|
+
expect(entries.find((e) => e.moduleId === SCHED)).toEqual({
|
|
274
|
+
moduleId: SCHED,
|
|
275
|
+
schedules: 'on',
|
|
276
|
+
switchedOff: null,
|
|
277
|
+
recorded: null,
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
// -- the directory's record (#1674) --------------------------------------------------
|
|
281
|
+
const records = (s) => host.admin.listSystemSwitches(staff, { tenantId: t, scopeId: s });
|
|
282
|
+
/** The scope's storage, gone: an empty restore re-asserts the bare spine (#321). */
|
|
283
|
+
const wipe = (s) => host.restoreScope(staff, t, s, { tenantId: t, scopeId: s, capturedAt: new Date().toISOString(), tables: [] });
|
|
284
|
+
const reassert = (s) => host.admin.reassertSystemSwitches(staff, { tenantId: t, scopeId: s });
|
|
285
|
+
it('the record follows every move — off, on, off — and agrees with the per-scope read each time', async () => {
|
|
286
|
+
const s = await newScope();
|
|
287
|
+
expect(await records(s)).toEqual([]);
|
|
288
|
+
const first = await off(s);
|
|
289
|
+
expect(await records(s)).toEqual([
|
|
290
|
+
{
|
|
291
|
+
tenantId: t,
|
|
292
|
+
scopeId: s,
|
|
293
|
+
moduleId: SCHED,
|
|
294
|
+
vertical: null,
|
|
295
|
+
position: 'off',
|
|
296
|
+
actor: staff,
|
|
297
|
+
reason,
|
|
298
|
+
operationId: first.operationId,
|
|
299
|
+
at: expect.any(String),
|
|
300
|
+
},
|
|
301
|
+
]);
|
|
302
|
+
expect((await status(s)).map((e) => [e.schedules, e.recorded])).toEqual([['off', 'off']]);
|
|
303
|
+
const back = await on(s);
|
|
304
|
+
expect(await records(s)).toEqual([
|
|
305
|
+
expect.objectContaining({ position: 'on', reason: 'resolved', operationId: back.operationId }),
|
|
306
|
+
]);
|
|
307
|
+
expect((await status(s)).map((e) => [e.schedules, e.recorded])).toEqual([['on', 'on']]);
|
|
308
|
+
const again = await off(s);
|
|
309
|
+
expect(await records(s)).toEqual([
|
|
310
|
+
expect.objectContaining({ position: 'off', reason, operationId: again.operationId }),
|
|
311
|
+
]);
|
|
312
|
+
expect((await status(s)).map((e) => [e.schedules, e.recorded])).toEqual([['off', 'off']]);
|
|
313
|
+
});
|
|
314
|
+
it('the fleet read lists a switched-off scope, and drops it from `off` once restored', async () => {
|
|
315
|
+
const a = await newScope();
|
|
316
|
+
const b = await newScope();
|
|
317
|
+
await off(a);
|
|
318
|
+
await off(b);
|
|
319
|
+
await on(b);
|
|
320
|
+
const offHere = await host.admin.listSystemSwitches(staff, { tenantId: t, position: 'off' });
|
|
321
|
+
expect(offHere.map((r) => r.scopeId)).toContain(a);
|
|
322
|
+
expect(offHere.map((r) => r.scopeId)).not.toContain(b);
|
|
323
|
+
const onHere = await host.admin.listSystemSwitches(staff, { tenantId: t, position: 'on' });
|
|
324
|
+
expect(onHere.map((r) => r.scopeId)).toContain(b);
|
|
325
|
+
});
|
|
326
|
+
it('a refused switch records nothing — so no reconcile can switch off a module installed later', async () => {
|
|
327
|
+
const s = await newScope();
|
|
328
|
+
const stranger = moduleId.parse('@test/not-held');
|
|
329
|
+
await off(s, stranger).catch(() => undefined);
|
|
330
|
+
await on(s, stranger).catch(() => undefined);
|
|
331
|
+
expect(await records(s)).toEqual([]);
|
|
332
|
+
expect(await reassert(s)).toEqual([]);
|
|
333
|
+
});
|
|
334
|
+
it('a WIPED scope, re-provisioned, stays off: the seat recreates the grants, the record takes them back, ON returns them', async () => {
|
|
335
|
+
const s = await newScope();
|
|
336
|
+
await off(s);
|
|
337
|
+
await wipe(s);
|
|
338
|
+
// The storage no longer knows the switch was pulled; the directory still does.
|
|
339
|
+
expect(await status(s)).toEqual([
|
|
340
|
+
{ moduleId: SCHED, schedules: 'ungranted', switchedOff: null, recorded: 'off' },
|
|
341
|
+
]);
|
|
342
|
+
// The reconcile seats `sched:tick` live again (#1659: a missing tuple is created) —
|
|
343
|
+
// and re-asserts OFF after it, so the schedules stay off.
|
|
344
|
+
await provision(s);
|
|
345
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toEqual(switchedOff);
|
|
346
|
+
expect((await status(s)).map((e) => [e.schedules, e.recorded])).toEqual([['off', 'off']]);
|
|
347
|
+
const reasserted = await host.admin.auditLog(staff, { tenantId: t, scopeId: s, action: ['reassertSystemSwitch'] });
|
|
348
|
+
expect(reasserted.map((e) => e.after)).toEqual([
|
|
349
|
+
expect.objectContaining({ moduleId: SCHED, changed: true, permissions: ['sched:tick'] }),
|
|
350
|
+
]);
|
|
351
|
+
// The explanation is still the operator's: the re-assert is its own action.
|
|
352
|
+
expect((await status(s))[0].switchedOff).toMatchObject({ actor: staff, reason });
|
|
353
|
+
// What OFF took from the freshly seated scope, ON gives back.
|
|
354
|
+
expect(await on(s)).toEqual({ ...moved('on', true), permissions: ['sched:tick'] });
|
|
355
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toMatchObject({ fired: SCHEDULES, failed: 0 });
|
|
356
|
+
});
|
|
357
|
+
it('a restore of a dump from BEFORE the switch shows the drift, and the re-assert puts it back off', async () => {
|
|
358
|
+
const s = await newScope();
|
|
359
|
+
const before = await host.admin.exportScope(staff, t, s);
|
|
360
|
+
await off(s);
|
|
361
|
+
await host.restoreScope(staff, t, s, before);
|
|
362
|
+
// The dump carried the grant live and no marker: the scope says on, the record off.
|
|
363
|
+
expect((await status(s)).map((e) => [e.schedules, e.recorded])).toEqual([['on', 'off']]);
|
|
364
|
+
expect(await reassert(s)).toEqual([{ moduleId: SCHED, held: true, changed: true }]);
|
|
365
|
+
expect((await status(s)).map((e) => [e.schedules, e.recorded])).toEqual([['off', 'off']]);
|
|
366
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toEqual(switchedOff);
|
|
367
|
+
// Idempotent: the marker is live, so a second pass moves and audits nothing more.
|
|
368
|
+
expect(await reassert(s)).toEqual([{ moduleId: SCHED, held: true, changed: false }]);
|
|
369
|
+
const rows = await host.admin.auditLog(staff, { tenantId: t, scopeId: s, action: ['reassertSystemSwitch'] });
|
|
370
|
+
expect(rows).toHaveLength(1);
|
|
371
|
+
});
|
|
372
|
+
it('a REFUSED restore leaves the record off, so the next reconcile still switches the module off (#1674 review)', async () => {
|
|
373
|
+
const s = await newScope();
|
|
374
|
+
await off(s);
|
|
375
|
+
await wipe(s);
|
|
376
|
+
// The wiped scope holds nothing for the module, so the restore is refused…
|
|
377
|
+
const refused = await on(s).then(() => null, (e) => e);
|
|
378
|
+
expect(errorCodeOf(refused)).toBe('not_found');
|
|
379
|
+
// …and the record it wrote ahead of the move is put back: still off, still the incident.
|
|
380
|
+
expect(await records(s)).toEqual([expect.objectContaining({ position: 'off', reason })]);
|
|
381
|
+
await provision(s);
|
|
382
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toEqual(switchedOff);
|
|
383
|
+
});
|
|
384
|
+
it('a deleted preview and a reaped scope leave the fleet read (#1674 review)', async () => {
|
|
385
|
+
const preview = scopeId.parse(ulid());
|
|
386
|
+
await host.provisionScope(staff, { tenantId: t, scopeId: preview, kind: 'preview' });
|
|
387
|
+
await host.admin.activateScope(staff, t, preview);
|
|
388
|
+
await off(preview);
|
|
389
|
+
const reaped = await newScope();
|
|
390
|
+
await off(reaped);
|
|
391
|
+
const listed = async () => (await host.admin.listSystemSwitches(staff, { tenantId: t })).map((r) => r.scopeId);
|
|
392
|
+
expect(await listed()).toEqual(expect.arrayContaining([preview, reaped]));
|
|
393
|
+
await host.deleteSnapshot(staff, t, preview);
|
|
394
|
+
await host.admin.archiveScope(staff, t, reaped);
|
|
395
|
+
await host.admin.reapScope(staff, t, reaped, { force: true });
|
|
396
|
+
expect(await listed()).not.toContain(preview);
|
|
397
|
+
expect(await listed()).not.toContain(reaped);
|
|
398
|
+
});
|
|
399
|
+
it('a record never turns a module ON: a live marker beside a record of `on` stays off', async () => {
|
|
400
|
+
const s = await newScope();
|
|
401
|
+
await off(s);
|
|
402
|
+
const whileOff = await host.admin.exportScope(staff, t, s);
|
|
403
|
+
await on(s);
|
|
404
|
+
await host.restoreScope(staff, t, s, whileOff);
|
|
405
|
+
// The dump brought the marker back; the record says on. The marker wins.
|
|
406
|
+
expect((await status(s)).map((e) => [e.schedules, e.recorded])).toEqual([['off', 'on']]);
|
|
407
|
+
expect(await reassert(s)).toEqual([]);
|
|
408
|
+
await provision(s);
|
|
409
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toEqual(switchedOff);
|
|
268
410
|
});
|
|
269
411
|
});
|
|
270
412
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-switch-suite.js","sourceRoot":"","sources":["../src/system-switch-suite.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"system-switch-suite.js","sourceRoot":"","sources":["../src/system-switch-suite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { z } from '@substrat-run/contracts';
|
|
2
|
-
import { type ModuleRegistration, type ScopeHost } from '@substrat-run/kernel';
|
|
1
|
+
import { z, type ImportCursorMove, type ImportCursorMoved, type ScopeId, type TenantId } from '@substrat-run/contracts';
|
|
2
|
+
import { type CrossVerticalReach, type ModuleRegistration, type ScopeHost } from '@substrat-run/kernel';
|
|
3
3
|
export declare const CRM_VERTICAL = "acme/crm";
|
|
4
4
|
export declare const BOARD_VERTICAL = "acme/board";
|
|
5
5
|
export declare const crmExportModManifest: {
|
|
@@ -262,6 +262,37 @@ export interface VerticalEventsFixture {
|
|
|
262
262
|
producer: ScopeHost;
|
|
263
263
|
consumer: ScopeHost;
|
|
264
264
|
cleanup: () => Promise<void>;
|
|
265
|
+
/**
|
|
266
|
+
* How the phase reaches the two scopes of an edge (#1705 PR 2). Absent, each scope is
|
|
267
|
+
* reached through the host serving it, in process. The hosted fixture passes the control
|
|
268
|
+
* plane's own reach instead, over each deployment's `/internal` surface, so every claim
|
|
269
|
+
* below is also held across the wire. The suite keeps its own `candidates`, which scope
|
|
270
|
+
* each test's passes to the tenants it created.
|
|
271
|
+
*/
|
|
272
|
+
transport?: Omit<CrossVerticalReach, 'candidates'>;
|
|
273
|
+
/**
|
|
274
|
+
* Called once a scope is installed through the directory (#1705 PR 2): the half of a hosted
|
|
275
|
+
* install the vertical's own deployment does (`/internal/provision`). Absent, installing
|
|
276
|
+
* through the directory is the whole install.
|
|
277
|
+
*/
|
|
278
|
+
afterInstall?: (tenantId: TenantId, scopeId: ScopeId, vertical: string) => Promise<void>;
|
|
279
|
+
/**
|
|
280
|
+
* How the replay lever is pulled (#1705 PR 3). Absent, through the consumer host's own
|
|
281
|
+
* `admin.moveImportCursor`. The hosted fixture pulls it on a control-plane host whose
|
|
282
|
+
* delegation crosses the consumer deployment's `/internal/import-cursor`.
|
|
283
|
+
*/
|
|
284
|
+
lever?: (tenantId: TenantId, scopeId: ScopeId, move: ImportCursorMove) => Promise<ImportCursorMoved>;
|
|
285
|
+
/**
|
|
286
|
+
* How edge health reads the consumer's door (#1705 PR 3). Absent, the health read's default
|
|
287
|
+
* (`admin.peerGrantsStatus` on the consumer host).
|
|
288
|
+
*/
|
|
289
|
+
door?: (tenantId: TenantId, scopeId: ScopeId) => Promise<readonly {
|
|
290
|
+
vertical: string;
|
|
291
|
+
calls: string;
|
|
292
|
+
switchedOff?: {
|
|
293
|
+
reason: string;
|
|
294
|
+
} | null;
|
|
295
|
+
}[]>;
|
|
265
296
|
}
|
|
266
297
|
/**
|
|
267
298
|
* Cross-vertical event delivery (#1705), against a real pair of deployments. Every claim the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertical-events-suite.d.ts","sourceRoot":"","sources":["../src/vertical-events-suite.ts"],"names":[],"mappings":"AACA,OAAO,EASL,CAAC,
|
|
1
|
+
{"version":3,"file":"vertical-events-suite.d.ts","sourceRoot":"","sources":["../src/vertical-events-suite.ts"],"names":[],"mappings":"AACA,OAAO,EASL,CAAC,EAED,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAGtB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAKL,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EAGvB,KAAK,SAAS,EAEf,MAAM,sBAAsB,CAAC;AAc9B,eAAO,MAAM,YAAY,aAAa,CAAC;AACvC,eAAO,MAAM,cAAc,eAAe,CAAC;AAI3C,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiC/B,CAAC;AAiFH,eAAO,MAAM,YAAY,EAAE,kBAuC1B,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BjC,CAAC;AAkCH,eAAO,MAAM,cAAc,EAAE,kBAgD5B,CAAC;AAIF;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;IACnD;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF;;;;OAIG;IACH,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrG;;;OAGG;IACH,IAAI,CAAC,EAAE,CACL,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,KACb,OAAO,CAAC,SAAS;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC,CAAC;CACvG;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,GAChD,IAAI,CAu+BN"}
|