# rpki_rs_test_client `rpki_rs_test_client` 是一个基于 `rpki-rs` RTR 客户端接口的测试工具,参数风格对齐 `rtr_debug_client`。 实现上直接调用外部 crate 的 client API(`Client` / `PayloadTarget`),不重复实现 RTR 客户端状态机。 ## 构建 ```bash cargo build --bin rpki_rs_test_client ``` ## 基本用法 ```bash cargo run --bin rpki_rs_test_client -- [reset|serial|serial ] [options] ``` 默认值: - `addr`: `127.0.0.1:323` - `version`: `2` - `mode`: `reset` ## 常用参数 - `--steps `: 执行 `client.step()` 次数(默认 `1`) - `--follow`: bootstrap 结束后持续执行 `client.step()`(常驻模式) - `--print-records`: 打印当前收敛后的 payload 记录 - `--assert-min-records `: 断言收敛记录数下限 - `--assert-substr `: 在 payload 的 `Debug` 输出中做字符串断言(可重复) TLS 参数: - `--tls` - `--ca-cert ` - `--server-name ` - `--client-cert ` - `--client-key ` ## 限制说明 - 当前 `rpki-rs v0.18` client API 不支持显式覆盖初始版本,因此这里只接受 `version=2`。 - 支持 `serial`(无参数)模式:会基于 client 内部 state 自动走 serial 更新。 - 当前不支持 `serial ` 显式注入状态(传入会直接报错)。 ## 示例 TCP 连通 + 最小记录数断言: ```bash cargo run --bin rpki_rs_test_client -- \ 127.0.0.1:323 \ 2 reset \ --steps 1 \ --assert-min-records 1 ``` 自动 serial(无需传 sid/serial): ```bash cargo run --bin rpki_rs_test_client -- \ 127.0.0.1:323 \ 2 serial --steps 2 --follow ``` 结合 `mini_data` 的内容做字符串断言: ```bash cargo run --bin rpki_rs_test_client -- \ 127.0.0.1:323 \ 2 reset \ --assert-substr "10.0.1.0" \ --assert-substr "65003" ``` TLS 场景: ```bash cargo run --bin rpki_rs_test_client -- \ 127.0.0.1:324 \ 2 reset \ --tls \ --ca-cert tests/fixtures/tls/client-ca.crt \ --server-name localhost ``` ## Docker 启动(deploy) 构建并启动(Linux 服务器,`host` 网络): ```bash docker compose -f deploy/rpki-rs-client/docker-compose.yml up --build ``` 按需覆盖运行参数(覆盖 compose 默认 `command`): ```bash docker compose -f deploy/rpki-rs-client/docker-compose.yml run --rm \ rpki-rs-test-client 127.0.0.1:323 2 reset --steps 1 --assert-min-records 1 ``` 常驻跟进模式(先 bootstrap,再持续 serial/notify): ```bash docker compose -f deploy/rpki-rs-client/docker-compose.yml run --rm \ rpki-rs-test-client 127.0.0.1:323 2 serial --steps 2 --follow ``` 停止: ```bash docker compose -f deploy/rpki-rs-client/docker-compose.yml down ```