跳到主要内容

开发指南

项目顶级目录结构

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.rsC/C++语言的封装接口
src/build.rsboringssl库的编译
src/*.rsTQUIC协议库的基础组件

单元测试

  • 如何查看单元测试的日志输出?
# 请将`test_name`替换为测试用例的名称
RUST_LOG=trace cargo test test_name -- --nocapture
  • 如何查看单元测试覆盖率?

建议使用tarpaulin生成单元测试覆盖率报告:

# 安装tarpaulin
cargo install cargo-tarpaulin

# 在项目基目录执行
cargo tarpaulin --exclude-files "deps/*" -o html

模糊测试

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