fix(GOV-012): 修复目录元数据校验与查询错误脱敏

This commit is contained in:
2026-08-18 02:34:14 +08:00
parent c11de09fa7
commit 3d12c83621
2 changed files with 84 additions and 9 deletions
@@ -232,6 +232,63 @@ test('目录拒绝未知表类型和超过对象上限', async () => {
);
});
test('目录拒绝非法触发器时机、事件和空执行顺序', async () => {
for (const trigger of [
{
TRIGGER_NAME: 'invalid_timing',
EVENT_OBJECT_TABLE: 'market_snapshot',
ACTION_TIMING: 'DURING',
EVENT_MANIPULATION: 'INSERT',
ACTION_ORDER: 1,
},
{
TRIGGER_NAME: 'invalid_event',
EVENT_OBJECT_TABLE: 'market_snapshot',
ACTION_TIMING: 'BEFORE',
EVENT_MANIPULATION: 'MERGE',
ACTION_ORDER: 1,
},
{
TRIGGER_NAME: 'empty_order',
EVENT_OBJECT_TABLE: 'market_snapshot',
ACTION_TIMING: 'BEFORE',
EVENT_MANIPULATION: 'INSERT',
ACTION_ORDER: '',
},
{
TRIGGER_NAME: 'missing_order',
EVENT_OBJECT_TABLE: 'market_snapshot',
ACTION_TIMING: 'BEFORE',
EVENT_MANIPULATION: 'INSERT',
ACTION_ORDER: null,
},
]) {
const connection = createCatalogConnection({
'information_schema.TRIGGERS': [trigger],
});
await assert.rejects(
() => readSchemaCatalog(connection, 'a_share_analysis_dev', DEFAULT_EXPORT_LIMITS),
(error) => error instanceof SchemaExportError && error.code === 'CATALOG_SHAPE_INVALID',
);
}
});
test('直接目录读取将数据库异常转为固定脱敏错误', async () => {
const connection = {
async query() {
throw new Error('connect mysql://schema_reader:not-for-logs@127.0.0.1:3306/a_share_analysis_dev');
},
};
await assert.rejects(
() => readSchemaCatalog(connection, 'a_share_analysis_dev', DEFAULT_EXPORT_LIMITS),
(error) =>
error instanceof SchemaExportError &&
error.code === 'DATABASE_QUERY_FAILED' &&
error.message === '开发库 Schema 查询失败',
);
});
const completeCatalog = Object.freeze({
tables: ['market_snapshot'],
views: ['market_dashboard', 'market_summary'],