mcpField
O
ohos-test-fuzz-generation

ohos-test-fuzz-generation

github.com/openharmonyinsightTesting & quality3541 installsUpdated 11w ago
Repository

About ohos-test-fuzz-generation

A skill for generating and checking FUZZ tests for OpenHarmony APIs. It provides command-line tools and workflow guidance for test generation, seed creation, rule checks, and compliance reports.

Key features

  1. 01Generate FUZZ test cases
  2. 02Create semantic seeds
  3. 03Check 26 test rules
  4. 04Automatically fix eligible violations
  5. 05Generate compliance reports

Use cases

  1. 01Create a fuzzer for a parameterized API
  2. 02Review an existing fuzzer against project rules
  3. 03Produce seeds and a compliance report

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/openharmonyinsight/openharmony-skills --skill ohos-test-fuzz-generation

After installing, type/ohos-test-fuzz-generationin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

check_scripts/
__init__.py
SecurityCodeReview_FuzzCheck_001.py
SecurityCodeReview_FuzzCheck_002.py
SecurityCodeReview_FuzzCheck_003.py
SecurityCodeReview_FuzzCheck_004.py
SecurityCodeReview_FuzzCheck_005.py
SecurityCodeReview_FuzzCheck_006.py
SecurityCodeReview_FuzzCheck_007.py
SecurityCodeReview_FuzzCheck_008.py
SecurityCodeReview_FuzzCheck_009.py
SecurityCodeReview_FuzzCheck_010.py
SecurityCodeReview_FuzzCheck_011.py
SecurityCodeReview_FuzzCheck_012.py
SecurityCodeReview_FuzzCheck_013.py
SecurityCodeReview_FuzzCheck_014.py
SecurityCodeReview_FuzzCheck_015.py
SecurityCodeReview_FuzzCheck_016.py
SecurityCodeReview_FuzzCheck_017.py
SecurityCodeReview_FuzzCheck_018.py
SecurityCodeReview_FuzzCheck_019.py
SecurityCodeReview_FuzzCheck_A.py
SecurityCodeReview_FuzzCheck_B.py
SecurityCodeReview_FuzzCheck_C.py
SecurityCodeReview_FuzzCheck_D.py
SecurityCodeReview_FuzzCheck_E.py
SecurityCodeReview_FuzzCheck_F.py
SecurityCodeReview_FuzzCheck_G.py
evals/
evals.json
evals/files/configs/build_gn/
build_gn_bad.gn
build_gn_good.gn

Details

From the project README

FUZZ 测试生成引擎

核心工作流

用户输入需求
      ↓
[决策点] 用户意图是什么?
    ├─ 给类名要求生成测试 → 进入完整工作流
    ├─ 给现有文件要求检查 → 跳至阶段 5(规范审查)
    ├─ 要求生成种子 → 跳至阶段 4(种子语义生成)
    └─ 要求生成报告 → 跳至阶段 5 后生成报告
      ↓
[阶段 1] 代码分析 —— 解析目标 API 类结构、方法签名、参数类型
      ↓
[阶段 2] 骨架生成 —— 创建 5 文件标准化工程(.cpp/.h/BUILD.gn/project.xml/corpus)
      ↓
[阶段 3] 实现填充 —— 模板替换为实际 API 职责与数据构造逻辑
      ↓
[阶段 4] 种子语义生成 —— 基于参数类型/名称特征生成高价值初始 corpus
      ↓
[阶段 5] 规范审查 —— 26 条规则逐一验证,输出合规报告
    **加载触发**:仅加载违规规则的 rules/SecurityCodeReview_FuzzCheck_XXX.md
    **必须加载**:规则 005 详细说明(复杂参数构造,误报高发区)
    **不要加载**:未违规规则、规则速查表(`references/rules-overview.md` 仅在审查时加载)
      ↓
[阶段 6] 自动修复 —— 可自动修复规则执行修复(最多 3 轮)
      ↓
交付生成文件 + 审查报告 + 人工确认项清单

异常处理决策树:

  • 阶段 1 解析失败(找不到类/头文件)→ 检查类名拼写 → 提供头文件路径 → 手动解析
  • 阶段 5 发现不可自动修复违规 → 输出人工修复指南 → 标记 BLOCK → 跳过修复
  • 阶段 6 修复 3 轮后仍失败 → 停止修复 → 输出剩余违规清单 → 建议人工审查

工具入口

工具用途命令示例
tools/fuzz_generator.py生成 FUZZ 测试用例python tools/fuzz_generator.py -n XxxXxx_fuzzer -N Namespace -c ClassName -H header.h -p output_path
tools/fuzz_check.py规范审查(26 条规则)python tools/fuzz_check.py --dir fuzzer_dir [--fix]
tools/seed_generator.py生成语义化种子python tools/seed_generator.py --dir fuzzer_dir [--api ApiName]
tools/generate_report.py生成合规报告python tools/generate_report.py --dir fuzzer_dir

