Add provider generations, automatic proxy groups, richer routing rules and live Controller configuration. Extend encrypted DNS, persistent fake-IP mappings and GeoData support. Add HTTP CONNECT, WireGuard, TrustTunnel, Mieru and MASQUE outbounds; expand TLS/ECH and transport compatibility. Add separately configured H1/H2 MITM and URL, header and body rewriting. Improve UDP association reuse, TCP delivery and H2/H3 scheduling while keeping memory bounded. Add Linux TUN route and system DNS management, MPTCP and TCP Brutal. Replace vendored dependencies with upstream libraries, update and pin Boring 5.4.0, and fix cross-platform builds and CI feature checks.
35 KiB
测试
本仓库维护配置、协议编解码、内存I/O、资源所有权和生命周期回归。 网络互通与压力由独立容器工具管理,结果与结论统一保存在 benchmark 工程。
本地检查
按编译文档准备原生依赖后执行:
cargo fmt --all -- --check
cargo clippy --locked --all-features --lib --bins -- -D warnings
cargo test --locked --all-features --all-targets --no-run
cargo test --manifest-path crates/vole-netstack/Cargo.toml --all-targets
uv run --project scripts --locked python -m unittest discover -s scripts/tests
uv run --project scripts --locked ruff check scripts
uv run --project scripts --locked ruff format --check scripts
宿主只运行明确的无网络对端回归,全目标测试仅编译。invoke::tests::包含监听器用例,
不能整体在宿主执行。CI完整过滤器以Tests workflow为准;
CI使用Debug和继承Release优化的ci-release,正式产物使用标准release。
Core Debug、Release 和 Quality 测试使用 Ubuntu 26.04;发布构建的 Linux runner 保持 Ubuntu 24.04。
Windows的UWP/Wintun feature互斥,应明确选择后端,不使用--all-features。
定向回归
Unix TUN 适配器与数据面循环:platform::tun_rs_io::tests::、tun_runtime::tests:: 使用 Unix socketpair 和内存 Dispatcher 检查包边界、批量收发、配置 MTU、取消与描述符所有权。Linux 仅在 cfg(test) 使用共享描述符适配,真实构造器仍拒绝非 TUN;Apple 保留 tun-rs 的包信息头路径。这些回归不代替真实 TUN 验收。
Mieru UDP载体的TCP上传收尾:outbound::mieru::udp::tests::mieru_udp_upload_。
五项纯内存回归使用真实编解码、可靠驱动与有界origin流,覆盖尾包首发成功后丢失、重传后EOF,
以及待ACK时的Stop、取消shutdown future、同载体兄弟、立即Drop与对端Close;不代签真实TUN交付或RSS。
关闭后的收包边界:outbound::mieru::udp::tests::mieru_udp_closed_,以实际首Close丢失、迟到ACK和origin EOF验证最后SID与同载体兄弟。
outbound::mieru::udp::balanced_driver_tests::mieru_udp_empty_sid_ready_invalid_preserves_idle_retirement_cancel_and_first_send_gate
覆盖首发前不收包、空会话持续无效输入下的原空闲退休及Stop;这些纯内存结果不替代真实TUN验收。
outbound::mieru::udp::tests::mieru_udp_first_close_loss_recovers_with_silent_peer_before_origin_eof
使用真实可靠驱动、codec与有界origin,覆盖首Close丢失且目标无后续DATA/ACK时的正常原站EOF;
保留payload/hash与资源回收检查,不代签自然关闭故障归因或真实TUN压力表现。
同模块的 mieru_udp_close_retry_ 使用实际驱动验证无响应时最多两次补发,以及补发等待中的活动Stop与owner回收。
同模块的 mieru_udp_timeout_epoch_ 以真实codec验证TX拆批间ACK增长、旧flight超时惩罚归并、
实际重发再次超时、fast/timeout优先级及未ACK许可回收;不代替真实TUN的丢失恢复和性能验收。
outbound::mieru::udp::tests::mieru_udp_saved_rto_ 通过同一物理owner的两类业务与真实codec,验证
UDP发送时期限、TCP动态期限、失败发送不发布状态、快速重传及整write许可回收。
smux 纯内存边界:transport::smux::,覆盖就绪 DATA 的单次 poll 预算、未读流与兄弟流、整帧分配预算、极小合法配额、本地关闭释放和远端 DATA→FIN 顺序。
调度测试隔离 Tokio 的独立 cooperative allowance;这些测试不代替真实 TUN 性能验证。
VMess/Trojan gRPC 延迟响应(纯内存 H2 duplex,Trojan 加内存 TLS):启用
cli,interop-test 后运行 --test grpc_protocol_pool。覆盖认证提交后跨越原期限的上传、
迟到状态校验、Trojan 半关闭尾部,以及同一挂起读取的活动 Stop、对端自然退出和资源释放。
Trojan-only 构建使用 --no-default-features --features outbound-trojan --lib;不代替真实 TUN 验证。
VLESS 的同类边界使用 --test vless_transports grpc_committed_vless_request_outlives_delayed_http_response,
同 target 的 grpc_unresponsive_peer_keeps_original_setup_deadline 检查未收到 SETTINGS 时仍受原期限约束;
另以 --test vless_lifecycle vless_all_handshakes_keep_the_original_deadline_and_join_cancelled_io
保留未完成建链的原期限;VLESS-only 编译使用 --no-default-features --features outbound-vless --lib,不添加 cli。
客户端凭据与输入(纯内存):config::tests::client_uuid_、
config::vmess::cipher_compatibility_tests::、config::hysteria2::p08_tests::hopping_。
实际映射凭据、端口跳跃和各协议数据面由真实 TUN 另验收。
UDP 配置归一化(纯内存):config::mihomo_udp_tests::,覆盖 VLESS none 使用
XUDP 并保留 Vision、既有编码,以及 HY2/TUIC 的固有 UDP 能力和 SOCKS5 显式开启控制。
仅经 Config::parse_yaml 检查公开配置与归一化结果,不初始化运行时,不代替真实 TUN 选路或协议互通。
WS 查询和头预算:config::vmess::websocket_query_tests:: 与内存 duplex 的
--test stream_foundations websocket_early_data_and_remaining_frames_keep_the_original_byte_order;
XHTTP 输入和自定义上行方法:--test xhttp_config、
--test xhttp_requests packet_metadata_and_upload_methods_are_sent_in_each_supported_location。
VLESS packetaddr 自主写使用实际 PacketUp Writer 的纯内存 H2 duplex:
--test vless_transports packetaddr_xhttp_memory::packetaddr_xhttp_keeps_first_flush_and_drives_last_datagram_without_post_ack。
覆盖请求头/首 DATA 的 POST 确认,以及最后单帧的独立推进、确认前接收和同步 Stop。
已建立关联的部分写取消使用库过滤器
outbound::vless::datagram::tests::established_packetaddr_partial_write_resumes_by_send_or_receive_without_replay,
检查越过原建链期限后由 send/receive 恢复同帧、无重放及回复来源。
这些内存 seam 不代替 H3、真实 TUN、进程 RSS 或压力验收。
VLESS 私有 H2 split 活动租约:--lib outbound::vless::outbound::active_h2_memory_tests::private_split_h2_shares_four_active_leases_and_stops_both_legs -- --exact,以真实 duplex H2 两腿验证四租约共享、阈值扩容、兄弟关闭、末租约释放和同步 Stop/join;它不是实际 TUN 或 TLS wire 互通验收。
REALITY 资格使用同模块的 private_split_h2_reality_qualification_shares_four_active_leases_and_stops_both_legs;
private_split_h2_reality_peer_stream_credit_opens_new_download_physicals 检查低对端信用,
Linux 的 private_split_h2_reality_control_fallback_and_dialer_stop_do_not_take_cached_sender 检查独立 TCP-control 与 Dialer/节点 Stop。
这些纯内存测试从公开 REALITY 配置进入池选择,但测试 peer 不执行 REALITY/TLS 认证;真实 TUN 认证与 RSS 必须单独验证。
Gun 增量读取(纯内存):transport::grpc::streaming_read_memory_tests::。
实际H2/有界duplex覆盖已校验前缀在消息尾到达前交付、拆分头与varint、空消息、
取消恢复、原有合法编码、截断与trailers,以及半关闭尾读和Stop/join;不代表TUN压力结果。
private h2mux PacketUp 两阶段写(纯内存):
outbound::sing_mux::tests::private_packet_up_h2mux_hands_off_tail_and_keeps_strong_flush_fin_stop
经过真实私有包装器与 duplex H2,覆盖末块自主移交、强 flush、半关闭尾读和活动 Stop/join;
transport::h2_write::tests::coalesced_writer_bounds_markers_and_never_flushes_unencoded_or_failed_payloads
检查固定确认登记、未编码兄弟隔离及取消/失败唤醒。另保留既有 datagram 首帧强 flush/部分写取消回归。
transport::sing_mux::h2_driver::prequeued_flush_memory_tests::already_queued_large_data_progresses_before_pending_raw_flush_completes
检查真实 H2 已排队 DATA 在底层强 flush Pending 时继续推进;
transport::h2_write::productive_repoll_memory_tests:: 检查仅有正写入进度且有存活私有确认所有者时
才重调度一次,以及普通写、零进度、失败、Drop 和强 flush 确认边界。
这些测试不代替 XHTTP/H3、真实 TUN、内存或容量验收。
共享 H3 PacketUp 有界响应重叠(纯内存):transport::xhttp::h3_packet_overlap_memory_tests::,
经过归一化节点和实际 factory/H3 driver,检查单正文回收、两响应槽、乱序确认缺口、低流信用、早错误、FIN/Drop 和同步 Stop。
transport::xhttp::packet_up::overlap::lease_memory_tests:: 检查真实 Bytes 最后引用释放的通知、同一 Vec 回收及 closed/Weak 所有权。
这些检查不代替真实 TUN、RSS、吞吐或平台验收。
规则输入与 selector 元数据(纯内存):config::name_regex::tests::、
config::domain_regex::tests::、config::rule_provider::tests::classical_、
routing::tests::in_name_。覆盖命名/数字捕获编号、IN-NAME 和混合 classical 条件。
TFO 纯内存策略与生命周期:
config::functional::tests::node_tfo_is_explicit_and_does_not_inherit_across_proxy_chain、
config::providers::tests::provider_tfo_override_preserves_false_and_materializes_exact_node_policy、
Linux dialer::server_tcp::tests:: 和 dialer::fast_open::tests::。
dialer::fast_open::gate::real_tun_private_tfo_gate 为显式 ignored 容器驱动,
实际 SYN-data、首读/空写/半关闭、源绑定/protect、建链期限与 Stop 须由 Linux 真实 TUN 验证。
这些内存过滤器不证明内核 Fast Open 或其它平台行为。
MPTCP / TCP Brutal 纯内存过滤器:--lib mptcp、config::functional::tests::、
config::sing_mux::tests::、transport::sing_mux::brutal::tests::、
Linux dialer::tcp_control::tests::;池与生命周期另用下方 sing_mux 集成回归。
sing-mux 懒响应与首业务写入期限:transport::sing_mux::tests::,覆盖纯上传期间
延迟 H2 headers/status、空/未完成写入保留原期限,以及迟到状态校验与半关闭。
双子流、出口约束、TCP 回退、TFO、模块及真实参数/发送侧生效、对端协商与 Stop
须在隔离 Linux 真实 TUN 中另验;1 / 3 Gbps 压力及平台、真机结果分别记录。
TUN 网络计划(纯内存,不查询宿主路由或创建接口):config::tun_network::tests::、
platform::linux_network::plan::tests::、platform::linux_network::tests::;
Linux 目标的报文编码:platform::linux_network::netlink::tests::。
ICMP 配置的纯内存过滤器:config::tests::tun_icmp_options_;Linux 覆盖默认/零值、
实际秒值、禁用与现有重连门禁,以及负值/时钟范围/整数溢出拒绝;其他平台验证未知字段拒绝。
Linux Echo 所有权用 tun_runtime::echo::tests::,netstack 编解码用 echo::tests::;
不打开物理 ping socket,不代替实际 TUN、物理源、校验和、权限与 Stop 验证。
被动 TCP 的 PMTU 与兄弟流:netstack 集成过滤器
passive_tun_pmtu_resegments_only_live_sent_tcp_and_preserves_siblings。
Linux Unix Controller 的配置与共享鉴权(不绑定 socket):
config::controller::tests::controller_unix_、
controller::tests::local_context_shares_limits_and_bypasses_only_local_rest_and_websocket_auth、
invoke::foreground::overrides::tests::unix_override_、
二进制 cli::tests::unix_controller_flag_only_transports_the_explicit_text_value。
实际文件权限、绑定冲突、对象替换、drop/Stop 清理在隔离 Linux 真实 TUN 夹具验收。
Linux socket 创建权限、路径替换与严格 umask 的内核回归使用 controller::unix::tests:: -- --ignored --test-threads=1,
仅在隔离 Linux 容器运行;它们检查实际 Unix socket 与本地 IPC,不代替真实 TUN 或完整 Controller 业务验收。
管理 mark 另选 config::controller::tests::controller_mark_、
invoke::foreground::overrides::tests::mark_override_ 和二进制
cli::tests::controller_mark_flag_;实际管理回复包 mark 在同一 Linux 夹具核对。
Controller 推送(纯内存 duplex,无网络监听):controller::websocket::tests::;
安全传输/CORS:controller::secure_tests::;DNS 展示:controller::dns::tests::;
实例完整日志/动态级别过滤:logging::tests::。
组固定清除:routing::proxy_group::tests::automatic_fixed_clear_uses_existing_health_without_probe。
这些过滤器不代替真实 TUN 计数与 Stop 验证。
临时规则控制另选 routing::rule_disable::tests::、controller::rules::tests::、
controller::tests::small_json_body_、
routing::program::tests::disabled_main_rules_skip_subprograms_and_keep_the_decision_snapshot、
routing::diagnostics::tests::rule_switch_view_shares_only_small_state_with_the_program 和
runtime::providers::tests::file_refresh_publishes_valid_members_and_preserves_old_sessions。
规则重匹配的配置与失败关闭(纯内存):config::functional::tests::rematch_、
config::measure::tests::measurement_rejects_routing_only_rematch_nodes、
routing::tests::rematch_name_predicate_is_trimmed_nonempty_and_case_sensitive、
outbound::control::tests::。
运行时消费者与续跑另选 routing::program::tests::rematch_、routing::rematch::tests::、
routing::dispatcher::tests::rematch_、dns::runtime::tests::rematch_;这些用例只使用内存
Dispatcher 和合成端点,不建立监听器或发送网络报文,不代替真实 TUN 组切换验收。
功能出站(纯内存):config::functional::tests::、outbound::dns::tests::、
outbound::reject::tests::;直连解析角色接线:
dns::runtime::tests::runtime_dns_separates_bootstrap_proxy_direct_and_hosts。
进程规则与原始元信息(纯内存,无系统查询):config::process::tests::、
process::tests::、process::linux::tests::(Linux)、process::macos::tests::(macOS)、
routing::program::tests::process_cursor_is_lazy_once_and_keeps_dns_and_subrule_progress、
routing::program::tests::classical_process_provider_resumes_without_selector_side_effects、
dialer::tests::process_inspection_small_concurrency_preserves_identity_and_joins_stop。
共享 socket 初始化槽占满的身份查询截止:dialer::tests::process_inspection_shared_socket_capacity_has_its_own_deadline。
Linux 原生 socket 初始化的许可、取消与 Stop(纯内存):
dialer::native_init_memory_tests::typed_admission_bounds_cancelled_waiters_and_waits_for_stop。
dialer::native_init_fd_tests:: 默认忽略,包含真实 socket 创建与 bind;仅在隔离 Linux
容器内,借用真实 raw-IP TUN fd 后显式运行。它验证初始化调度、选项、回调与 fd 释放,
不代表 TUN 业务或压力通过;后者使用普通 CLI 的独立真实 TUN 验证。
对受影响范围选择过滤器,不逐次重跑整张表。下列库测试使用:
cargo test --locked --no-default-features --features cli,interop-test --lib <过滤器>
| 范围 | 过滤器 | 覆盖重点 |
|---|---|---|
| 配置 | config::tests:: |
YAML准入、图、字段单位与边界 |
| 物理出口 | config::egress::tests::、config::dns::upstream_options_tests::、platform::linux_network::native::tests::、dialer::tests::egress_clones_keep_the_protection_and_stop_owner |
全局/节点继承、Provider整数覆盖、DNS名称优先与池身份、auto-route标记共存和共同Stop owner |
| GeoData | geodata::tests:: |
合成DAT/MMDB、selector、更新发布和取消 |
| 资源与Provider | config::rule_provider::、runtime::providers::tests::、resource::cache::tests::、resource::provider_input::tests::、resource::http::tests:: |
域名紧凑索引、MRS、URI/Base64/AGE候选、流式gzip与认证隔离、失败保留与旧代资源 |
| 策略组 | routing::proxy_group::tests::、routing::balance::tests:: |
选择、容差、恢复和负载均衡 |
| DNS | dns::cache::tests::、dns::runtime::tests::stale_refresh_、dns::runtime::tests::dns_fallback_、dns::runtime::tests::resolve_ipv6_ |
缓存、过期答复/后台预算/退避/epoch/Stop、双栈、竞速和取消 |
| 入口嗅探 | tcp_sniffer::tests::、tcp_sniffer::http2::tests::、udp_sniffing::tests::、tun_runtime::tests::quic_ |
HTTP1/HTTP2目标、HPACK与完整前缀回放;共享QUIC域名键、ECH、预算与重组 |
| QUIC与H3 | transport::quic::、transport::quinn_h3::tests::、transport::quiche_h3::tests::、dns_quic_ |
官方窗口、真实内存QUIC、DATA读取背压、请求取消、兄弟请求及Stop |
| XHTTP与XUDP | transport::xhttp::、transport::h2_write::tests::、xudp::tests:: |
正文缓冲共享、标量部分写入、flush确认、计时与Stop |
| TLS与ECH | security::context::tests::、security::ech::tests::、dns::runtime::ech_tests:: |
证书与身份、内存TLS、动态ECH来源 |
| TrustTunnel/Mieru/MASQUE | trusttunnel、mieru、masque_ |
真实编解码、信用/背压、复用、单流关闭及同步Stop |
| 有界队列与内存策略 | routing::datagram_ready::tests::、managed_udp_connections_、allocator_relief、platform::process_memory::tests:: |
就绪轮询、排空、取消和单次回收 |
| UDP 共享与隔离 | managed_udp_connections_、fake_ip_routing_preserves_tcp_names_and_distinct_udp_reply_addresses、quic_override_resolves_new_domain_and_restores_udp_response_target |
同源多目标、固定目标、逐目标关闭与旧回复隔离,支持共享的底层仍保留 Fake-IP/嗅探还原隔离 |
| TUN 响应背压 | tun_runtime::tests::backpressured_udp_response_handoff |
满队列下每源至多暂持一包、双向推进及取消 |
| UoT | outbound::uot::tests:: |
半帧取消后继续、v2首部、原期限、单槽响应与Stop |
| VMess 响应边界 | outbound::vmess::header::delayed_response_memory_tests::、outbound::vmess::stream::tests::、outbound::vmess::outbound::polled_datagram_memory_tests::、--test vmess_lifecycle |
官方延迟响应向量、HTTP迟到响应与节点取消、提交前期限、响应认证、收发计数回绕、加密 packetaddr 多目标帧与回包来源、跨回绕连续交付、认证错误关闭、逐字节轮询、读写交错取消与关闭 |
| SS2022 | outbound::shadowsocks::datagram::tests:: |
官方内存对端、三种 cipher、空 UDP/EIH、认证后 cipher 准入、取消与轮换 ID、重放边界 |
| Trojan UDP | routing::dispatcher::tests::managed_trojan_udp_、--test trojan |
真实内存帧、同源多目标共享、来源及关闭后旧回复隔离、取消与流释放 |
| TUIC UDP | outbound::tuic::wire::tests::、outbound::tuic::datagram::tests:: |
按声明长度交付、分片满表下新包前进、资源界限和来源隔离 |
| SOCKS5 UDP | outbound::socks5::tests:: |
真实内存握手与帧、同源多目标复用、异源隔离、关闭重建后旧回复隔离、relay 来源和嵌套预算 |
| HTTP 编译与执行 | http_processing:: |
严格规则与 provider、URL/头/正文、压缩与 JSON Patch、选择性 TLS、H1/H2 和有界回退 |
| HTTP Invoke | invoke::http::、resource::http_control::tests:: |
有界私密输入、离线演算、来源未准备、下载 dispatcher 接线、单一准入、取消与 Stop 收尾 |
| HTTP 在线配置 | runtime::providers::apply::http_tests:: |
活动快照继承、变更要求重连、旧候选保留 |
| CLI前台 | invoke::foreground::tests::、invoke::foreground::input::tests:: |
文件/stdin、原生路径、显式 HTTP 文件、CA 读取边界、信号取消及清理 |
独立集成回归按目标运行,例如:
cargo test --locked --no-default-features --features cli,interop-test --test tuic_memory
cargo test --locked --no-default-features --features cli,interop-test --test grpc_pool --test grpc_protocol_pool
cargo test --locked --no-default-features --features cli,interop-test --test sing_mux
cargo test --locked --no-default-features --features cli,interop-test --test shadowsocks_backpressure --test shadowsocks_uot
cargo test --locked --no-default-features --features cli --bin vole cli::tests::
cargo test --locked -p vole-blake3-raw --test derive
内存QUIC/H3对端通过受控DatagramTransport交换真实包,不绑定宿主监听器。
transport::quiche_h3::native_ready_batch_memory_tests:: 验证真实wire帧的共享排空额度、已轮询FIN/RESET、兄弟流和可靠body前缀;不代替完整driver与TUN验收。
netstack的active_tcp_shutdown_drains_accepted_tail_before_fin_without_prior_acks与active_tcp_drop_drains_accepted_tail_before_fin_without_prior_acks使用既有缓冲和真实ACK,验证未确认写入的前缀、FIN排序及最终释放。
stack::tests::failed_fast_retransmit_survives_another_socket_filling_tx使用两个真实内存TCP socket与重复ACK,
验证兄弟socket占满输出后,失败的快速重传在容量恢复时仍可立即重试;不启动网络对端或TUN。
SS2022 的严格官方 TCP codec 回归可单独选择 official_tcp_codecs_all_ciphers_ 和
tcp_response_header_time_salt_auth_and_fragmentation_follow_official_codec;不要在宿主整体运行
outbound::shadowsocks::tests::,其中还包含监听器用例。
Mieru回归保留TCP/UDP分池、慢读背压、单槽交接、终态传播、接收分配复用和未读响应下的Stop。
outbound::mieru::tcp::udp_send_credit_memory_tests:: 用实际Client::create与有生命周期计数的
内存DatagramTransport验证默认LOW UDP Associate载体共享96 KiB发送信用;非默认预算、
其他业务/模式/载体不变,并组接两个真实RawStream验证共享信用、原FIFO2及取消/Stop回收。
两笔32 KiB写入后仍有32 KiB信用;第三笔写被原FIFO2阻塞,不冒充96 KiB已耗尽。
outbound::mieru::udp::tests::mieru_udp_send_credit96_two_sids_keep_fragment_leases_until_their_acks
通过原可靠分片与真实codec输出验证部分/重复ACK、first-send与独立SID许可退休,原TX8不变。
这些用例不创建socket、DNS、监听器或网络对端,不证明真实TUN性能或RSS。
outbound::mieru::tcp::udp_admission_memory_tests:: 使用原命令通道、完成回执和字节许可,
验证保守四写 UDP 准入、第五笔发送屏障、就绪错误、空写、部分记录取消和 NoWait 收尾;TCP 写入保留原等待边界。
outbound::mieru::udp::tests::mieru_udp_admission_depth4_ 另通过实际编解码与可靠驱动,验证 FIFO 分片、累计ACK许可释放和延迟Close拒绝。
outbound::mieru::tcp::udp_pool_memory_tests:: 使用真实池预留、RawStream、原有界命令通道与字节许可,
覆盖繁忙TCP载体与UDP业务隔离、UDP同业务活动复用、许可未退休时背压及Stop释放;不启动物理驱动。
同模块的 least_load_ 检查真实State与Reservation对两载体复用选择的影响,保留随机tie起点、
原新建桶及非LOW/非UDP载体行为;不测量网络负载或RSS。
新增多目标真实 codec 回归使用 outbound::mieru::packet_routing_tests::、
outbound::trusttunnel::packet::tests::、outbound::vmess::header::datagram_memory_tests::、
wireguard_memory_shared_udp_targets_cancel_and_close_independently 与
masque_ip_memory_shared_udp_leases_cancel_and_close_independently。
HY2 透明混淆/pacer 传递使用
salamander_memory_and_pacer_preserve_address_sharing_owned_send_and_close。
它们覆盖逐包地址、取消与独立关闭,不以能力布尔断言替代真实帧和所有权验证。
GeoData、AGE、Provider和缓存测试使用合成输入、公开固定向量、内存流及临时文件。
fake-IP 热更新使用 runtime::tests::live_dns_,经实际运行时组装检查 DNS 停用/重开、
A/AAAA 内存 wire,以及临时 redb 的映射、游标加载和持久 owner 复用,不创建网络 socket。
这些局部预算与行为检查不证明进程RSS、网络吞吐或真机内存达标。
命名指纹准入使用 config::fingerprint_tests::;标准 H2 SETTINGS/ACK 与 ALPS 可选性使用
selected_profiles_use_standard_h2_settings_when_the_server_supports_alps(内存 TLS/H2)。
REALITY 允许经典/混合协商的配置与两腿真实 share 使用
--test reality_config --test security_capabilities(无网络 IO)。
协议输入见protocols,ClientHello输入见fingerprints。 脚本回归验证产物布局、后端/ABI选择和归档;真实编译与原生加载分别验证。
Windows原生检查
名称选择只使用JSON和未注册的内存profile对象,不创建系统VPN或启动连接:
cargo test --locked --no-default-features --features ffi,windows-uwp --lib windows::host::tests::
构建UWP DLL后,在同架构Windows/Python上执行C ABI与COM所有权检查:
python scripts/check_windows_com.py --dll dist/windows/arm64/uwp/vole.dll
x64使用dist/windows/x64/uwp/vole.dll。四个独立子进程覆盖线程初始化、MTA所有权、
线程切换、STA拒绝和响应释放;仅查询未打包环境,不访问VPN或网络。
通过不代表包内、Wintun或设备验证。
网络与压力
container-benchmark interop --source vole=/path/to/Vole
container-benchmark stress --source vole=/path/to/Vole
container-benchmark compare --source vole=/path/to/Vole
所有网络业务经真实TUN,Controller仅作管理入口;服务端与原站遵守容器隔离。
interop --list可离线列举当前用例。测试工具维护负载、对端和计量,Vole不依赖其checkout编译。
互通、压力、平台编译、原生调用与真机验证的结果分别记录,见验收边界。
在线配置的纯内存定向回归:resource::config_apply::tests::、config::live_update::tests::、controller::configs::tests::、runtime::providers::apply::tests::、configuration_candidate_reads_bundle_without_persisting_body_or_metadata、configuration_publication_stops_late_old_tree_hint_refill。覆盖单候选许可、异步/外部线程结果交付、取消后持许可至收尾、严格 API 字段、启动资源拒绝、坏候选保旧图、新 provider 模板延续、候选不写活动资源,以及退休 DNS 树不能回填活动提示。真实 TUN 见证由 benchmark 夹具执行,内存回归不代替平台或业务互通。
共享流式安全身份的纯内存检查(不启动宿主监听器):
cargo test --locked --lib config::security::tests::
cargo test --locked --lib security::client_identity_tests::
配置检查覆盖具名协议的安全模式、传输限制、XHTTP 两腿继承和 cover mTLS 文件预算; 内存 IO 检查共享连接器握手取消和每次握手的独立状态。真实对端互通另行验收。
SS2022 流式插件的纯内存过滤器:config::shadowsocks_plugin::tests::、
transport::ss_framed::tests::、transport::smux::。
它们使用内存流,不启动网络对端;真实TUN互通与压力仍由外部夹具单独验收。
HY2 共享握手的纯内存所有权/期限/同步 Stop:outbound::hysteria2::outbound::shared_handshake_memory_tests::。
文件 mTLS 身份的纯内存 TLS/临时文件回归:
security::tls::tests::identity_rotation_memory_tests::(启用 outbound-http;命名后端再启用 tls-fingerprint)、
security::identity::tests:: 与 config::identity_files::tests::。
覆盖连续换代/旧连接与票据隔离、坏文件保留和读取失败恢复、来源独立、取消/Stop、输入预算及原生材料按需分配;
不创建监听器,实际 TUN/QUIC 轮换仍由容器夹具验收。
HY2 Gecko/Realm 的配置和内存wire回归按 gecko_、realm_ 中列出的memory-only名称定向执行;
TUIC ClientHello 使用 tuic_disable_sni_changes_real_quic_hello_without_changing_verification_policy。
不得将包含网络peer的整个outbound模块直接作为宿主测试执行。
HTTP 处理与 Invoke
http_processing:: 使用合成规则、临时文件、内存 dispatcher 和 duplex,不创建宿主监听器。
规则入口采用 http-ports、mitm、rewrite-providers、rewrite 四个顶层字段,
覆盖严格类型与数值、URL 捕获与替换、请求/响应头、文本与 JSON Patch、压缩、正文预算及整阶段回退。
provider 回归覆盖启用引用的有序展开、关闭引用零 I/O、来源身份、实际 payload 快照、
失败保留、缓存原子发布与取消。规则与私密 CA 的完整合同见 HTTP 处理。
H1/H2 内存对端覆盖共享 TUN/mixed/CONNECT 适配、预读、最终目标单次选路、 原始 URL 选择、跨 origin 凭据隔离、Expect 早响应、流式背压、半关闭、截断拒绝与取消。 选择性 TLS 同时检查 CA/私钥匹配、叶证书 AKI、证书缓存计费与逐 authority 授权。 未命中正文规则时不收集完整正文;命中后只在有界工作区完成处理,失败恢复原始阶段内容。
invoke::http:: 检查私密输入在 JSON Value 分配前的准入与 testHttp 离线演算。
离线演算不下载、不读 provider、不生成证书;没有实际来源时报告未准备,
没有方向样本时仅报告规则被选中,不声称正文已验证。重写总开关关闭仍可演算启用规则,
真实 HTTPS 授权与 CA 条件单独判断。
resource::http_control::tests:: 检查指定 dispatcher 的传递、共享配置许可、
Store 争用及取消后等待下载收尾;invoke::http:: 同时检查 idle refresh 与实例创建互斥。
runtime::providers::apply::http_tests:: 检查普通路由更新保留活动 HTTP 快照,
HTTP 内容或来源上下文变更要求显式重连。失败恢复的策略组选择另选
recovery_snapshot_keeps_current_group_member_without_selection_persistence。
显式配置传递另选 main_config_and_provider_rebuild_preserve_the_addendum_until_explicit_clear、
update_http_addendum_preserves_optional_clear_and_its_separate_byte_limit 和二进制
cli::tests::http_addendum_option_only_transports_an_explicit_native_path。
resource::paths::tests:: 与
resource::cache::tests::authorized_provider_roots_read_file_sources_and_write_only_http_caches
检查原生授权根、符号链接边界、file 读取与 HTTP 缓存写入分离;候选回归同时检查授权上下文继承。
resource::cache::tests::provider_metadata_requires_bounded_regular_files 检查 sidecar 大小与 FIFO 拒绝,坏 metadata 不阻止有效正文读取。
invoke::foreground::overrides::tests:: 检查具体 Controller 覆盖、空值保留及沿用地址解析器;
invoke::foreground::input::tests:: 检查 Base64 来源优先、标准 padding、认证 AGE 固定向量、
输入预算、取消、单份有效输入复用与主文件重读;
runtime::providers::apply::http_tests::routing_updates_keep_active_http_and_changed_http_requires_reconnect
同时检查 foreground 内部模板输入共用候选工作器、坏候选保留与启动资源变化拒绝。invoke::tests::owned_invoke_uses_the_shared_strict_and_runtime_thread_boundaries
检查 CLI 的 owned 请求与借用请求共用严格准入和重入边界。
invoke::foreground::tests:: 检查显式文件与路径、校验不初始化、不自动加载 HTTP 文件、
MITM 关闭不读 CA、无 HTTP 配置的 CA 参数提前拒绝,以及启动期信号取消后 join 清理。
Windows 平台另编译 snapshot_identity_and_readback_include_the_http_addendum,
snapshot_preserves_valid_http_content_expanded_beyond_one_mibibyte 和
snapshot_json_budget_counts_actual_escaping_before_allocation,检查规则实际内容、
独立展开预算、JSON 转义计数与私密材料的会话快照边界。
无默认特性的纯内存回归选择
http_documents_without_adapter_are_rejected_before_resource_preparation;
ca_identity_is_public_der_and_does_not_require_the_http_adapter 检查公开证书身份不依赖 HTTP 适配器,
启用 HTTP 后另选 ca_identity_matches_runtime_authority_without_weakening_key_validation 检查运行期密钥校验。
HTTP/1 早响应与空正文 Upgrade 的定向内存回归:inbound::http::server::early_final_memory_tests::;不运行包含宿主 socket 的整个入站测试模块。
上传完成后的响应等待、静默上限与首字节后绝对读头期限:inbound::http::server::response_deadline_memory_tests::;使用 paused Tokio clock 和内存 duplex。
这些回归不证明真实 TUN 互通、进程 RSS、吞吐、设备信任安装、系统 VPN 或平台真机行为; 对应验收分别由容器夹具、平台构建和设备测试完成。
IP4P 纯解码与严格配置回归:config::ip4p::tests::;不创建 socket 或解析网络名称。
IP4P 接点纯内存回归:dns::resolution::ip4p_tests::、
dialer::tests::connected_ip4p_conversion_precedes_family_and_source_binding_only_at_opted_in_seams、
dialer::tests::ip4p_loopback_mapping_cannot_acquire_a_new_literal_exemption、
outbound::connector::tests::ip4p_udp_node_endpoint_retains_chain_identity_and_uses_actual_reply_peer。
这些测试不建立网络 socket;真实 TUN 的 TCP/SS2022/SOCKS5/WireGuard 及 UWP 平台路径单独验收。
TUIC 冷连接的公开 API 门禁(纯内存、无票据缓存或网络 socket):
tuic_cold_connection_cannot_publish_an_early_quinn_handle_without_resumption。
它检查仅启用 early-data 不能取得 Quinn 的早期客户端连接,不代表恢复连接或服务端验收。
Linux 受控物理 QUIC 的纯内存过滤器:physical_quic_memory_ 与
physical_quic_switches_are_session_scoped_strict_and_keep_mihomo_defaults。
检查分段的逐包/总字节预算、来源与显式源覆盖拒绝、完整接收边界、默认值与严格字段;
不创建 socket,不证明真实 ECN/GSO、protect、RSS、吞吐或设备行为。
transport::quic::physical::tests::physical_quic_memory_revocation_releases_io_with_retained_broadcast_pollers
在纯内存中检查多等待者广播、注册交错与持有已退役句柄时释放 IO。
physical_quic_memory_concurrent_read_leases_delay_retirement_until_both_release 另验两个并发读者、
退役等待双方释放及资源只析构一次。显式 ignored 的
transport::quic::physical::gate::real_tun_native_udp_retirement_gate 仅供隔离 Linux
容器以真实 TUN 验证适配器的 fd、资源计数和 Stop;常规内存回归不得执行该网络门禁。
MASQUE H2 capsule已就绪合批的纯内存过滤器:
outbound::masque::ip::h2_output_batch_memory_tests:: 与
transport::masque_codec::tests::masque_capsule_append_fit_and_rejection_preserve_the_existing_wire_prefix。
使用实际pump、内存PacketStream与codec验证合并、单包及时提交、大包与单溢出帧顺序、
TTL、取消安全、强flush背压及错误;不创建网络socket,不代替真实TUN与RSS验收。
WireGuard 输出准入的纯内存过滤器:outbound::wireguard::engine::full_handoff_memory_tests::。
使用真实 netstack 和原 32 槽队列,检查单 peer 保留满队列包至释放一槽、取消后资源释放,
以及多 peer 的有界交接与兄弟 peer 进展。
WireGuard 路由表的纯内存过滤器:outbound::wireguard::routes::tests::。
经实际配置校验和路由表构造检查空表、单前缀、主机边界、双栈隔离、最长前缀及同前缀最后声明的所有者。