docs(p1r): 真实 PG IT 基线 23/23 全绿 + 完整跑法配方(reuseForks=false 等)落档
§四:23/23 P1r*IT 在 mini-infra PG 全量重跑全绿(99 用例 0F/0E,2 例 external-acceptance 跳过);补批量跑要点⑥(-DreuseForks=false 避 Market IT 属性脱敏污染复用 fork)⑦(argLine 传 p1r.flyway.*);旧硬编码版本断言需动态化TODO 已闭(MigrateResult 动态)。§五B:基线落档,指向 §四 完整配方。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
4d46d7ac8a
commit
888217deee
@ -34,7 +34,7 @@
|
||||
|
||||
## 四、跑 P1R real-PG 集成测试(IT)的配方 + 本机代理坑(2026-06-14 实证)
|
||||
|
||||
**结论先行**:P1 后端 20 个 `P1r*IT`(completed-approval / Flyway 迁移 / events-publish outbox / live-acceptance)**可在共享远端 PG 上真跑验证**。2026-06-14 实跑 **19/20 IT 类零功能失败**(~95 用例绿,含真实 New-API live 调用)。唯一红:`P1rKnowledgeFlywayMigrationIT` 硬编码断言 V14,而 schema 已到 V21(陈旧用例,非功能缺陷,源自 commit 7155285,非本轮引入)——这类硬编码版本号的迁移断言随 V15-V21 增长会失效,需改为动态读取最新版本。
|
||||
**结论先行**:P1 后端 23 个 `P1r*IT`(completed-approval / Flyway 迁移 / events-publish outbox / live-acceptance)**可在共享远端 PG 上真跑验证**。**2026-06-15 mini-infra PG 全量重跑 = 23/23 IT 类全绿(99 用例 0F/0E;2 例 external-acceptance 因未设 `MUSE_P1R_EXTERNAL_ACCEPTANCE` 而 assumeTrue 跳过)**。此前唯一红 `P1rKnowledgeFlywayMigrationIT`(硬编码版本断言随 schema 增长失效,V14→V21→V23 已复发两次)**已修为动态**:读本次 Flyway `MigrateResult.targetSchemaVersion/migrationsExecuted` 自适应(commit 4d46d7a,Codex+Opus 双代理并行提案合并;反假绿仍校验迁移成功 + history 计数一致 + Knowledge 表/索引/列存在)。
|
||||
|
||||
**▲ 最大坑(排查极久):本机 env `HTTP_PROXY=HTTPS_PROXY=http://127.0.0.1:7897` → JVM 取 `socksProxyHost=127.0.0.1:7897`,把所有 Java socket 走 SOCKS;转发 HTTP 正常,但破坏 PostgreSQL 原始线协议(发完 StartupMessage 即被 EOF,认证前关闭,极像 pg_hba/密码错)。** `nc`/`curl` 直连正常,只有 JDBC/JVM 中招;且 `env -u HTTP_PROXY` 清不掉(socksProxyHost 由 JVM 层注入)。
|
||||
- 判定 PG 真可达:`printf '\x00\x00\x00\x08\x04\xd2\x16\x2f' | nc -w5 100.64.0.8 5433 | xxd` 回 `N` 即 PG 在说话(纯 nc 直连,不经代理)。
|
||||
@ -49,7 +49,7 @@ mise exec --cd muse-cloud -- mvn -pl muse-server -am test \
|
||||
-Dp1r.flyway.user=root -Dp1r.flyway.locations='filesystem:sql/muse' \
|
||||
-DargLine='-DsocksProxyHost= -DsocksProxyPort='
|
||||
```
|
||||
要点:① 用 **`test` 阶段 + `-Dtest=<IT类>`**(surefire 显式点名即可跑 `*IT`),**别用 `verify`/`integration-test`**——那会触发 `package`/spring-boot repackage 把 member-server 等打成 fat jar,破坏跨模块编译(`package ... does not exist`),且 surefire 会先跑到平台陈旧红(`QiniuSmsClientTest` 时区)而中止整个 reactor。② `p1r.flyway.url` 库名**必须 `_test` 结尾**(IT 有 assertTestDatabaseUrl 守卫 + 会 `flyway.clean()` DROP 全库,**绝不能指 muse_local / muse**);各 IT 用各自专属 `_test` 库(`muse_p1r_*_test` 系列已存在;缺的用 root `CREATE DATABASE`,跑完可 DROP)。③ `p1r.flyway.locations` 必须**恰为** `filesystem:sql/muse`(IT 断言该精确字符串,再从 `user.dir` 上溯定位 `sql/muse`)。④ 密码**只走 env**(`MUSE_POSTGRES_PASSWORD`/`P1R_FLYWAY_PASSWORD`;IT 有 assertNoPasswordSystemProperties,用 -D 传会红)。⑤ live-acceptance IT 需 `set -a; . scripts/dev/p1r-external-acceptance.env; set +a` 载入 token,且部分用例额外需 `MUSE_P1R_EXTERNAL_ACCEPTANCE=true` 才真跑(否则 assumeTrue 跳过、显示 Skipped)。
|
||||
要点:① 用 **`test` 阶段 + `-Dtest=<IT类>`**(surefire 显式点名即可跑 `*IT`),**别用 `verify`/`integration-test`**——那会触发 `package`/spring-boot repackage 把 member-server 等打成 fat jar,破坏跨模块编译(`package ... does not exist`),且 surefire 会先跑到平台陈旧红(`QiniuSmsClientTest` 时区)而中止整个 reactor。② `p1r.flyway.url` 库名**必须 `_test` 结尾**(IT 有 assertTestDatabaseUrl 守卫 + 会 `flyway.clean()` DROP 全库,**绝不能指 muse_local / muse**);各 IT 用各自专属 `_test` 库(`muse_p1r_*_test` 系列已存在;缺的用 root `CREATE DATABASE`,跑完可 DROP)。③ `p1r.flyway.locations` 必须**恰为** `filesystem:sql/muse`(IT 断言该精确字符串,再从 `user.dir` 上溯定位 `sql/muse`)。④ 密码**只走 env**(`MUSE_POSTGRES_PASSWORD`/`P1R_FLYWAY_PASSWORD`;IT 有 assertNoPasswordSystemProperties,用 -D 传会红)。⑤ live-acceptance IT 需 `set -a; . scripts/dev/p1r-external-acceptance.env; set +a` 载入 token,且部分用例额外需 `MUSE_P1R_EXTERNAL_ACCEPTANCE=true` 才真跑(否则 assumeTrue 跳过、显示 Skipped)。⑥ **整套 `-Dtest='P1r*IT'` 批量跑必须加 `-DreuseForks=false`**:`P1rMarketFlywayMigrationIT` 会 `System.setProperty("p1r.flyway.url", maskedUrl)` 脱敏覆盖,surefire 默认 fork 复用下污染同 fork 后续 IT 的系统属性 → 后续 IT 假报"缺少 p1r.flyway.url";每类独立 fork 即净(2026-06-15 实证:默认复用→多 IT 假红;`-DreuseForks=false`→23/23 全绿)。⑦ argLine 内可一并传 `-Dp1r.flyway.url/user/locations`(本轮即如此),与 maven `-D` 等效到 forked JVM。
|
||||
|
||||
> 远端 PG 实为 **PostgreSQL 17.10**(§一表内"15"为旧记,以此为准),超管用户 `root`;本机无本地 PG(127.0.0.1:5432 关闭)。批量顺序跑见交付报告(禁止并发 maven,会损坏 target)。
|
||||
|
||||
|
||||
@ -116,7 +116,7 @@
|
||||
|
||||
### B. 验收债:86 个 needs_verification operation(B-debt,门禁口径→真实证据)
|
||||
- ⬜ content **43/51**、market **28/32**、account **21/33**:缺 MockMvc/真实 PG 正式验收证据(非空壳)。按 BC 补真实 PG IT(参照已绿的 `P1rContentMergeSuggestionIT`/`P1rContentCoreCompletedApprovalIT` 范式),推 coverage 台账 completed。
|
||||
- ✅ 唯一红 `P1rKnowledgeFlywayMigrationIT`(陈旧 V14→V21):本轮修复(真实 PG 验证中)。
|
||||
- ✅ **P1r*IT 真实 PG 基线(2026-06-15,mini-infra PG)= 23/23 IT 类全绿**(99 用例 0F/0E;2 例 external-acceptance 因未设 `MUSE_P1R_EXTERNAL_ACCEPTANCE` 跳过)。`P1rKnowledgeFlywayMigrationIT` 版本断言由硬编码(V14→V21→V23 复发两次)改为 `MigrateResult` 动态自适应(commit 4d46d7a,Codex+Opus 双代理合并)。**完整跑法见 [.agents/knowledge §四](../../.agents/knowledge/external-deps-and-gotchas.md)**:`_test` 后缀隔离库 + `source infra.env`(密码仅 env)+ argLine(SOCKS 清 + p1r.flyway.url/user/locations)+ `-DreuseForks=false`(批量必加,避 Market IT 属性脱敏污染复用 fork)。
|
||||
- 🔧 ai/平台预存红测试整改(CI 接电将暴露):`MuseAiTaskServiceTest` 桩缺失 11 例 NPE **✅ 已整改(补 eventPublishOutboxService/candidateReviewService 桩 + review lenient,40/40,2026-06-15)**;`QiniuSmsClientTest` 时区硬编码 **✅ 已整改(5/5,机器无关)**;`MuseAiEventPublishOutboxMapperTest` **✅ 真实 PG 实跑 5/5(mini-infra PG,harness=infra.env+argLine SOCKS 清;隔离 schema 自建自清)**。**ai/平台预存红三项全清。**
|
||||
|
||||
### C. 前端 muse-studio(B3,体量最大,最长的长板)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user