关键决策

生成前的自检

开始生成前,先确认:

  1. 目标 API 是否有参数? 无参数 → 拒绝生成,建议单元测试(规则 001)
  2. 是 IPC 接口吗? 继承 IRemoteBroker / 含 DECLARE_INTERFACE_DESCRIPTOR → 必须生成 IPC stub fuzzer(LLVMFuzzerInitialize 初始化全局 g_stub,LLVMFuzzerTestOneInput 用 code % CODE_MAX 驱动),sptr<T> 参数写入 WriteRemoteObject(nullptr)(规则 007)
  3. 单文件接口数量? >10 个 → 拆分为多个 fuzzer(规则 006)
  4. 参数是否全为输出类型? 非 const 引用/指针 → 跳过,无需 fuzz 输入
类型映射决策
类型类别消费代码说明
标识符类型(大驼峰非枚举)fdp.ConsumeIntegral<uint64_t>()如 ScreenId/NodeId,底层是 uint64_t typedef
进程/用户标识fdp.ConsumeIntegral<uint32_t>()如 ProcessId/Uid
文件描述符fdp.ConsumeIntegral<int32_t>()如 Fd
枚举类型static_cast<EnumType>(fdp.ConsumeIntegral<uint8_t>() % ENUM_SIZE)必须用 uint8_t(规则 013)
字符串fdp.ConsumeRandomLengthString(256)限制最大长度防止内存爆炸
容器先消费长度 uint8_t count = fdp.ConsumeIntegral<uint8_t>() % 32,再循环消费适用于 std::vector<T>

关键区分:大驼峰命名不一定是枚举,可能是 typedef 别名。必须检查 ENUM_SIZE_MAP 确认是否为枚举。

未知类型处理策略:

  • 类型在 TYPE_CONSUMER_MAP 中 → 直接使用映射
  • 类型不在映射中但为大驼峰 → 检查 ENUM_SIZE_MAP → 是枚举则 uint8_t % ENUM_SIZE
  • 类型不在映射中且非大驼峰 → 检查是否为 std::vector<T> → 是则循环消费
  • 以上都不匹配 → 必须加载 tools/fuzz_generator.py 查看 COMPLEX_TYPE_MAP 或构造自定义消费逻辑
NEVER 列表
  • NEVER 使用 rand() / random() —— 不可重现,丧失覆盖率追踪意义(规则 017)
  • NEVER 将 size 参数当作变异数据传入 API —— fuzz 引擎无法有效变异长度(规则 010)
  • NEVER 直接解引用 data 指针 —— 可能包含非法地址,100% 触发 SIGSEGV(规则 018)
  • NEVER 使用未初始化全局指针 —— fuzz 引擎会误判为稳定崩溃而停止探索(规则 019)
  • NEVER 对无参数 API 生成 FUZZ —— 覆盖率永远为 0(规则 001)
  • NEVER 单文件测试超过 10 个接口 —— 变异预算不足,覆盖率下降(规则 006)
  • NEVER 使用 auto 声明 fuzz 变量 —— 无法人工验证类型匹配性(规则 016)
  • NEVER 跳过 Verify 循环 —— 无法发现状态机相关 bug(资源泄漏、顺序依赖)
  • NEVER 对枚举使用 uint32_t —— 1 字节变异效率远高于 4 字节(规则 013)

References

根据任务按需加载:

  • references/rules-overview.md — 26 条规则速查表(名称/严重度/自动检查/自动修复)

    • 加载时机:仅阶段 5 规范审查时
    • 不要加载:生成阶段
  • rules/SecurityCodeReview_FuzzCheck_XXX.md — 违规规则详细说明(正误示例 + 豁免条件)

    • 加载时机:阶段 5 规范审查发现违规时
    • 不要加载:未违规规则
  • rules/SecurityCodeReview_FuzzCheck_005.md — 复杂参数构造规则详解

    • 加载时机:涉及结构体/指针/回调/容器参数时
    • 原因:规则 005 是误报高发区,需仔细核对豁免条件
  • tools/fuzz_generator.py — 用例生成器源码

    • 加载时机:需要了解生成逻辑或自定义类型映射时
    • 关键查看:TYPE_CONSUMER_MAP、ENUM_SIZE_MAP、COMPLEX_TYPE_MAP
  • templates/fuzzer.cpp — 代码生成模板

    • 加载时机:需要自定义 fuzzer 代码结构时
    • 不要加载:正常使用生成器时

官方文档:

Comments

Markdown supported