@yss123/cage-testkit 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -9
- package/dist/derived-diagnostics.d.ts +98 -0
- package/dist/derived-diagnostics.js +73 -0
- package/dist/derived-diagnostics.js.map +1 -0
- package/dist/derived.d.ts +19 -5
- package/dist/derived.js +174 -45
- package/dist/derived.js.map +1 -1
- package/dist/embedded-exit.d.ts +14 -0
- package/dist/embedded-exit.js +30 -0
- package/dist/embedded-exit.js.map +1 -0
- package/dist/env.d.ts +20 -1
- package/dist/env.js +51 -0
- package/dist/env.js.map +1 -1
- package/dist/fakes.d.ts +31 -2
- package/dist/fakes.js +42 -2
- package/dist/fakes.js.map +1 -1
- package/dist/global-setup.d.ts +4 -0
- package/dist/global-setup.js +9 -0
- package/dist/global-setup.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/pg.d.ts +18 -0
- package/dist/pg.js +83 -12
- package/dist/pg.js.map +1 -1
- package/dist/session.d.ts +9 -0
- package/dist/session.js +7 -0
- package/dist/session.js.map +1 -1
- package/package.json +8 -7
package/dist/derived.js
CHANGED
|
@@ -1,13 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 为 CLI 生成的测试提供真实数据库性质检查:能力、状态、范围、掩码、审计、幂等与不变量。
|
|
3
|
+
* setup/teardown 控制隔离测试环境,通用样例无法构造或未覆盖成功路径时返回 SKIP,不能计为业务通过。
|
|
4
|
+
* 不变量序列使用固定种子并保存脱敏轨迹;通用性质测试补充项目定向用例,不能替代完整业务验收。
|
|
5
|
+
*/
|
|
6
|
+
// cage test 生成的测试文件调用这里,对可构造的样本执行内核性质检查。
|
|
7
|
+
// 它能发现已覆盖路径的授权与不变量回归,不能证明任意业务输入或所有 HTTP 路由都安全。
|
|
4
8
|
import { loadScoped, systemCtx } from '@yss123/cage-kernel';
|
|
5
9
|
import { sql } from 'kysely';
|
|
6
10
|
import { z } from 'zod';
|
|
7
11
|
import { createTestEnv } from './env.js';
|
|
8
12
|
import { sampleValue } from './fakes.js';
|
|
13
|
+
import { DerivedTestError, derivedRedactor, seededRandom, seededUuid } from './derived-diagnostics.js';
|
|
14
|
+
export { DerivedTestError } from './derived-diagnostics.js';
|
|
15
|
+
/**
|
|
16
|
+
* 统一跳过值,与成功断言结果区分;调用方须保留跳过计数和原因上下文。
|
|
17
|
+
*/
|
|
9
18
|
export const SKIP = 'skip';
|
|
10
|
-
|
|
19
|
+
/**
|
|
20
|
+
* 从可表达的 JSON Schema 生成简单候选输入,优先常量/枚举与非 null 分支。
|
|
21
|
+
* 不求解任意正则、refine 或跨字段规则;最终还需 safeParse,失败可导致派生用例跳过。
|
|
22
|
+
*/
|
|
23
|
+
function sampleJson(s, random) {
|
|
11
24
|
if (!s || typeof s !== 'object')
|
|
12
25
|
return null;
|
|
13
26
|
if (s.const !== undefined)
|
|
@@ -15,15 +28,15 @@ function sampleJson(s) {
|
|
|
15
28
|
if (s.enum)
|
|
16
29
|
return s.enum[0];
|
|
17
30
|
if (s.anyOf)
|
|
18
|
-
return sampleJson(s.anyOf.find((x) => x.type !== 'null') ?? s.anyOf[0]);
|
|
31
|
+
return sampleJson(s.anyOf.find((x) => x.type !== 'null') ?? s.anyOf[0], random);
|
|
19
32
|
switch (Array.isArray(s.type) ? s.type.find((t) => t !== 'null') : s.type) {
|
|
20
33
|
case 'string':
|
|
21
34
|
if (s.format === 'uuid')
|
|
22
|
-
return
|
|
35
|
+
return seededUuid(random);
|
|
23
36
|
if (s.format === 'email')
|
|
24
37
|
return 'someone@example.com';
|
|
25
38
|
if (s.format === 'date-time')
|
|
26
|
-
return
|
|
39
|
+
return '2026-01-01T00:00:00.000Z';
|
|
27
40
|
if (s.pattern)
|
|
28
41
|
return s.pattern.includes('\\d') ? '100.00' : 'a';
|
|
29
42
|
return 'x'.repeat(Math.max(1, s.minLength ?? 1));
|
|
@@ -33,14 +46,24 @@ function sampleJson(s) {
|
|
|
33
46
|
case 'boolean':
|
|
34
47
|
return false;
|
|
35
48
|
case 'array':
|
|
36
|
-
return Array.from({ length: Math.max(1, s.minItems ?? 1) }, () => sampleJson(s.items));
|
|
49
|
+
return Array.from({ length: Math.max(1, s.minItems ?? 1) }, () => sampleJson(s.items, random));
|
|
37
50
|
case 'object':
|
|
38
|
-
return Object.fromEntries(Object.entries(s.properties ?? {}).filter(([k]) => (s.required ?? []).includes(k)).map(([k, v]) => [k, sampleJson(v)]));
|
|
51
|
+
return Object.fromEntries(Object.entries(s.properties ?? {}).filter(([k]) => (s.required ?? []).includes(k)).map(([k, v]) => [k, sampleJson(v, random)]));
|
|
39
52
|
default:
|
|
40
53
|
return null;
|
|
41
54
|
}
|
|
42
55
|
}
|
|
43
|
-
|
|
56
|
+
/**
|
|
57
|
+
* 为一个 domain 建立延迟初始化的性质测试集合,默认固定种子,非法 seed 立即拒绝。
|
|
58
|
+
* 能力/状态检查构造针对性身份,范围检查验证详情、列表和裸安全视图;成功性质无法执行时报告 SKIP。
|
|
59
|
+
* invariantsHold 先验证初始夹具再执行有限命令序列,区分准备失败和执行失败,并保留可定位轨迹。
|
|
60
|
+
*/
|
|
61
|
+
export function derived(domain, options = {}) {
|
|
62
|
+
const seed = options.seed ?? 20261103;
|
|
63
|
+
if (!Number.isSafeInteger(seed) || seed < 0 || seed > 0xffff_ffff)
|
|
64
|
+
throw new RangeError('DerivedOptions.seed 必须是 uint32 整数');
|
|
65
|
+
const random = seededRandom(seed);
|
|
66
|
+
const uuid = () => seededUuid(random);
|
|
44
67
|
let env;
|
|
45
68
|
const rc = (cap) => {
|
|
46
69
|
const c = env.kernel.registry.command(cap);
|
|
@@ -49,15 +72,40 @@ export function derived(domain) {
|
|
|
49
72
|
return c;
|
|
50
73
|
};
|
|
51
74
|
const agg = (name) => env.kernel.registry.aggregate(name);
|
|
75
|
+
/**
|
|
76
|
+
* 为样例中的引用准备真实记录 ID:部门复用根节点,用户新建空权限身份,其他对象走测试 insert。
|
|
77
|
+
*/
|
|
52
78
|
async function refValue(target) {
|
|
53
79
|
if (target === 'Dept')
|
|
54
80
|
return env.rootDeptId;
|
|
55
81
|
if (target === 'User')
|
|
56
82
|
return (await env.user({ caps: [] })).id;
|
|
57
|
-
return (await env.insert(target)).id;
|
|
83
|
+
return (await env.insert(target, { id: uuid() })).id;
|
|
58
84
|
}
|
|
59
|
-
/**
|
|
60
|
-
|
|
85
|
+
/**
|
|
86
|
+
* 使用指定随机源构造字段候选,文本和 ID 随种子变化,嵌套列表递归处理。
|
|
87
|
+
* 仅为造数据策略,不保证满足业务不变量或已存在引用。
|
|
88
|
+
*/
|
|
89
|
+
function fieldValue(field, name, rng) {
|
|
90
|
+
if (field.isOptional)
|
|
91
|
+
return null;
|
|
92
|
+
if (field.kind === 'id' || field.kind === 'ref')
|
|
93
|
+
return seededUuid(rng);
|
|
94
|
+
if (field.kind === 'text' && !field.sensitiveKind)
|
|
95
|
+
return `${name || 'text'}-${seededUuid(rng).slice(0, 8)}`.slice(0, field.max ?? 500);
|
|
96
|
+
if (field.kind === 'list' && field.shape) {
|
|
97
|
+
if ('item' in field.shape && Object.keys(field.shape).length === 1)
|
|
98
|
+
return [fieldValue(field.shape.item, 'item', rng)];
|
|
99
|
+
return [Object.fromEntries(Object.entries(field.shape).map(([key, entry]) => [key, fieldValue(entry, key, rng)]))];
|
|
100
|
+
}
|
|
101
|
+
return sampleValue(field, name);
|
|
102
|
+
}
|
|
103
|
+
/** 构造可通过输入 schema 的候选;handler 的业务规则仍可能拒绝。 */
|
|
104
|
+
/**
|
|
105
|
+
* 结合已有记录、同名聚合字段及输入 schema 构造命令候选,并用 Zod 做最终输入校验。
|
|
106
|
+
* 集合引用先准备目标记录;非对象 schema 或校验失败返回 null,不猜测任意业务合法值。
|
|
107
|
+
*/
|
|
108
|
+
async function sampleInput(c, seeded, rng = random) {
|
|
61
109
|
const schema = c.cmd.input;
|
|
62
110
|
if (!(schema instanceof z.ZodObject))
|
|
63
111
|
return null;
|
|
@@ -81,14 +129,18 @@ export function derived(domain) {
|
|
|
81
129
|
if (f.isOptional && !required)
|
|
82
130
|
continue;
|
|
83
131
|
// 集合引用需要目标 ID 数组,不能沿用标量 ref 的取值;否则用例会被误判为无法造输入而跳过。
|
|
84
|
-
out[key] = f.kind === 'manyToMany' ? [await refValue(f.ref)] : f.kind === 'ref' ? await refValue(f.ref) :
|
|
132
|
+
out[key] = f.kind === 'manyToMany' ? [await refValue(f.ref)] : f.kind === 'ref' ? await refValue(f.ref) : fieldValue(f, key, rng);
|
|
85
133
|
}
|
|
86
134
|
else if (required)
|
|
87
|
-
out[key] = sampleJson(js.properties?.[key]);
|
|
135
|
+
out[key] = sampleJson(js.properties?.[key], rng);
|
|
88
136
|
}
|
|
89
137
|
return schema.safeParse(out).success ? out : null;
|
|
90
138
|
}
|
|
91
139
|
/** 拥有全部能力、范围为全部的执行者;流程或外部专用命令用对应的系统身份 */
|
|
140
|
+
/**
|
|
141
|
+
* 按命令合法调用身份准备执行上下文;user 命令用全能力测试用户,流程类命令构造对应系统身份。
|
|
142
|
+
* 只用于隔离测试,不表明生产系统会自动授权或允许客户端选择身份。
|
|
143
|
+
*/
|
|
92
144
|
async function powerActor(c) {
|
|
93
145
|
if (c.cmd.invokedBy.includes('user'))
|
|
94
146
|
return (await env.user({ caps: 'all', scopes: { '*': 'all' } })).ctx();
|
|
@@ -103,6 +155,9 @@ export function derived(domain) {
|
|
|
103
155
|
async teardown() {
|
|
104
156
|
await env?.close();
|
|
105
157
|
},
|
|
158
|
+
/**
|
|
159
|
+
* 创建唯独缺少目标能力的用户,核对普通用户命令被拒绝;非 user 入口或无法造输入时跳过。
|
|
160
|
+
*/
|
|
106
161
|
async capabilityDenied(cap) {
|
|
107
162
|
const c = rc(cap);
|
|
108
163
|
if (!c.cmd.invokedBy.includes('user'))
|
|
@@ -113,6 +168,9 @@ export function derived(domain) {
|
|
|
113
168
|
return SKIP;
|
|
114
169
|
return env.callAs(await env.actorWithout(cap), cap, input);
|
|
115
170
|
},
|
|
171
|
+
/**
|
|
172
|
+
* 以有足够权限的身份对指定非法状态尝试命令,使断言聚焦状态机拒绝。
|
|
173
|
+
*/
|
|
116
174
|
async invalidTransition(cap, state) {
|
|
117
175
|
const c = rc(cap);
|
|
118
176
|
const seeded = await env.insert(c.cmd.agg, { status: state });
|
|
@@ -121,6 +179,10 @@ export function derived(domain) {
|
|
|
121
179
|
return SKIP;
|
|
122
180
|
return env.callAs(await powerActor(c), cap, input);
|
|
123
181
|
},
|
|
182
|
+
/**
|
|
183
|
+
* 执行一次成功命令后读取该对象/命令的写审计数量。
|
|
184
|
+
* 样例被业务规则拒绝时跳过,不能把没走到成功路径解释成审计性质已验证。
|
|
185
|
+
*/
|
|
124
186
|
async auditOnce(cap) {
|
|
125
187
|
const c = rc(cap);
|
|
126
188
|
const seeded = c.cmd.from === 'new' ? null : await env.seedFor(cap);
|
|
@@ -133,6 +195,10 @@ export function derived(domain) {
|
|
|
133
195
|
const rows = await env.audit({ aggregateId: r.data.id, command: cap, kind: 'write' });
|
|
134
196
|
return { rows: rows.length };
|
|
135
197
|
},
|
|
198
|
+
/**
|
|
199
|
+
* 使用同一用户身份与幂等键并发执行两次,比较对象 ID、版本和写审计数量。
|
|
200
|
+
* 非 user 或任一次失败返回 SKIP;该检查仅覆盖本次成功样例的幂等行为。
|
|
201
|
+
*/
|
|
136
202
|
async idempotent(cap) {
|
|
137
203
|
const c = rc(cap);
|
|
138
204
|
if (!c.cmd.invokedBy.includes('user'))
|
|
@@ -141,21 +207,25 @@ export function derived(domain) {
|
|
|
141
207
|
const input = await sampleInput(c, seeded);
|
|
142
208
|
if (input === null)
|
|
143
209
|
return SKIP;
|
|
144
|
-
const ctx = { ...(await powerActor(c)), idempotencyKey:
|
|
210
|
+
const ctx = { ...(await powerActor(c)), idempotencyKey: uuid() };
|
|
145
211
|
const [a, b] = await Promise.all([env.callAs(ctx, cap, input), env.callAs(ctx, cap, input)]);
|
|
146
212
|
if (!a.ok || !b.ok)
|
|
147
213
|
return SKIP;
|
|
148
214
|
const rows = await env.audit({ aggregateId: a.data.id, command: cap, kind: 'write' });
|
|
149
215
|
return { same: a.data.id === b.data.id && a.data.version === b.data.version, rows: rows.length };
|
|
150
216
|
},
|
|
217
|
+
/**
|
|
218
|
+
* 准备不同归属身份,核对范围外对象在详情、列表和裸安全视图均不可见,并检查基表读取被拒绝。
|
|
219
|
+
* 只覆盖 self/dept 且要求相应范围字段,不穷尽全部角色组合。
|
|
220
|
+
*/
|
|
151
221
|
async scopeHidden(aggName, combinator) {
|
|
152
222
|
const a = agg(aggName);
|
|
153
223
|
if (combinator === 'self' && !a.scope.ownerField)
|
|
154
224
|
return SKIP;
|
|
155
225
|
if (combinator === 'dept' && (!a.scope.deptField || a.scope.deptField === 'id'))
|
|
156
226
|
return SKIP;
|
|
157
|
-
const deptA = await env.dept(`derived-a-${
|
|
158
|
-
const deptB = await env.dept(`derived-b-${
|
|
227
|
+
const deptA = await env.dept(`derived-a-${uuid().slice(0, 6)}`);
|
|
228
|
+
const deptB = await env.dept(`derived-b-${uuid().slice(0, 6)}`);
|
|
159
229
|
const owner = await env.user({ caps: [], deptId: deptA });
|
|
160
230
|
const rec = await env.insert(a, { ownerId: owner.id, ...(a.scope.deptField && a.scope.deptField !== 'id' ? { [a.scope.deptField]: deptA } : {}) });
|
|
161
231
|
const other = await env.user({ caps: [`${aggName}.read`], scopes: { [aggName]: combinator }, deptId: deptB });
|
|
@@ -180,6 +250,10 @@ export function derived(domain) {
|
|
|
180
250
|
await db.release();
|
|
181
251
|
return { get, listed: list.items.some((x) => x.id === rec.id), rawVisible: raw.rows.some((r) => r.id === rec.id), baseDenied };
|
|
182
252
|
},
|
|
253
|
+
/**
|
|
254
|
+
* 用本人范围身份尝试写入他人的记录,验证能力充足仍不能越过记录范围。
|
|
255
|
+
* 新建命令、非用户入口或无 owner 字段时不适用并返回 SKIP。
|
|
256
|
+
*/
|
|
183
257
|
async outOfScopeWrite(cap) {
|
|
184
258
|
const c = rc(cap);
|
|
185
259
|
if (c.cmd.from === 'new' || !c.cmd.invokedBy.includes('user') || !c.cmd.agg.scope.ownerField)
|
|
@@ -192,6 +266,9 @@ export function derived(domain) {
|
|
|
192
266
|
const other = await env.user({ caps: 'all', scopes: { [c.cmd.agg.name]: 'self' } });
|
|
193
267
|
return env.callAs(await other.ctx(), cap, input);
|
|
194
268
|
},
|
|
269
|
+
/**
|
|
270
|
+
* 写入敏感字段样例后以只有读取能力的用户查询,返回原值与可见值供掩码断言。
|
|
271
|
+
*/
|
|
195
272
|
async masked(aggName) {
|
|
196
273
|
const a = agg(aggName);
|
|
197
274
|
const sens = Object.entries(a.fields).filter(([, f]) => f.sensitiveKind);
|
|
@@ -203,56 +280,108 @@ export function derived(domain) {
|
|
|
203
280
|
const got = await env.kernel.read.get(a, rec.id, await reader.ctx());
|
|
204
281
|
return sens.map(([k]) => ({ field: k, plain: values[k], seen: got[k] }));
|
|
205
282
|
},
|
|
283
|
+
/**
|
|
284
|
+
* 按固定种子运行有限轮次与命令序列,先核验初始持久快照,随后每步读取真实结果检查全部不变量。
|
|
285
|
+
* 夹具失败立即抛结构化错误;序列第一次观察到不变量失败时保存前缀,不继续污染失败轨迹。
|
|
286
|
+
* 正常业务拒绝仍作为一次尝试记录,不等于框架异常;返回 steps 供判断实际覆盖深度。
|
|
287
|
+
*/
|
|
206
288
|
async invariantsHold(aggName, runs = 8) {
|
|
207
289
|
const a = agg(aggName);
|
|
208
290
|
const names = Object.keys(a.invariants);
|
|
209
291
|
if (names.length === 0)
|
|
210
292
|
return SKIP;
|
|
211
293
|
const cmds = env.kernel.registry.commands.filter((c) => c.cmd.agg === a);
|
|
294
|
+
const rng = seededRandom(seed);
|
|
295
|
+
const redact = derivedRedactor(env.kernel.registry.aggregates);
|
|
212
296
|
const violations = [];
|
|
297
|
+
const traces = [];
|
|
213
298
|
let steps = 0;
|
|
299
|
+
const failedInvariants = (snapshot) => names.filter((name) => {
|
|
300
|
+
try {
|
|
301
|
+
return !a.invariants[name](snapshot);
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
});
|
|
214
307
|
for (let run = 0; run < runs; run++) {
|
|
215
|
-
|
|
308
|
+
const trace = { aggregate: aggName, seed, run, phase: 'fixture', initial: null, preparation: [], commands: [], failedInvariants: [], minimalPrefix: [] };
|
|
216
309
|
let rec = null;
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
rec = r.data;
|
|
310
|
+
try {
|
|
311
|
+
const fixture = options.fixtures?.[aggName];
|
|
312
|
+
if (typeof fixture === 'function') {
|
|
313
|
+
rec = await fixture({ env, aggregate: a, run, seed, random: rng, uuid: () => seededUuid(rng) });
|
|
314
|
+
}
|
|
315
|
+
else if (fixture) {
|
|
316
|
+
rec = await env.insert(a, { id: seededUuid(rng), ...fixture });
|
|
225
317
|
}
|
|
318
|
+
else {
|
|
319
|
+
const creators = cmds.filter((c) => c.cmd.from === 'new');
|
|
320
|
+
if (creators.length) {
|
|
321
|
+
const c = creators[run % creators.length];
|
|
322
|
+
const input = await sampleInput(c, null, rng);
|
|
323
|
+
if (input) {
|
|
324
|
+
const result = await env.callAs(await powerActor(c), c.capability, input);
|
|
325
|
+
trace.preparation.push({ step: 0, capability: c.capability, input: redact(input), result: { ok: result.ok, code: result.code, ...(!result.ok ? { domainCode: result.domainCode } : {}) } });
|
|
326
|
+
if (result.ok)
|
|
327
|
+
rec = result.data;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (!rec) {
|
|
331
|
+
const values = Object.fromEntries(Object.entries(a.fields)
|
|
332
|
+
.filter(([, field]) => field.kind !== 'ref' && field.kind !== 'hasMany').map(([name, field]) => [name, fieldValue(field, name, rng)]));
|
|
333
|
+
trace.initial = redact(values);
|
|
334
|
+
rec = await env.insert(a, { id: seededUuid(rng), ...values });
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
// 必须读取完整持久快照检查初始不变量,不能等第一条业务命令失败才把非法种子算作业务反例。
|
|
338
|
+
const initial = rec?.id ? await loadScoped(env.kernel.app, a, rec.id, env.system(), false) : null;
|
|
339
|
+
if (!initial)
|
|
340
|
+
throw new Error('fixture-record-missing');
|
|
341
|
+
rec = initial;
|
|
342
|
+
trace.initial = redact(initial);
|
|
343
|
+
trace.failedInvariants = failedInvariants(initial);
|
|
344
|
+
if (trace.failedInvariants.length)
|
|
345
|
+
throw new DerivedTestError(trace);
|
|
346
|
+
}
|
|
347
|
+
catch (e) {
|
|
348
|
+
if (e instanceof DerivedTestError)
|
|
349
|
+
throw e;
|
|
350
|
+
trace.failedInvariants = [`fixtureConstruction:${e.code ?? e.name ?? 'Error'}`];
|
|
351
|
+
throw new DerivedTestError(trace);
|
|
226
352
|
}
|
|
227
|
-
|
|
353
|
+
trace.phase = 'execution';
|
|
228
354
|
for (let i = 0; i < 4; i++) {
|
|
229
355
|
const options = cmds.filter((c) => c.cmd.from !== 'new' && c.cmd.from.includes(rec.status));
|
|
230
356
|
if (options.length === 0)
|
|
231
357
|
break;
|
|
232
|
-
const c = options[Math.floor(
|
|
233
|
-
const input = await sampleInput(c, rec);
|
|
358
|
+
const c = options[Math.floor(rng() * options.length)];
|
|
359
|
+
const input = await sampleInput(c, rec, rng);
|
|
234
360
|
if (!input)
|
|
235
361
|
continue;
|
|
236
|
-
|
|
362
|
+
let result;
|
|
363
|
+
try {
|
|
364
|
+
result = await env.callAs(await powerActor(c), c.capability, input);
|
|
365
|
+
}
|
|
366
|
+
catch (e) {
|
|
367
|
+
trace.commands.push({ step: i, capability: c.capability, input: redact(input), result: { ok: false, code: e.code ?? 'INTERNAL' } });
|
|
368
|
+
trace.minimalPrefix = [...trace.commands];
|
|
369
|
+
throw new DerivedTestError(trace);
|
|
370
|
+
}
|
|
237
371
|
steps++;
|
|
238
|
-
|
|
372
|
+
trace.commands.push({ step: i, capability: c.capability, input: redact(input), result: { ok: result.ok, code: result.code, ...(!result.ok ? { domainCode: result.domainCode } : {}) } });
|
|
239
373
|
const snap = (await loadScoped(env.kernel.app, a, rec.id, env.system(), false));
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
catch {
|
|
246
|
-
ok = false;
|
|
247
|
-
}
|
|
248
|
-
if (!ok)
|
|
249
|
-
violations.push(`${c.capability} 之后 ${aggName}.${n} 不成立`);
|
|
374
|
+
trace.failedInvariants = snap ? failedInvariants(snap) : ['recordMissing'];
|
|
375
|
+
if (trace.failedInvariants.length) {
|
|
376
|
+
trace.minimalPrefix = [...trace.commands];
|
|
377
|
+
violations.push(`${c.capability} 之后 ${aggName}.${trace.failedInvariants.join(',')} 不成立;${JSON.stringify(trace)}`);
|
|
378
|
+
break;
|
|
250
379
|
}
|
|
251
|
-
|
|
252
|
-
rec = { ...rec, ...snap };
|
|
380
|
+
rec = snap;
|
|
253
381
|
}
|
|
382
|
+
traces.push(trace);
|
|
254
383
|
}
|
|
255
|
-
return { steps, violations };
|
|
384
|
+
return { steps, violations, seed, traces };
|
|
256
385
|
},
|
|
257
386
|
};
|
|
258
387
|
}
|
package/dist/derived.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derived.js","sourceRoot":"","sources":["../src/derived.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"derived.js","sourceRoot":"","sources":["../src/derived.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内嵌 PostgreSQL 依赖的进程退出码兼容层,仅供 pg.ts 在加载 embedded-postgres 后安装。
|
|
3
|
+
* embedded-postgres 注册的 async-exit-hook 2.x 将 beforeExit 固定转换为 process.exit(0),
|
|
4
|
+
* 会覆盖 Vitest 已设置的失败状态;本模块保留进入自然退出阶段时的非零码,供最终 exit 恢复。
|
|
5
|
+
* 不替换 process.exit、不移除依赖的异步清理或信号处理,也不启动/停止数据库。
|
|
6
|
+
* 只修正已知的非零状态被改为零:后续显式非零退出仍保留,beforeExit 之后新产生的失败不在此推断。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 安装一次失败退出码保留逻辑,供 startEmbeddedPostgres 紧接依赖加载后调用。
|
|
10
|
+
* Node 自然退出时先传入当前退出码;若其非零,在 exit 阶段仅将上游强制的零恢复为该码。
|
|
11
|
+
* 同步 exit 监听中只设置 process.exitCode,不执行异步 IO;因此数据库清理仍由原有钩子完成。
|
|
12
|
+
* 调用无返回值、不修改公开接口;已有监听不会被删除,显式 process.exit(非零) 的结果不被覆盖。
|
|
13
|
+
*/
|
|
14
|
+
export declare function preserveEmbeddedPostgresExitCode(): void;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内嵌 PostgreSQL 依赖的进程退出码兼容层,仅供 pg.ts 在加载 embedded-postgres 后安装。
|
|
3
|
+
* embedded-postgres 注册的 async-exit-hook 2.x 将 beforeExit 固定转换为 process.exit(0),
|
|
4
|
+
* 会覆盖 Vitest 已设置的失败状态;本模块保留进入自然退出阶段时的非零码,供最终 exit 恢复。
|
|
5
|
+
* 不替换 process.exit、不移除依赖的异步清理或信号处理,也不启动/停止数据库。
|
|
6
|
+
* 只修正已知的非零状态被改为零:后续显式非零退出仍保留,beforeExit 之后新产生的失败不在此推断。
|
|
7
|
+
*/
|
|
8
|
+
/** 同一模块实例的进程级安装标记;多次创建内嵌数据库只注册一组兼容监听。 */
|
|
9
|
+
let installed = false;
|
|
10
|
+
/**
|
|
11
|
+
* 安装一次失败退出码保留逻辑,供 startEmbeddedPostgres 紧接依赖加载后调用。
|
|
12
|
+
* Node 自然退出时先传入当前退出码;若其非零,在 exit 阶段仅将上游强制的零恢复为该码。
|
|
13
|
+
* 同步 exit 监听中只设置 process.exitCode,不执行异步 IO;因此数据库清理仍由原有钩子完成。
|
|
14
|
+
* 调用无返回值、不修改公开接口;已有监听不会被删除,显式 process.exit(非零) 的结果不被覆盖。
|
|
15
|
+
*/
|
|
16
|
+
export function preserveEmbeddedPostgresExitCode() {
|
|
17
|
+
if (installed)
|
|
18
|
+
return;
|
|
19
|
+
installed = true;
|
|
20
|
+
process.once('beforeExit', (code) => {
|
|
21
|
+
if (code === 0)
|
|
22
|
+
return;
|
|
23
|
+
// 上游在 nextTick 中调用 process.exit(0),所以此处可先记录真实失败并等待最终退出事件。
|
|
24
|
+
process.once('exit', (actual) => {
|
|
25
|
+
if (actual === 0)
|
|
26
|
+
process.exitCode = code;
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=embedded-exit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedded-exit.js","sourceRoot":"","sources":["../src/embedded-exit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yCAAyC;AACzC,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC;IAC9C,IAAI,SAAS;QAAE,OAAO;IACtB,SAAS,GAAG,IAAI,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;QAClC,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO;QACvB,0DAA0D;QAC1D,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/env.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { type AnyAggregate, type Ctx, type Kernel, type Logger } from '@yss123/cage-kernel';
|
|
2
2
|
import { type MigrationFile } from '@yss123/cage-kernel/db';
|
|
3
3
|
import { Kysely } from 'kysely';
|
|
4
|
+
/**
|
|
5
|
+
* 测试命令执行结果:ok=true 时包含快照,ok=false 时保留标准 code 与可选 domainCode/detail。
|
|
6
|
+
* 未识别的 INTERNAL 异常仍会抛出,以免测试把实现故障当成预期业务拒绝。
|
|
7
|
+
*/
|
|
4
8
|
export type CallResult = {
|
|
5
9
|
ok: true;
|
|
6
10
|
data: Record<string, any>;
|
|
@@ -12,12 +16,21 @@ export type CallResult = {
|
|
|
12
16
|
detail?: unknown;
|
|
13
17
|
data?: undefined;
|
|
14
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* 通过组织命令创建的测试身份,保存用户/角色 ID 及 username。
|
|
21
|
+
* ctx 每次重新读取授权上下文,便于测试授权变化,不固定缓存创建时的能力集合。
|
|
22
|
+
*/
|
|
15
23
|
export interface TestUser {
|
|
16
24
|
id: string;
|
|
17
25
|
username: string;
|
|
18
26
|
roleId: string;
|
|
19
27
|
ctx(): Promise<Ctx>;
|
|
20
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* 单个临时业务数据库的测试操作集合。kernel 用于真实流水线,system 是测试系统身份。
|
|
31
|
+
* urls 含测试连接信息,仅供测试装配,不应输出到报告;query/audit 为受信任测试诊断捷径。
|
|
32
|
+
* insert/seedFor 绕过业务命令准备夹具,业务成功路径仍须通过 callAs 验证。
|
|
33
|
+
*/
|
|
21
34
|
export interface TestEnv {
|
|
22
35
|
kernel: Kernel;
|
|
23
36
|
tenantId: string;
|
|
@@ -62,7 +75,7 @@ export interface TestEnv {
|
|
|
62
75
|
readConnectionAs(ctx: Ctx): Promise<Kysely<any> & {
|
|
63
76
|
release(): Promise<void>;
|
|
64
77
|
}>;
|
|
65
|
-
/**
|
|
78
|
+
/** 处理当前可领取 outbox;返回处理数量,未来重试/死信或轮数上限不表示业务全部完成。 */
|
|
66
79
|
drain(): Promise<number>;
|
|
67
80
|
/** 审计记录(超级用户读取) */
|
|
68
81
|
audit(where?: {
|
|
@@ -73,6 +86,12 @@ export interface TestEnv {
|
|
|
73
86
|
query(text: string, params?: unknown[]): Promise<any[]>;
|
|
74
87
|
close(): Promise<void>;
|
|
75
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* 创建随机命名的测试库并返回可执行测试的环境,调用方必须在 teardown 中 close。
|
|
91
|
+
* 先在共同管理库取得角色初始化锁,避免不同测试库并发修改同一集群角色;随后按迁移或声明建结构。
|
|
92
|
+
* domain 必须包含组织模型,否则无法准备用户与部门并报错;logger 默认静默,可注入用于诊断回归。
|
|
93
|
+
* 默认新库测试不等于带旧数据的升级验收,未传 migrations 时也不验证应用迁移文件。
|
|
94
|
+
*/
|
|
76
95
|
export declare function createTestEnv(opts: {
|
|
77
96
|
domain: object | object[];
|
|
78
97
|
/** 不传时直接按声明建表(不经过迁移文件) */
|