use std::process::Command;
#[test]
#[ignore] fn test_basic_connection() {
println!("集成测试需要手动运行 test.sh 脚本");
println!("或者手动启动服务端和客户端后运行此测试");
}
fn is_port_in_use(port: u16) -> bool {
use std::net::TcpListener;
TcpListener::bind(format!("127.0.0.1:{}", port)).is_ok()
}
#[test]
fn test_port_availability() {
assert!(
is_port_in_use(8080),
"端口 8080 应该可用(用于目标服务器)"
);
assert!(
is_port_in_use(29900),
"端口 29900 应该可用(用于 kcptun 服务端)"
);
assert!(
is_port_in_use(12948),
"端口 12948 应该可用(用于 kcptun 客户端)"
);
}
#[test]
fn test_binary_exists() {
let client_bin = "./target/release/kcptun-client";
let server_bin = "./target/release/kcptun-server";
assert!(
std::path::Path::new(client_bin).exists(),
"客户端二进制文件不存在: {}",
client_bin
);
assert!(
std::path::Path::new(server_bin).exists(),
"服务端二进制文件不存在: {}",
server_bin
);
}
#[test]
fn test_client_help() {
let output = Command::new("./target/release/kcptun-client")
.arg("--help")
.output()
.expect("无法执行客户端程序");
assert!(output.status.success(), "客户端 --help 应该成功");
assert!(
String::from_utf8_lossy(&output.stdout).contains("kcptun-client"),
"客户端帮助信息应该包含程序名称"
);
}
#[test]
fn test_server_help() {
let output = Command::new("./target/release/kcptun-server")
.arg("--help")
.output()
.expect("无法执行服务端程序");
assert!(output.status.success(), "服务端 --help 应该成功");
assert!(
String::from_utf8_lossy(&output.stdout).contains("kcptun-server"),
"服务端帮助信息应该包含程序名称"
);
}
#[test]
fn test_client_version() {
let output = Command::new("./target/release/kcptun-client")
.arg("--version")
.output()
.expect("无法执行客户端程序");
assert!(output.status.success(), "客户端 --version 应该成功");
let version = String::from_utf8_lossy(&output.stdout);
assert!(
version.contains("kcptun-client"),
"版本信息应该包含程序名称"
);
}
#[test]
fn test_server_version() {
let output = Command::new("./target/release/kcptun-server")
.arg("--version")
.output()
.expect("无法执行服务端程序");
assert!(output.status.success(), "服务端 --version 应该成功");
let version = String::from_utf8_lossy(&output.stdout);
assert!(
version.contains("kcptun-server"),
"版本信息应该包含程序名称"
);
}