mcpField
V
verify

verify

github.com/redisearch测试与质量6.2k46 次安装今天更新
代码仓库

关于 verify

供准备提交代码或创建 PR 的贡献者使用的验证技能。它根据修改涉及 C、Rust 或两者,选择相应的构建、测试、格式和安全检查。

主要功能

  1. 01按修改语言选择检查项
  2. 02运行 C 构建和单元测试
  3. 03运行 Rust 格式、Lint 和测试
  4. 04用修复前代码验证内存安全修复
  5. 05按需运行行为和协调器测试

适用场景

  1. 01提交前验证 C 或 Rust 修改
  2. 02检查声称已修复的内存安全问题
  3. 03在集群环境验证协调器修改

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/redisearch/redisearch --skill verify

安装后在 Claude Code 中输入/verify确认已加载。

详细介绍

验证技能

提交或创建 PR 前,请执行完整验证。

用法

使用此技能在完成更改前运行全面检查。

说明

确定修改了哪些代码(C、Rust 或两者),并运行相应检查。

如果依赖项、.install/、引导目标、工具链版本或 CI 配置发生更改, 请先按照引导和依赖项更改操作。

如果修改了 C 代码

按以下顺序运行检查:

1. 构建
./build.sh

确保整个项目编译通过,且不会将警告视为错误。

2. C/C++ 单元测试
./build.sh RUN_UNIT_TESTS ENABLE_ASSERT=1

所有单元测试都必须通过。有关运行特定测试的详细信息,请参阅 /run-c-unit-tests。

3. 行为测试
./build.sh RUN_PYTEST ENABLE_ASSERT=1

如果更改涉及命令处理程序、查询执行、索引流水线或 RDB 序列化,则必须运行此项。

4. AddressSanitizer(建议用于内存相关更改)
./build.sh RUN_UNIT_TESTS SAN=address

如果更改声称修复了内存安全漏洞,还请遵循下文的 内存安全修复(任一语言)。

5. 协调器测试(如果修改了 coord/ 代码)

对协调器(src/coord/)、分布式混合模块(src/coord/hybrid/)或 Map-Reduce 层(src/coord/rmr/)的更改,必须在集群环境中进行测试:

./build.sh RUN_PYTEST ENABLE_ASSERT=1 REDIS_STANDALONE=0 SHARDS=3

此操作会启动一个包含 3 个分片的集群,并在其上运行完整测试套件。

如果修改了 Rust 代码
1. 格式检查
make fmt CHECK=1

如果失败,请运行 make fmt 修正格式。

2. Lint 检查
make lint

修复所有 clippy 警告或错误。

3. 构建
./build.sh

确保整个项目编译通过。

4. Rust 测试
cargo nextest run --manifest-path src/redisearch_rs/Cargo.toml

所有 Rust 测试都必须通过。

如果更改声称修复了内存安全漏洞,还请遵循下文的 内存安全修复(任一语言)。

如果同时修改了 C 和 Rust

运行以上两个部分中的所有检查。

内存安全修复(任一语言)

如果更改声称修复了内存安全漏洞(越界访问、释放后使用), 请在修复前的代码上执行一次 sanitizer 复现,以证明该漏洞存在—— 仅预测报告不算验证。修复前的代码应产生 sanitizer 报告, 修复后的代码则应干净运行。

对于 C,可使用一种无需构建 ASan 构建目录的简便方式:在修复前的 版本中提取受影响的文件,并针对它编译独立的复现程序,例如:

git show HEAD:src/<file>.c > /tmp/before_fix.c           # fix not yet committed (the usual case)
git show <fix-commit>^:src/<file>.c > /tmp/before_fix.c  # fix already committed
clang -fsanitize=address -g -O0 <repro.c> /tmp/before_fix.c -o repro && ./repro

大多数 src/ 文件无法直接独立编译:预计需要添加 -I 路径,并在 复现程序自己的目录中用最小定义替代较重的头文件(rm_malloc、RS_ABORT、 模块头文件)。这类替代通常只需几分钟,而非几小时。

复现程序必须基于一致的修复前版本构建。如果修复还涉及受提取文件依赖的 头文件、宏或内联辅助函数,也要在同一修复前版本中提取这些内容——用修复后 的头文件编译修复前的 .c 文件,会测试一个混合程序,可能掩盖漏洞,或因无关 原因失败。当依赖文件增至几个以上时,使用检出修复前版本的 worktree 会更简单。

对于 Rust,请在修复前的代码上使用 Miri 运行失败用例 (cargo +nightly miri test --manifest-path src/redisearch_rs/Cargo.toml -p <crate>); 对于 Miri 无法触及的漏洞(FFI、外部内存),请对受影响的测试使用 ASan 构建。 此处无法通过提取单个文件来实现——cargo 会构建整个 crate——而当前检出版本已包含 修复,因此在其中运行 Miri 只能证明修复后的代码运行正常。请先检出修复前的代码树:

git worktree add --detach /tmp/prefix_tree HEAD           # fix not yet committed (the usual case)
git worktree add --detach /tmp/prefix_tree <fix-commit>^  # fix already committed

如果失败测试是在修复时一并添加的,请将该测试(且仅该测试)复制到该代码树中。 使用指向 worktree 的 --manifest-path 运行 Miri 或 ASan;预期该代码树中会失败, 而修复后的检出版本中会干净运行。然后使用 git worktree remove --force /tmp/prefix_tree 清理。

行为测试(适用于任一语言的重大更改)
./build.sh RUN_PYTEST ENABLE_ASSERT=1
在运行中的服务上展示行为

测试套件只能证明其断言的内容。要展示面向用户的变更在真实的 redis-server 上正常工作,或手动复现报告,请遵循 /drive-redisearch。

快速验证

对于仅涉及 Rust 的小改动(子 shell 让命令链更清晰——只切换一次工作目录,运行三条命令):

(cd src/redisearch_rs && cargo fmt --check && cargo clippy --all-targets && cargo nextest run)

对于仅涉及 C 的小改动:

./build.sh && ./build.sh RUN_UNIT_TESTS ENABLE_ASSERT=1

评论

支持 Markdown