开发指南
项目顶级目录结构
TQUIC项目的顶级目录如下:
目录 | 说明 |
---|---|
src/ | TQUIC实现 |
tools/ | TQUIC示例工具 |
benches/ | 基准测试 |
fuzz/ | 模糊测试 |
interop/ | 互操作性测试 |
include/ | 自动生成的C/C++头文件 |
提示
如果对src/ffi.rs
进行了修改,应该更新头文件 include/tquic.h
。
头文件可以使用如下命令自动来生成:
cbindgen -o include/tquic.h
TQUIC实现目录结构
目录或文件 | 说明 |
---|---|
src/connection/ | QUIC协议核心实现 |
src/congestion_control/ | 各种拥塞控制算法实现 |
src/multipath_scheduler/ | 各种多路径调度算法实现 |
src/tls/ | 基于boringssl/rustls的封装 |
src/h3/ | HTTP/3协议 |
src/qlog/ | Qlog |
src/ffi.rs | C/C++语言的封装接口 |
src/build.rs | boringssl库的编译 |
src/*.rs | TQUIC协议库的基础组件 |
单元测试
- 如何查看单元测试的日志输出?
# 请将`test_name`替换为测试用例的名称
RUST_LOG=trace cargo test test_name -- --nocapture
- 如何查看单元测试覆盖率?
建议使用tarpaulin
生成单元测试覆盖率报告:
# 安装tarpaulin
cargo install cargo-tarpaulin
# 在项目基目录执行
cargo tarpaulin --exclude-files "deps/*" -o html
模糊测试
- 如何安装模糊测试工具cargo-fuzz?
rustup install nightly
rustup default nightly
cargo install cargo-fuzz
- 如何查看已有模糊测试用例?
cargo fuzz list
- 如何执行指定模糊测试用例?
cargo fuzz run <target_name> -- -max_total_time=30
更多用法参见cargo-fuzz文档。
一致性测试
我们使用Ivy语言定义了QUIC v1协议的形式化规范。基于该规范,使用基于组合规范的测试方法可以测试QUIC实现的一致性。
欲了解更多信息,请参阅文档。
互操作性测试
我们使用quic-interop-runner执行自动化的、持续的互操作测试。测试结果公布在这个网页上。
Rust文档
- 如何构建tquic的文档
cargo doc --no-deps