Skip to content

修三个偶发失败的 CI 测试,以及诊断开关等待的一处竞争 - #109

Merged
qiyinxi merged 1 commit into
ModAVD:mainfrom
qiyinxi:test/flaky-ci
Nov 9, 2026
Merged

qiyinxi merged 1 commit into
ModAVD:mainfrom
qiyinxi:test/flaky-ci

Conversation

@qiyinxi

@qiyinxi qiyinxi commented Nov 8, 2026

Copy link
Copy Markdown
Member

11-08 的 CI 里有三个测试时好时坏,和各自的 PR 都无关:

  • internal/update:用真实进程扫描的几个测试,会把同一时间别的包测试起的假模拟器
    (qemu-system-x86_64-headless.exe 等)算进来。go test ./... 是几个包同时跑的,那个进程退出时读不到
    路径,扫描按设计把读不到路径的 qemu-system* 当成可能占用,更新就被挡住了。测试改为只看本测试进程
    起的进程(按 PPID 往下找),路径判断和存活检查照旧走真实代码。产品代码不变。
  • scripts/test_create_cancel.mjs:加载模块时读完文件才放进缓存,两个模块同时 import store.js 时会建出两份,
    测试写进的 S.jobs 和卡片读的不是同一份,就走成了关机请求。照 test_playstore_ui.mjs、test_gles32_ui.mjs
    已有的做法,读完文件后再查一次缓存。旧版本机 30 次失败 1 次,新版 130 次都过。
  • internal/emu:诊断模式开关等待采集切换时,读不出 mas-avd.json 的那一轮,策略按「关」处理,正好和
    旧的「关」采集对上,于是 SetDiagnostics(on) 提前返回、采集还没切换。这是产品代码里的竞争:
    diagnosticPolicy 拆出 readDiagnosticPolicy,等待时读不出策略的那一轮不下结论,接着等(采集本身读不出时
    按关闭处理的做法不变)。新增 TestCaptureWaitIgnoresUnreadablePolicy:前 3 次读策略失败,等待也要等到
    切换完成;去掉修复时它失败,失败信息和 CI 那次一样(Enabled:false Since:"")。这个包的测试把管理器日志
    收起来,失败时打印出来,下次再出问题能看到原因。

验证:build.ps1 -Test 全部通过;scripts/test_*.mjs 六个都过;internal/emu 那个测试在 update、guest、root、components、report 几个包同时跑的负载下连跑 10 次都过,internal/update 在负载下连跑 3 次都过。

11-08 的 CI 里有三个测试时好时坏,和各自的 PR 都无关:

- internal/update:用真实进程扫描的几个测试,会把同一时间别的包测试起的假模拟器
  (qemu-system-x86_64-headless.exe 等)算进来。go test ./... 是几个包同时跑的,那个进程退出时读不到
  路径,扫描按设计把读不到路径的 qemu-system* 当成可能占用,更新就被挡住了。测试改为只看本测试进程
  起的进程(按 PPID 往下找),路径判断和存活检查照旧走真实代码。产品代码不变。
- scripts/test_create_cancel.mjs:加载模块时读完文件才放进缓存,两个模块同时 import store.js 时会建出两份,
  测试写进的 S.jobs 和卡片读的不是同一份,就走成了关机请求。照 test_playstore_ui.mjs、test_gles32_ui.mjs
  已有的做法,读完文件后再查一次缓存。旧版本机 30 次失败 1 次,新版 130 次都过。
- internal/emu:诊断模式开关等待采集切换时,读不出 mas-avd.json 的那一轮,策略按「关」处理,正好和
  旧的「关」采集对上,于是 SetDiagnostics(on) 提前返回、采集还没切换。这是产品代码里的竞争:
  diagnosticPolicy 拆出 readDiagnosticPolicy,等待时读不出策略的那一轮不下结论,接着等(采集本身读不出时
  按关闭处理的做法不变)。新增 TestCaptureWaitIgnoresUnreadablePolicy:前 3 次读策略失败,等待也要等到
  切换完成;去掉修复时它失败,失败信息和 CI 那次一样(Enabled:false Since:"")。这个包的测试把管理器日志
  收起来,失败时打印出来,下次再出问题能看到原因。
@qiyinxi
qiyinxi added this pull request to the merge queue Nov 9, 2026
Merged via the queue into ModAVD:main with commit 80bfe6f Nov 9, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant