fix(GOV-012): 修复目录元数据校验与查询错误脱敏
This commit is contained in:
@@ -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'],
|
||||
|
||||
Reference in New Issue
Block a user