urma-ut-generator
Generate and maintain stable URMA GTest unit tests in umdk.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Generate and maintain stable URMA GTest unit tests in umdk.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
按 C 语言编程规范编写、检视或审阅 C/C++ 代码改动。
识别代码中可替换为CAM算子的DeepEP算子,基于实际运行参数校验约束,自动完成通信域转换(NCCL->HCCL)、设备适配(CUDA->NPU)及算子替换。
将 RDMA verbs 代码迁移到 URMA API。当用户想要将 infiniband verbs 代码转换为 URMA,或在进行 RDMA/InfiniBand 迁移时,或用户提到 verbs API、ibv_*、rdma,或想要使用 URMA 替代传统 RDMA 时使用此 skill。此 skill 处理完整的迁移,包括 API 映射、数据结构转换和 URMA 特定优化。
| name | urma-ut-generator |
| description | Generate and maintain stable URMA GTest unit tests in umdk. |
本文件是 URMA GTest 用例生成指导。遇到下面任务时按本 skill 执行:
目标是生成稳定、可维护、可复用的接口级 UT,而不是为了覆盖率进入真实设备路径。
所有 URMA UT 工作在本地 master 分支上处理。开始前先确认:
git status --short --branch
git branch --show-current
要求:
master。master 已包含正式 GTest UT 基线。master 落后 origin/master,先同步上游再补用例。先判断测试对象类型,再选择对应测试边界:
-Wl,--wrap=ioctl 捕获命令,不访问真实 ioctl。urma_context_t、urma_device_t、urma_ops_t 覆盖参数校验和 ops 返回传播。urma_api.h 和 uvs_api.h 中声明的接口。新增用例必须先查已有数据:
test/urma/include/urma_cmd_mock.h。BondPathFixture 或 BondPublicApiFixture。test/urma/ut/core/ 复用或扩展本地 fixture。test/urma/fuzz/,urma_api.h 和 uvs_api.h 分别维护独立入口文件。nullptr、UINT32_MAX、dev_fd=-1、空数组。硬约束:
.c 文件测试 static 函数。/dev/uburma、sysfs、netlink、真实 provider、UDMA 硬件或 /lib64/urma/*。适用场景:生产代码已经存在,需要扩大 UT 覆盖面。
执行流程:
bash test/urma/script/urma_UT.sh,查看 phase_common、phase_urma_core、phase_urma_bond、phase_uvs 摘要。git diff --check。输出要求:
适用场景:本次变更新增或修改了 src/urma 下的生产代码。
执行流程:
bash test/urma/script/urma_UT.sh,新增可执行源码行覆盖率必须 >=90%。新增行覆盖率门禁:
test/urma/script/check_diff_coverage.py 检查新增行覆盖率。git merge-base HEAD origin/master。URMA_UT_DIFF_BASE=<commit> 覆盖 base。src/urma/commonsrc/urma/lib/urma/coresrc/urma/lib/urma/bondsrc/urma/lib/uvsDiff coverage: no instrumented added lines 并通过。90% 时脚本失败,并打印未覆盖行。TEST(UrmaCommonTest, FunctionNameCoversNormalAndInvalidInput)
{
InputType input = MakeReusableInput();
EXPECT_EQ(EXPECTED_OK, function_under_test(&input));
EXPECT_EQ(EXPECTED_ERR, function_under_test(nullptr));
}
要求:
TEST(UrmaCmdTlvTest, XxxTlvAttrsMatchExpected)
{
urma_cmd_xxx_t arg = urma_test::MakeXxxCmd();
ResetIoctlCapture();
EXPECT_EQ(0, urma_ioctl_xxx(urma_test::MOCK_IOCTL_FD, &arg));
ExpectCapturedCommand(URMA_CMD_XXX, urma_test::ExpectedXxxAttrs(&arg));
}
断言稳定字段:
args_len。type。field_size。如果暂时没有完整 attr 预期,只允许用 header 级断言作为过渡:
EXPECT_URMA_IOCTL_WRAPPER(urma_ioctl_xxx, URMA_CMD_XXX, urma_cmd_xxx_t);
后续补 mock 数据时,必须升级为完整 attr 断言。
TEST(UrmaBondTest, PublicApiRejectsInvalidState)
{
BondPublicApiFixture fixture;
EXPECT_EQ(URMA_EAGAIN, bondp_delete_jfs(&fixture.jfs.v_jfs));
}
要求:
TEST(UrmaCoreTest, CpApiXxxValidatesInputsAndDispatchesOps)
{
CoreApiFixture fixture;
urma_xxx_attr_t attr = {};
EXPECT_EQ(URMA_EINVAL, urma_modify_xxx(nullptr, &attr));
EXPECT_EQ(URMA_EINVAL, urma_modify_xxx(&fixture.xxx, nullptr));
EXPECT_EQ(URMA_EINVAL, urma_modify_xxx(&fixture.xxx, &attr));
fixture.ops.modify_xxx = MockModifyXxx;
EXPECT_EQ(URMA_SUCCESS, urma_modify_xxx(&fixture.xxx, &attr));
}
要求:
bad_xxx 回填。在 test/urma/include/urma_cmd_mock.h 中按同一模式补:
inline urma_cmd_xxx_t MakeXxxCmd()
{
urma_cmd_xxx_t arg = {};
arg.in.some_field = MOCK_VALUE;
return arg;
}
inline std::vector<ExpectedAttr> ExpectedXxxAttrs(urma_cmd_xxx_t *arg)
{
return {
{ XXX_IN_FIELD, sizeof(arg->in.some_field), 1, 0,
reinterpret_cast<uintptr_t>(&arg->in.some_field) },
};
}
优先扩展已有 fixture:
BondPathFixture:datapath convert/schedule、WR/CR、target/segment/path 映射。BondPublicApiFixture:bondp_api.h、bondp_datapath.h、bondp_segment.h、bondp_provider_ops.h 的无设备 public API。新增字段必须保持 fixture 为纯内存对象,不引入真实 fd、真实 context 创建或真实 provider 依赖。
bash test/urma/script/urma_UT.sh 的阻断条件:
90%。当前只作为观察报告、不阻断的内容:
Phase 分组:
phase_common: src/urma/commonphase_urma_core: src/urma/lib/urma/corephase_urma_bond: src/urma/lib/urma/bondphase_uvs: src/urma/lib/uvsphase_fuzz: test/urma/fuzz 中 liburma/libuvs 对外 API case 覆盖率,按
urma_api.h、uvs_api.h 声明和 fuzz case 表计算。phase_fuzz_reached_src: 单独运行 --phase fuzz 时 fuzz 触达的 liburma/libuvs
生产源码 lcov 覆盖率,仅用于观察。恢复 phase 强门禁前必须满足:
提交前逐项确认:
bash test/urma/script/urma_UT.sh 通过。>=90%。git diff --check 通过。