urma-ut-generator
Generate and maintain stable URMA GTest unit tests in umdk.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
Generate and maintain stable URMA GTest unit tests in umdk.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional 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 通过。