:toc:
= GitLab 协议模糊测试器社区版
本项目基于 Peach Fuzzer Professional v4,后者于 2020 年被 GitLab 收购。Peach Fuzzer Professional 的某些功能已被移除,并将在未来作为 GitLab 的一部分提供。本项目替代了托管在 GitLab 和 Source Forge 上的 Peach Fuzzer 社区项目。
由于此代码最初由 Peach Tech 开发,仓库中可能多处提及 Peach Tech 的员工、电子邮件地址、网站或特有功能。这些内容将逐步更新为指向 GitLab。如果你发现此类内容,欢迎提交 MR 以请求澄清和/或更新。
在二进制文件可用之前,请遵循本地构建说明。
== 仓库布局
build:: 编译仓库的构建脚本。包括 waf(Peach 使用的构建系统)、asciidoctor 模板以及集成构建中 Jenkins 使用的各种脚本。
core:: 开源与闭源 Peach 之间的通用类和接口。
docs:: 用户指南、开发者指南和试用指南的所有文档。
packer:: packer(https://packer.io)用于生成托管试用 AMI 和本地试用 OVA 的模板和脚本。
pro:: Peach Professional 及其相关应用程序和测试的源代码。
tools:: 构建所需的脚本(nunit 启动器和 *.exe.config 生成器)。
== Git 工作流
构建脚本要求所有提交消息遵循一套规则。消息必须以以下前缀之一开头:new: chg: fix: dev:。不允许合并提交,建议将所有 PR 压缩为单个提交。
提交消息的第一行用于自动生成面向客户的变更日志。后续行可以包含任何内容,并且在生成变更日志时会被忽略。如果提交消息以 dev: 开头,则该提交将从变更日志中省略。其他提交被归类为新增、更改或修复。
== 本地构建说明
Peach 支持在 Windows、Linux 和 OSX 计算机上编译。Peach 使用 waf(https://waf.io/)作为其构建系统。Waf 支持“构建变体”的概念,用于为不同平台和架构编译 Peach。
Peach 使用 11 种不同的构建变体:
Windows:: win_x86_debug win_x86_release win_x64_debug win_x64_release
Linux:: linux_x86_debug linux_x86_release linux_x86_64_debug linux_x86_64_release
OSX:: osx_debug osx_release
文档:: doc
Waf 支持外部构建,这意味着中间文件和输出二进制文件放置在不同于源代码的目录中。对于 Peach 构建,中间文件放置在 slag/{variant} 目录,并安装到 output/{variant} 目录。
Waf 会在根目录的所有子目录中查找 wscript_build 文件并执行其中的内容。对于大多数顶层 wscript_build 文件,它们通常只包含下一步要递归的子目录列表。
=== Windows 构建先决条件:
通过 PowerShell 添加以下两个注册表项:
=== Linux 构建先决条件:
=== 构建命令
编译 Peach 所需的最小命令如下:
waf configure:: 这是编译 Peach 必须运行的第一步。此步骤类似于 Linux 库编译的 autoconf 阶段。+Waf 将尝试定位所有构建依赖项并保存其路径。如果某个构建变体的依赖项无法定位,则该构建变体将被标记为不支持。这在你只想构建 linux_x86_64 但不需要构建文档时可能很有用。+configure 阶段将运行 paket(https://fsprojects.github.io/Paket/)程序,并根据 paket/paket.dependencies 中的需求从 nuget 获取所有第三方依赖项。+注意:waf configure 只需运行一次。对于修改 Peach 源代码的通常开发工作流程,你不需要运行此命令。但是,如果你对构建脚本(位于 build 目录)进行了更改,或者更改了已安装的构建工具集,则需要重新运行此命令,以便解析更新的工具路径。+提示:如果由于无法定位所需工具而发生错误,请尝试以更高详细级别重新运行。waf configure -v 将显示每个正在定位的依赖项及其检测到的完整路径。+配置阶段也是集成构建设置版本号的方式。通过运行 waf configure --buildtag=4.3.100,所有构建产物都将标记上指定的构建标签。如果未指定选项,构建标签默认为 0.0.0。
waf build:: 这是编译仓库中所有位的命令。编译包括生成版本标记文件、运行任何源代码转译、编译源代码并链接结果。+此命令类似于在 Linux 上运行 make。+构建阶段的所有产物最终将位于 slag/{variant} 目录。
waf install:: 此命令将程序输出以及所有库依赖项安装到 output/{variant} 目录。+此命令类似于在 Linux 上运行 make install。+Linux 上通常的开发工作流程是运行 waf install --variant=linux_x86_64_debug,然后运行 ./output/linux_x86_64_debug/bin/peach。
=== 可选构建命令
waf pkg:: 生成安装程序 zip。对于 Peach,有两个 zip,一个用于内部使用(运行单元测试/集成测试),另一个用于外部使用(上传到下载站点)。两个 zip 位于 output/{variant}/pkg 文件夹中。最后,此 waf 命令将创建本地许可证服务器 zip。
waf test:: 运行所有单元测试。要为 Windows x64 调试变体运行单元测试,可以运行 waf test --variant=win_x64_debug。
waf msvs2017:: 为 Visual Studio 2017 创建所有 .csproj 文件和 Peach.sln 文件。
waf zip:: 将安装阶段的所有输出压缩到一个单一产物中。
=== Waf 说明
Waf 的使用遵循语法:waf [command] [options]。对于所有命令,可以通过添加一个或多个 -v 参数来提高详细程度。除 configure 外,所有命令都支持以下选项:
--variant=xxx 会将命令过滤为名称中包含 'xxx' 的变体。这意味着 --variant=4_d 将匹配 linux_x86_64_debug 和 win_x64_debug 变体。-j1 将控制 waf 的任务并行化,使其一次只能运行一个任务。默认情况下,waf 会同时运行 N 个任务,其中 N 对应于主机 CPU 核心数。仅一次运行一个任务有时可能有助于排除构建错误。waf --help 将显示完整的支持命令和选项列表。== 提交合并请求
指南
请确保 Peach 团队,特别是 @mikeeddington 知晓合并请求接受的任何截止日期。否则,合并请求通常可能需要几个月才能被接受。
=== 日志记录
Peach 使用 NLog 进行调试/跟踪消息的记录。
调试:: 调试消息应谨慎使用。客户使用 --debug 来识别其测试用例中的问题。保持此输出简洁至关重要,仅显示最终用户需要的信息。
跟踪:: 此日志级别应用于 Peach 开发人员主要需要的输出,或用于诊断可能的问题,但不是客户希望始终看到的内容。
=== 单元测试
所有拉取请求都需要包含单元测试,以合理覆盖所有功能。NUnit 是我们的单元测试框架。在提交拉取请求之前,请验证所有 Peach 单元测试均已通过。
=== 文档
所有发布的代码功能都需要产品文档。这可能是针对修复或类似功能的新文档,或对现有文档的更新。