Files
ccdi/docs/reports/implementation/2026-03-20-mock-random-logid-fix-record.md

29 lines
2.0 KiB
Markdown
Raw Normal View History

# Mock 服务随机 logId 实施记录
## 问题背景
- 2026-03-20 联调过程中,`lsfx-mock-server``logId` 仍使用进程内递增方式分配。
- 仓库文档与接口预期要求 Mock 返回随机 `logId`,避免联调时对顺序值形成隐式依赖。
## 根因分析
- [`lsfx-mock-server/services/file_service.py`](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/services/file_service.py) 中,`upload_file()``fetch_inner_flow()` 都直接通过 `self.log_counter += 1` 生成 `logId`
- 现有测试只覆盖了 `logId` 落在 `10000-99999` 区间内,没有约束“冲突时需要重试并避让已有记录”。
## 本次修改
- 在 [`lsfx-mock-server/tests/test_file_service.py`](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/tests/test_file_service.py) 先新增红灯测试 `test_generate_log_id_should_retry_when_random_value_conflicts`
- 固定随机值第一次命中已存在 `logId` 时必须重试。
- 同步把行内流水测试中的旧递增断言改为随机区间断言。
- 在 [`lsfx-mock-server/services/file_service.py`](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/services/file_service.py) 新增统一 `_generate_log_id()`
-`10000-99999` 区间内随机生成。
- 若命中 `file_records` 中已存在的 `logId`,则继续重试直到拿到未占用值。
- `upload_file()``fetch_inner_flow()` 均切换为调用该方法。
## 验证结果
- `python3 -m pytest lsfx-mock-server/tests/test_file_service.py -k "fetch_inner_flow_persists_primary_binding_record or generate_log_id_should_retry_when_random_value_conflicts" -v`
- 结果:`2 passed`
- `python3 -m pytest lsfx-mock-server/tests/test_file_service.py lsfx-mock-server/tests/test_statement_service.py lsfx-mock-server/tests/test_api.py lsfx-mock-server/tests/integration/test_full_workflow.py -v`
- 结果:`39 passed, 20 warnings`
## 实施结果
- Mock 服务的新建上传记录与行内流水记录已改为随机 `logId`
- 同一 `logId` 下的规则命中计划、流水样本与上传状态复用逻辑保持不变。