首页 > 解决方案 > Rust 官方教程带模拟测试的多线程 Web 服务器 - 空请求

问题描述

我正在尝试为官方多线程 Web 服务器教程编写集成测试。

integrational_tests.rs,我有这样的事情:

fn connect_and_send_request() {
    let stream = TcpStream::connect("127.0.0.1:7879").unwrap();
    let mut writer = BufWriter::new(stream);
    let s = b"GET / HTTP/1.1\r\n\r\n";
    writer.write(s).unwrap();
    writer.flush().unwrap();
}

fn test_main_route() {
    let server_address = [SocketAddr::from(([127, 0, 0, 1], 7879))];

    let listener: TcpListener = TcpListener::bind(&server_address[..]).unwrap();
    let pool = ThreadPool::new(4);

    connect_and_send_request();

    for stream in listener.incoming() {
        let mut stream = stream.unwrap();

        pool.execute(|| {
            let main_mock = mock("GET", "/").create();
            handle_connection(stream);
            println!("Main mock {}", main_mock);
            main_mock.assert();
        });
    }

    fn handle_connection(mut stream: TcpStream) {
        let mut response = [0; 512];
        stream.read(&mut response).unwrap();
        stream.flush().unwrap();
        println!("Request: {}", String::from_utf8_lossy(&response[..]));
    }
}

在我的“请求”println!中,我看到了我的请求字符串,但main_mock.assert()基于 Mockito 失败:

thread <unnamed> panicked at assertion failed: (left == right) 
expect GET / ... but recived 0.

标签: multithreadingtcprustmockitosteam

解决方案


推荐阅读