# 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 -- <addr> <version> [reset|serial|serial <session_id> <serial>] [options]
```

默认值：
- `addr`: `127.0.0.1:323`
- `version`: `2`
- `mode`: `reset`

## 常用参数

- `--steps <n>`: 执行 `client.step()` 次数（默认 `1`）
- `--follow`: bootstrap 结束后持续执行 `client.step()`（常驻模式）
- `--print-records`: 打印当前收敛后的 payload 记录
- `--assert-min-records <n>`: 断言收敛记录数下限
- `--assert-substr <text>`: 在 payload 的 `Debug` 输出中做字符串断言（可重复）

TLS 参数：
- `--tls`
- `--ca-cert <path>`
- `--server-name <name>`
- `--client-cert <path>`
- `--client-key <path>`

## 限制说明

- 当前 `rpki-rs v0.18` client API 不支持显式覆盖初始版本，因此这里只接受 `version=2`。
- 支持 `serial`（无参数）模式：会基于 client 内部 state 自动走 serial 更新。
- 当前不支持 `serial <session_id> <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
```
