问题描述
在 openUBMC Lua 组件 mctp_emulator 中,普通单元测试可以正常通过,但执行官方覆盖率命令 bingo test -ut -cov 时,在 Conan 依赖解析阶段失败,无法生成覆盖率报告。
该问题看起来不是组件业务逻辑失败,而是 coverage 流程中 lua/5.4.6 与 luajit/2.1.0.b022 同时声明 provide lua,导致 Conan provider conflict。
环境信息
- 组件仓库:
https://gitcode.com/heyu-2026/openubmc-mctp-emulator - 组件名:
mctp_emulator - 运行环境:openUBMC Docker 开发容器
- 容器名:
openubmc-dev - 组件路径:
/root/mctp_emulator - Conan 版本:
2.13.0 - 测试命令由
bingo test触发
复现步骤
进入 openUBMC Docker 容器内组件目录执行:
docker exec openubmc-dev bash -lc 'cd /root/mctp_emulator && bingo test -ut'
普通 UT 可以通过,dt_result.json 中结果如下:
{
"mctp_emulator": {
"tests": 23,
"failures": 0,
"successes": 23,
"uttime": 0.004,
"ittime": 0
}
}
然后执行 coverage 命令:
docker exec openubmc-dev bash -lc 'cd /root/mctp_emulator && bingo test -ut -cov'
实际结果
bingo test -ut -cov 在 Conan install / dependency resolution 阶段失败,关键报错如下:
ERROR: Provide Conflict: Both 'lua/5.4.6@openubmc/stable' and 'luajit/2.1.0.b022@openubmc/stable' provide '['lua']'.
ERROR: Command '['conan', 'install', '.', '-pr:h', 'profile.dt.ini', '-pr:b', 'profile.dt.ini', '-s:h', 'build_type=Debug', '--user', 'openubmc.dev', '--channel', 'dev', '-o', '*/*:enable_luajit=True', '-o', 'mctp_emulator/*:gcov=True', '-o', '*/*:test=True', '-of=/root/mctp_emulator/temp/.deploy/.install', '-d=full_deploy', '-f', 'json', '--out-file=package.info.json', '--build=missing']' returned non-zero exit status 1.
从失败命令看,coverage 流程中仍带有:
-o */*:enable_luajit=True
-o mctp_emulator/*:gcov=True
-o */*:test=True
同时 coverage 相关依赖似乎会引入 lua/5.4.6,而 profile / Bingo 测试流又启用了 luajit/2.1.0.b022,最终出现两个 package 同时 provide lua。
期望结果
期望 bingo test -ut -cov 能正常完成,并生成 Lua 组件 UT 覆盖率报告,例如:
temp/coverage/dt_result.json中有有效的linecoverage/lua_linecoverage- 或生成可查看的 luacov 报告
当前判断
普通 UT 已通过,说明组件测试用例本身可以执行:
bingo test -ut:23 tests, 23 successes, 0 failures
失败发生在 coverage 模式的 Conan 依赖解析阶段,尚未进入组件 UT 逻辑。因此当前更像是 Bingo / Conan / coverage 工具链中的 provider 选择冲突,而不是组件代码问题。
想请教的问题
- openUBMC Lua 组件当前推荐的 UT coverage 命令是否仍然是
bingo test -ut -cov? - 在启用 LuaJIT 的组件中,coverage 流程是否应避免同时引入
lua/5.4.6与luajit/2.1.0.b022? - 这个 provider conflict 是否需要在 Bingo / CI/CD coverage 流程中处理?
- 如果目前有推荐的临时规避方式,是否应该通过组件侧参数设置,还是应由 cicd / Bingo 工具链统一修复?
