# kcptun-rust 测试指南
本文档介绍如何测试 kcptun-rust 客户端和服务端的功能。
## 快速测试
### 1. 基础功能测试(推荐)
运行简单测试脚本,检查二进制文件和基本功能:
```bash
./test_simple.sh
```
这个脚本会检查:
- ✅ 二进制文件是否存在
- ✅ 帮助信息是否正常
- ✅ 版本信息是否正确
- ✅ 配置文件是否存在
- ✅ 错误处理是否正常
### 2. 完整连接测试
运行完整测试脚本,测试客户端和服务端的实际连接:
```bash
./test.sh
```
这个脚本会:
1. 启动一个 HTTP 服务器作为目标(端口 8080)
2. 启动 kcptun 服务端(端口 29900)
3. 启动 kcptun 客户端(端口 12948)
4. 通过隧道发送 HTTP 请求测试连接
5. 检查进程状态和日志
**注意**:测试完成后按 `Ctrl+C` 停止所有进程。
## 手动测试
### 方法 1: 使用三个终端窗口
**终端 1 - 启动目标服务器:**
```bash
# 启动一个简单的 HTTP 服务器
python3 -m http.server 8080
```
**终端 2 - 启动 kcptun 服务端:**
```bash
./target/release/kcptun-server \
--listen :29900 \
--target 127.0.0.1:8080 \
--key "test-key-12345678" \
--crypt aes
```
**终端 3 - 启动 kcptun 客户端:**
```bash
./target/release/kcptun-client \
--localaddr :12948 \
--remoteaddr 127.0.0.1:29900 \
--key "test-key-12345678" \
--crypt aes
```
**测试连接:**
```bash
# 在另一个终端测试
curl http://127.0.0.1:12948/
```
如果看到 HTML 内容,说明连接成功!
### 方法 2: 使用配置文件
**创建测试配置:**
`test-server.json`:
```json
{
"listen": ":29900",
"target": "127.0.0.1:8080",
"key": "test-key-12345678",
"crypt": "aes",
"mode": "fast",
"quiet": false
}
```
`test-client.json`:
```json
{
"localaddr": ":12948",
"remoteaddr": "127.0.0.1:29900",
"key": "test-key-12345678",
"crypt": "aes",
"mode": "fast",
"quiet": false
}
```
**启动服务:**
```bash
# 终端 1
python3 -m http.server 8080
# 终端 2
./target/release/kcptun-server -c test-server.json
# 终端 3
./target/release/kcptun-client -c test-client.json
```
## 测试不同加密算法
### 测试 AES-128(默认)
```bash
# 服务端
./target/release/kcptun-server --crypt aes --key "test123"
# 客户端
./target/release/kcptun-client --crypt aes --key "test123"
```
### 测试 SM4 国密算法
```bash
# 服务端
./target/release/kcptun-server --crypt sm4 --key "test123"
# 客户端
./target/release/kcptun-client --crypt sm4 --key "test123"
```
### 测试 Salsa20
```bash
# 服务端
./target/release/kcptun-server --crypt salsa20 --key "test123"
# 客户端
./target/release/kcptun-client --crypt salsa20 --key "test123"
```
### 测试不加密(仅用于测试)
```bash
# 服务端
./target/release/kcptun-server --crypt none --key "test123"
# 客户端
./target/release/kcptun-client --crypt none --key "test123"
```
## 性能测试
### 使用 iperf3 测试带宽
**在目标机器上启动 iperf3 服务端:**
```bash
iperf3 -s -p 5001
```
**通过 kcptun 隧道测试:**
```bash
# 配置 kcptun 客户端连接到 iperf3 服务器
# 然后运行:
iperf3 -c 127.0.0.1 -p 12948
```
### 使用 curl 测试延迟
```bash
# 测试延迟
time curl -o /dev/null -s http://127.0.0.1:12948/
# 测试多次请求
for i in {1..10}; do
time curl -o /dev/null -s http://127.0.0.1:12948/
done
```
## Rust 单元测试
运行 Rust 单元测试:
```bash
# 运行所有测试
cargo test
# 运行集成测试(需要手动启动服务)
cargo test --test integration_test
# 运行特定测试
cargo test test_binary_exists
```
## 诊断工具
如果遇到连接问题,可以使用诊断脚本:
```bash
./diagnose.sh
```
这个脚本会检查:
- kcptun 进程状态
- 端口监听状态
- 日志文件内容
- 连接测试
- 配置建议
## 常见问题排查
### 1. HTTP 请求被代理拦截
如果看到 Privoxy 或其他代理错误,在 curl 命令中使用 `--noproxy "*"`:
```bash
curl --noproxy "*" http://127.0.0.1:12948/
```
### 2. 端口被占用
如果看到 "address already in use" 错误:
```bash
# 检查端口占用
lsof -i :29900 # 服务端端口
lsof -i :12948 # 客户端端口
lsof -i :8080 # 目标服务器端口
# 杀死占用进程
kill -9 <PID>
```
### 2. 连接失败
检查以下几点:
- ✅ 服务端和客户端使用相同的密钥(`--key`)
- ✅ 服务端和客户端使用相同的加密算法(`--crypt`)
- ✅ 客户端 `--remoteaddr` 指向正确的服务端地址
- ✅ 防火墙没有阻止 UDP 连接
### 3. 查看详细日志
去掉 `--quiet` 参数查看详细日志:
```bash
./target/release/kcptun-server --listen :29900 --target 127.0.0.1:8080 --key test123
```
### 4. 测试配置文件
验证配置文件格式是否正确:
```bash
# 检查 JSON 格式
# 或者使用 jq(如果已安装)
## 测试检查清单
- [ ] 二进制文件可以正常启动
- [ ] 帮助信息显示正常
- [ ] 版本信息正确
- [ ] 服务端可以监听端口
- [ ] 客户端可以连接到服务端
- [ ] 数据可以通过隧道正常传输
- [ ] 不同加密算法都能正常工作
- [ ] 配置文件可以正常加载
- [ ] 错误处理正常(如密钥不匹配)
## 自动化测试
可以创建 CI/CD 测试脚本:
```bash
#!/bin/bash
# ci_test.sh
set -e
echo "Building..."
cargo build --release
echo "Running simple tests..."
./test_simple.sh
echo "All tests passed!"
```
## 性能基准测试
记录性能数据用于对比:
```bash
# 测试脚本
./benchmark.sh > benchmark_results.txt
```
比较不同配置的性能:
- 不同加密算法的影响
- 不同速度模式的影响
- 不同 MTU 设置的影响
- 不同窗口大小的影响
---
**提示**:测试时建议使用 `--quiet` 参数减少日志输出,专注于功能测试。