kcptun-rust 1.1.0

A Rust implementation of kcptun, a fast and reliable tunnel based on KCP protocol
Documentation
//! kcptun-rust 集成测试
//! 
//! 这些测试需要先启动服务端和客户端,然后验证连接是否正常工作

use std::process::Command;

#[test]
#[ignore] // 默认忽略,需要手动运行
fn test_basic_connection() {
    // 这个测试需要手动启动服务端和客户端
    // 或者使用 test.sh 脚本
    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() {
    // 测试客户端 --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() {
    // 测试服务端 --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"),
        "版本信息应该包含程序名称"
    );
}